2015-10-13 49 views
0

我刚学习如何在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))))) 

这只是重新定义方案的地图功能。当我传递一个函数和一个列表时,它在第三行失败为“null:undefined。不能引用未定义的标识符”。

我刚刚复制了什么视频显示,所以不知道为什么它失败。如果我为“()”输出空值,那就行了。有人知道为什么

回答

1

您的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)应该返回#t

如果obj空列表,否则返回#f

因此可以将null定义为'()

+0

好的,谢谢!我想我没有想到会是这样,但是有道理 – cpd1

相关问题