3

私は現在、MIT スキームの宿題に取り組んでおり、非常に短いと思われるいくつかの問題に遭遇しましたが、それらのいくつかを実装する方法について少し混乱しています。

1 つの問題として、すべての整数を削除したリストを返す関数を作成する必要があります。なんとか解決しましたが、

(define (f2a lst) (map (lambda(x) (remove number? x)) lst))

remove を使用せずに filter を使用するように書き直す方法については混乱していますが。*注:(f2a '(("a" 1 "b") (2 "c") (-1 "d") (-2)))リターン'(("a" "b") ("c") ("d"))

他の 2 つの問題は、解決策が見つからない問題です。

彼らは私に、正の奇数整数と負の偶数整数をすべて削除したリストを返す関数を書くように頼んでいます。例えば、

(f2b '(("a" 1 "b") (2 "c") (-1 "d") (-2))) 

戻り値

(("a" "b") (2 "c") (-1 "d"))

間違ったコードがいくつかありますが、これを解決するためにどのようにアプローチしたかを示していると感じています:

(define (f2b lst)
  (lambda(x) 
    (cond ((and (positive? x) (odd? x)) (filter x lst))
      ((and (negative? x) (even? x)) (filter x lst))
      (else "this should never print"))))

最後の問題は、リストに追加されたすべての文字列からなる文字列を返す関数を要求するだけです。(f2c '(("a" 1 "b") (2 "c") (-1 "d") (-2)))「abcd」を返します。

私はほとんどこれを理解することができましたが、奇妙な値を返し続けたときに立ち往生しました。これは私が持っているコードです:

(define (f2c lst)
  (lambda(x)
    (map (lambda (x) (filter string? x)) lst)
    (list x))
  (string-append (car lst) (cdr lst)))

高次の構文に関しては、map、filter、accumulate、sum に限定されます。私は直接的な答えを求めているわけではありませんが、私が何をする必要があるかを理解するための助けを求めています. 私のコードで何が間違っていますか? これに関して与えられた援助は非常に高く評価されています。ありがとうございました。

4

1 に答える 1

1

最初の 2 つの問題では、入力と目的の出力の構造は同じです。唯一の違いは、要素をいつ/いつ削除しないかに関する述語です。2 番目のケースでは、次のようになります。

(define (f2b lst) 
  (map (lambda (sublst)
        (remove (lambda (x)
                  (and (number? x)
                       (or (and (positive? x) (odd?  x))
                           (and (negative? x) (even? x)))))
                 sublst))
       lst))

述語のみが異なるため、これを次のように一般化できます。

  (define (f2x predicate)
    (lambda (lst)
      (map (lambda (sublst) (remove predicate sublst)) lst)))
  (define f2a (f2x number?))
  (define f2b (f2x (lambda (x) 
                     (and (number? x)
                          (or (and (positive? x) (odd?  x))
                              (and (negative? x) (even? x))))))

最後の問題では、最初の問題の結果を次のように使用できます。

(define (f2c lst)
  (apply string-append (apply append (f2a list))))

また、f2b と f2a の構文が正しくないことに注意してください。使用している

(define (func arg) 
  (lambda (x) ...))

(func arg)これは、あなたが望むものではない関数を返す ことを意味します。

于 2013-03-22T15:31:55.567 に答える