2016-04-02 16 views
0

関数(f)とListをパラメータとする関数(last)を作成しようとしています。リストは関数に渡され(odd?)、リストの最後の要素が奇数の場合は真(#t)を返し、そうでなければ偽(#f)を返します。しかし、次のコードは機能しません。関数をパラメータとして宣言します。スキームのパラメータとして関数を渡す

(define (last f L) 
(if (null? L) '() (last f (cdr L)))) 

(奇数最後?「(0 5 3 8 6 7))は、関数を書いた方法について

+0

"関数をパラメータとして宣言する"必要はありません。あなたの問題は完全に無関係です。あなたは内側の式の周りに余分な括弧を持っているので、呼び出しはちょうど '(last odd? '(0 5 3 8 6 7))'でなければなりません。 –

+0

ありがとうございます。私はあなたのコメントに基づいて私の質問を編集しました。 – Siva

答えて

1

組み込み関数だけを使って解を書く方法は、プロシージャをパラメータとして渡すための正しい構文に気づくだけでなく、関数名をlastとすると悪い考えです既存の手順を使用して、問題を解決するために使用する必要があります。

(define (my-last f L) 
    (f (last L))) 

あなたは間違いなく、最初から機能を記述する必要があれば、あなたが必要としているものをベース例を理解していることを確認してください:予想通り

(define (my-last f L) 
    (cond ((null? L) #f) 
     ((null? (cdr L)) (f (car L))) 
     (else (my-last f (cdr L))))) 

いずれかの方法では、それが動作:

(my-last odd? '(0 5 3 8 6 7)) 
=> #t 
+0

'last'関数を使わずに解を書く方法はありますか? (last-f)) – Siva

+1

@SivabalanBalasubramanianあなた自身の 'last'関数を書くことによって、しかし、常に組み込みの既存の関数を使うことを好まないようにしてください。ホイールを再作成しないでください;) –

-1

、あなたはコールに設定された余分な括弧を持っています。誰かがあなたのコメントにあなたを示唆したようにちょうど(last odd? '(0 5 3 8 6 7))であるべきです。

関連する問題