2015-10-13 52 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

相關問題