1

练习题:

传递给过程的参数不必总是相同的类型。定义一个过程 echo,它接受任何类型的值并返回该值。

我目前做了:

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

但问题是,如果我输入数字或值,程序不会打印 x。任何人都可以帮忙吗?

4

2 回答 2

4

您被要求实现身份功能。如果您的解释器提供它,则该echo过程可以作为别名实现:

(define echo identity)

或者作为valuesRacket 的别名:

(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 回答