2012-07-23 100 views
2

的長度任務:使用列表定義字符串的字符的列表,並寫一個遞歸函數返回字符串的長度。使用列表定義字符串的字符的列表,並寫一個遞歸函數返回字符串

我爲此作業編寫了代碼,但它不起作用。

以下是我的代碼:

(defun stringlength (string) 
;; "Compute the length of str." 

    (if (string= string nil) 0 

     (+ 1 (stringlength(subseq string 1))))) 

,並在命令行我輸入:

cl-user(32): (stringlength "aaa") 

它給我的錯誤:

Stack overflow (signal 1000) 
    [condition type: synchronous-operating-system-signal] 

有誰可以幫我這個?非常感謝你!!!

回答

2

您應該記錄或測試函數是否需要一個字符列表。否則會令人困惑,因爲STRING和字符串操作都內置在Lisp中,字符串不是列表。

你已經被它弄糊塗了;-)。 STRING=是Lisp的一個函數,它是爲內置類型STRING定義的。您不能使用它,因爲您的任務是對字符列表執行操作。另外SUBSEQ是錯誤的功能。

若要替換STRING=您需要一個函數來測試某些東西是否爲空列表。

若要替換SUBSEQ您需要一個函數,該函數返回已刪除頭元素的列表。

(stringlength "aaa") 

上面那麼也是錯誤的。你需要用一個字符列表來調用它,而不是內置的字符串類型。看到你的任務。請參閱函數LIST並參閱如何編寫Lisp中的字符。

相關問題