演習の質問:
プロシージャに渡される引数は、必ずしも同じタイプである必要はありません。あらゆる種類の値を受け入れ、その値を返すプロシージャエコーを定義します。
私は現在作った:
(define echo
(lambda (x)
(quote x)))
しかし、問題は、数値または値を入力すると、プロシージャがxを出力しないことです。誰か助けてもらえますか?
アイデンティティ関数を実装するよう求められています。インタープリターがそれを提供する場合、echo
プロシージャーはエイリアスとして実装できます。
(define echo identity)
values
またはRacketのエイリアスとして:
(define echo values)
そうでない場合は、最初から実装するのは非常に簡単echo
です。パラメーターとして渡されたものを返すだけで、それを使用する必要はありませんquote
。
(define (echo x) x)
または明示的に a を使用するlambda
:
(define echo (lambda (x) x))
上記の手順はすべて、あらゆる種類の値を受け入れ、その値を返します。次に例を示します。
(echo "hello")
> "hello"
(echo 42)
> 42
(echo (quote x))
> 'x
(quote x) はシンボル x の評価を防ぐため、返される値は x の値ではなく、シンボル自体です。
アイデンティティ関数は引数を取り、それを返します。
(lambda (x) x)
適用時:
((lambda (x) x) 4)
;=> 4
((lambda (x) (quote x)) 4)
;=> x