2009-12-03 97 views
2

我寫了一個測試功能來測試我的Lisp的一個簡單的口齒不清功能

(defun testp (lst) 
    (mapC#'(lambda (x y) 
      (if (null lst) 
       (return-from testp t))) 
     lst 
     (cdr lst))) 

「迴歸 - 從」我認爲測試(testp「零)的理解,應該返回噸,但它返回NIL。 你能幫我理解爲什麼它返回NIL嗎?

非常感謝。

+1

如果您接受以前的問題,您可能會對未來的問題獲得更多幫助。 – 2009-12-03 16:53:13

回答

3

您可以通過兩個空列表調用MAPC。

如果列表中沒有任何要映射的元素,應該如何使用LAMBDA函數?

順便說一下,你可以寫'list'而不是'lst'。

(defun testp (list) 
    (mapC#'(lambda (x y) 
      (if (null list) 
       (return-from testp t))) 
     list 
     (cdr list))) 
3

通常,mapc會將您的lambda應用於列表中的每個元素。我的猜測(我不使用Common Lisp)是因爲mapc在列表中沒有元素可以操作,所以你的lambda根本不會被調用,結果函數的返回值是mapc的返回值, (因爲它映射在什麼都沒有)是nil