list - 使用List将字符串定义为字符列表并编写递归函数返回字符串的长度

标签 list common-lisp

任务:使用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/

相关文章:

lisp - 列表作为 Lisp 中的函数参数

macros - 在宏中使用来自外部(词法)环境的变量

list - F# If 语句类型不匹配错误

java - 未为 Main 类型定义方法 collectFrom(List<Integer>)

python - 展开嵌套的 Python 字典

error-handling - SBCL:在 COMPILE 期间缺少 CONTINUE 重新启动? (真的是:在 HANDLER-CASE 中不存在)

lisp - 递归 - 获取列表中所有可能的对

common-lisp - hunchentoot 中的特殊变量

html - 有序列表 css 和小节

python - 使用模式创建更大的列表列表