2
Design a function that consumes a [Listof Number] and checks if 0 is in the list.

を使って解きたいと思いlambdaます。私は本を​​読んでいて、これが今のところ私が思いついたものです。近くにいることを願っています。

(define (five? lon)
  (..... (lambda (x)
           (= x 5))
         lon))

これをどのように終わらせますか(正しい場合)?

4

2 に答える 2

1

検索されている番号が (問題の説明ではなくコードから推測される) と仮定すると、5要求されていることを既に実行しているプロシージャがあり、次のように呼ばれmemberます。

(member 5 '(1 3 5 7))
=> '(5 7)

ドキュメントによると、これは次のとおりです。

等しい lst の最初の要素を見つけますか? そのような要素が存在する場合、その要素で始まる lst の末尾が返されます。それ以外の場合、結果は #f になります。

しかし、同様の手順をゼロから実装する場合、空白を埋めるソリューションは次のようになります。

(define five?
  (lambda (lon)
    (if <???>                 ; is the list empty?
        <???>                 ; then the number is not in the list
        (or <???>             ; otherwise the current element is 5 or
            (five? <???>))))) ; the number is in the rest of list

コードをテストすることを忘れないでください:

(five? '())
=> #f
(five? '(1 2 3 6 7 9))
=> #f
(five? '(1 2 3 5 7 9))
=> #t
于 2013-03-10T04:18:13.973 に答える
1

うん!関数をチェックアウトしormapます。

手順

(ormap proc lst ...+) → any
  proc : procedure?
  lst : list?

ラケットのドキュメントから:

proc が lst の各要素に適用されるという意味では map に似ていますが、

  • proc のすべてのアプリケーションが #f を生成する場合、結果は #f です。と

  • 結果は、#f 以外の値を生成する proc の最初の適用の結果になります。この場合、proc は lsts の後の要素には適用されません。lsts の最後の要素への proc の適用は、ormap 呼び出しに関して末尾の位置にあります。

于 2013-03-10T02:19:49.707 に答える