1

演習の質問:

プロシージャに渡される引数は、必ずしも同じタイプである必要はありません。あらゆる種類の値を受け入れ、その値を返すプロシージャエコーを定義します。

私は現在作った:

(define echo
  (lambda (x)
     (quote x)))

しかし、問題は、数値または値を入力すると、プロシージャがxを出力しないことです。誰か助けてもらえますか?

4

2 に答える 2

4

アイデンティティ関数を実装するよう求められています。インタープリターがそれを提供する場合、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
于 2012-09-09T13:56:11.960 に答える
2

(quote x) はシンボル x の評価を防ぐため、返される値は x の値ではなく、シンボル自体です。

アイデンティティ関数は引数を取り、それを返します。

(lambda (x) x)

適用時:

((lambda (x) x) 4)
;=> 4

((lambda (x) (quote x)) 4)
;=> x
于 2012-09-09T12:07:59.720 に答える