And*_*ech 3 scheme the-little-schemer
我试着写一个(简单的,即没有eqan?)one?这样的函数:
(define one?
(lambda (n)
((= 1 n))))
Run Code Online (Sandbox Code Playgroud)
但是上面的方法不起作用,因为当我这样称呼时:
(one? 1)
Run Code Online (Sandbox Code Playgroud)
我得到了这个错误:
procedure application: expected procedure, given: #t (no arguments)
Run Code Online (Sandbox Code Playgroud)
正确的方法(来自The Little Schemer)编写它是:
(define one?
(lambda (n)
(cond
(else (= 1 n)))))
Run Code Online (Sandbox Code Playgroud)
为什么需要使用cond带有else子句而不仅仅是返回(= 1 n)?
您没有任何理由想要这样做.当我回到家时,我会查看我的TLS副本,看看我是否可以判断正在发生什么,但你不会错过任何基本的cond或任何事情.
回复上面的注释:它没有用,因为你在lambda的主体中有一组额外的括号.它应该是
(lambda (n) (= 1 n))
Run Code Online (Sandbox Code Playgroud)
在您的版本额外的括号意味,而不是返回值#t或者#f,你试图调用该值作为不带参数的函数.
| 归档时间: |
|
| 查看次数: |
278 次 |
| 最近记录: |