2015-09-24 115 views
0

我遵循我的書「Lisp的土地」中的語法,let版本只有在傳遞* string *時才返回nil。而「setq」版本返回字符串的反轉版本。爲什麼Setq工作,但不讓?

(defparameter *string* "a b c") 
(defun reverse-string (string) 
    (let (reversed (string)))) 

(defun setq-reverse-string (string) 
    (setq reversed (reverse string))) 

回答

2

LET語法是:

(LET ((var1 val1) 
     (var2 val2) 
     ...) 
    body) 

在地方的(varN valN)你可以把varN,這是(varN nil)簡寫。您也可以省略valN,在這種情況下,它默認爲nil

所以,你的代碼就相當於:

(defun reverse-string (string) 
    (let ((reversed nil) 
     (string nil)))) 

你缺少括號的水平,做你想要的:

(defun reverse-string (string) 
    (let ((reversed (string))))) 

你還缺少調用reverse,和返回變量

(defun reverse-string (string) 
    (let ((reversed (reverse string))) 
    reversed)) 
+0

哈哈,感謝的人,我認爲它只需要讓我們有一個雙((如果定義更多一個變量,並感謝指出有關丟失「反向」的位,我在原來的那個位置,但我編了很多次,我一定錯過了它。我很欣賞真正的快速反應。 – Floofk

+0

據它所知,你定義了兩個變量:'reverse'和'string'。它怎麼能說明你只想定義一個變量? – Barmar

+0

你不能這是我的錯,不是你的:)感謝您的幫助如此之快! – Floofk

相關問題