练习题:
传递给过程的参数不必总是相同的类型。定义一个过程 echo,它接受任何类型的值并返回该值。
我目前做了:
(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