-1

プロシージャ find-last は、1 つの引数とリストの述語を取り、述語を満たすリスト内の右端の要素を返します。そのような要素が存在しない場合は #f を返す

(define (find-last-helper ans)
  (if (predicate? ans)
      (add1 ans)))
(define find-last
  (lambda (predicate? ls)
    (cond 
      [(null? ls) #f]
       [(equal? predicate? (car ls)) car ls]
        [else(find-last-helper(find-last ls(cdr ls)))])))

ヘルパーまたは find-last プロシージャで何か不足していますか? 構文エラーを返します。

4

1 に答える 1

1

述語?find-last-helperには表示されません。これを修正する方法は、 find-last のラムダ ブロック内に find-last-helper の定義を移動するか、find - last-helper追加のパラメーターを追加して述語を削除することですか? それに渡すことができます。

私は前者をお勧めします。(名前から) find-last-helperがfind-lastにのみ役立つと仮定すると、外部環境がクリーンに保たれます。

注: エラーを修正しても基本的な構造を維持すると仮定すると、関数は右端ではなく、左端の一致 (最初に見つかった一致) を返します。これを明確に理解するために、リストの左端の項目が述語を満たしていると仮定して、コードをステップ実行します。3 番目の再帰的なcond行が実行されていないことは明らかです。

于 2012-10-09T11:21:14.597 に答える