gpt4 book ai didi

lisp - 口齿不清的新手。我想知道为什么我会收到此错误。 "1 is not of type LIST."

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

(defun fizzbuzz(lst emptyList)
(if (= (mod (car lst) 3) 0)
(fizzbuzz (cdr lst) (append emptyList (list(append (car lst) '(fizz)))))
)
(if (= (mod (car lst) 5) 0)
(fizzbuzz (cdr lst) (append emptyList (list(append (car lst) '(buzz)))))
)
(if (and (= (mod (car lst) 3) 0) (= (mod (car lst) 5) 0))
(fizzbuzz (cdr lst) (append emptyList (list(append (car lst)
'(fizzbuzz)))))
)
(fizzbuzz (cdr lst) (append emptyList (car lst)))

)

(fizzbuzz '(1 2 3 4 5) '(0))

请记住我是新来的。我的教授希望我们使用 lisp 练习递归。该程序应该将不能被 5 或 3 整除的数字添加到列表中。那些能被 3 整除的会像这样插入到列表中 (3 fizz)。能被 5 整除的:(5 嗡嗡声)。那些可以被两者整除的 (15 fizzbuzz)。我将如何从函数返回新列表?另外,为什么我会收到帖子标题中列出的错误?

最佳答案

您收到此错误是因为最后一个表达式 (fizzbuzz (cdr lst) (append emptyList (car lst)))

第一轮 (fizzbuzz '(1 2 3 4 5) '(0)) 变成 (fizzbuzz '(2 3 4 5) '(0 . 1)) 然后它将尝试执行 (append '(0 . 1) 2)append 可以处理点分列表和原子作为最后一个参数,但它不能在不是最后一个参数时附加点分列表。 1 应该做什么?

还知道您没有停止条件并且单独的 if 无条件地运行到另一个 if 所以对于 15 它将首先递归首先,然后丢弃该结果。然后它会在第二个中递归以丢弃该值。然后无条件地递归到最后。我很确定您只希望调用其中一个,您可以使用 if-elseif-else 来实现,而它的 lisp 版本是 cond:

(cond 
(p1 c1) ; if p1 then c1
(p2 c2 c2b) ; elseif p2 then c2 and c2b (last expression becomes the result)
(p3 c3) ; elseif p3 then c3
(t a4)) ; else a4

关于lisp - 口齿不清的新手。我想知道为什么我会收到此错误。 "1 is not of type LIST.",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46146127/

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