在小型 Scheme 脚本中使用 Null
Null use in a small Scheme script
我只是在学习如何在 Scheme 中编写并遇到了使用 Null 的障碍。我有下面这个视频系列的脚本...
https://www.youtube.com/watch?v=Qqext1NwmqM&index=2&list=PLgyU3jNA6VjRMB-LXXR9ZWcU3-GCzJPm0
脚本...
(define (my-map fn lst)
(if (null? lst)
null
(cons (fn (car lst)) (my-map fn (cdr lst)))))
这只是重新定义了Scheme中的map函数。当我传递一个函数和一个列表时,它在第三行失败为 "null: undefined. cannot reference undefined identifier"。
我只是复制了视频显示的内容,所以不确定为什么会失败。如果我为 '() 切换为 null,那行得通。有人知道为什么吗?
很可能您的 Scheme 解释器没有将 null
符号绑定到 '()
值,因为这不是语言规范所要求的。要么这样做:
(define null '())
或者等同于此,正如您已经猜到的那样:
(define (my-map fn lst)
(if (null? lst)
'()
(cons (fn (car lst))
(my-map fn (cdr lst)))))
请注意,最新的 Scheme report 指出 (null? obj)
应该 return #t
if obj
is the empty list, otherwise returns #f
所以定义null
为'()
就可以了。
我只是在学习如何在 Scheme 中编写并遇到了使用 Null 的障碍。我有下面这个视频系列的脚本...
https://www.youtube.com/watch?v=Qqext1NwmqM&index=2&list=PLgyU3jNA6VjRMB-LXXR9ZWcU3-GCzJPm0
脚本...
(define (my-map fn lst)
(if (null? lst)
null
(cons (fn (car lst)) (my-map fn (cdr lst)))))
这只是重新定义了Scheme中的map函数。当我传递一个函数和一个列表时,它在第三行失败为 "null: undefined. cannot reference undefined identifier"。
我只是复制了视频显示的内容,所以不确定为什么会失败。如果我为 '() 切换为 null,那行得通。有人知道为什么吗?
很可能您的 Scheme 解释器没有将 null
符号绑定到 '()
值,因为这不是语言规范所要求的。要么这样做:
(define null '())
或者等同于此,正如您已经猜到的那样:
(define (my-map fn lst)
(if (null? lst)
'()
(cons (fn (car lst))
(my-map fn (cdr lst)))))
请注意,最新的 Scheme report 指出 (null? obj)
应该 return #t
if
obj
is the empty list, otherwise returns#f
所以定义null
为'()
就可以了。