gpt4 book ai didi

lisp - 单引号字符串 checkin 列表

转载 作者:太空宇宙 更新时间:2023-11-03 19:04:23 25 4
gpt4 key购买 nike

我正在考虑这个问题。如何检查列表中的单引号字符串? (不是双引号字符串)Function stringp, typecase, and so on.. is Only handle double quotes.

我希望 make (f '((3 a) (2 b) (1 c))) 应该返回 6。非整数应该被忽略。

我试过这段代码。

(defun f (lst)
(typecase lst
(integer (+ (f (first lst)) (f (rest lst))))
(list 0))
)

我需要检查列表中的单引号字符串。然而,stringp,typecase 并没有像我想要的那样工作。

我应该怎么做才能解决这个问题?

最佳答案

当你写'((3 a) (2 b) (1 c))时,没有没有字符串:没有单引号字符串(没有这样的东西在 Lisp 中),没有双引号字符串。你有这个值:

(quote ((3 a) (2 b) (1 c)))

QUOTE是一个特殊运算符,它阻止对其子表单进行评估。引号内的内容是文字常量数据,已读取但未计算。

在这里,您有一个列表的列表,每个列表的第一个位置包含一个数字,第二个包含一个符号元素。特别是,没有字符串。

符号是具有名称(字符串)的对象。相同符号 x 的每次出现都指代相同的对象1。下面,所有的 x 都指向同一个符号:

((3 x) (2 x) (1 x))

在你的代码中,你只需要检查是否有一个整数,其他任何东西都使用零: float 、字符串、符号、向量、哈希表、CLOS 实例......

您的代码中的一个大问题是您检查变量 list(一个错误的名称,因为您不确定它是否是一个列表)是否是一个整数 ,但随后您继续获取此整数的 firstrest:这肯定会失败!

(defun f (form)
(typecase form

;; cons cell: recurse
(cons (+ (f (first form))
(f (rest form))))

;; integer: form is the value
(integer form)

;; anything else: zero
(t 0)))

如果您的数据始终遵循相同的模式(一对夫妇的列表,一个数字,一个符号),您可以简单地遍历每一对并对数字求和:

(loop for (number symbol) in list sum number)

1. 在同一个package , 如果您不unintern 符号。

关于lisp - 单引号字符串 checkin 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42318443/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com