任务:使用List将字符串定义为字符列表,并编写一个递归函数来返回字符串的长度。
我为此作业编写了代码,但它不起作用。
以下是我的代码:
(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]
有人可以帮我解决这个问题吗?非常感谢!!!
最佳答案
(defun stringlength (string)
(if (string= string nil)
0
(+ 1 (stringlength (subseq string 1)))))
您应该记录或测试该函数是否需要字符列表。否则会令人困惑,因为 STRING 和字符串操作是内置于 Lisp 中的,而字符串不是列表。
你已经被它搞糊涂了;-)。 STRING=
是 Lisp 中的一个函数,为内置类型 STRING
定义。您不能使用它,因为您的任务是对字符列表实现操作。而且 SUBSEQ
是错误的函数。
要替换 STRING=
,您需要一个函数来测试某些内容是否为空列表。
要替换 SUBSEQ
,您需要一个函数来返回删除了头元素的列表。
(stringlength "aaa")
上面的话也是错误的。您需要使用字符列表而不是内置字符串类型来调用它。看你的任务。请参阅函数 LIST
并了解 Lisp 中的字符是如何书写的。
关于list - 使用List将字符串定义为字符列表并编写递归函数返回字符串的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11607183/