gpt4 book ai didi

LISP 从 for 循环将项目附加到数组

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

如果该项目不在数组中,我正在尝试将其添加到数组中。本质上,我想要实现的是遍历列表,通过检查它们是否已经存在来删除所有重复项。

我是这样开始的:

(defun reduce(mylist)

(setq newList (list ()) )
(loop for item in mylist
do (


(if (not (member item newList))


)


))


)

(reduce '(3 4 5 4 5))

我遇到的错误是 (IF (NOT (MEMBER 'ITEM 'NEWLIST))) should be a lambda expression。我知道这与访问 itemnewList 的方式有关,但不知道如何更正它。

最佳答案

该错误是由于 do 表单的主体用括号括起来引起的。 Parens 在 lisp 中有意义,所以像这样的“额外”包装会破坏代码。

还有一些错误。 setq 用于赋值给未绑定(bind)的变量。您应该使用 let 来建立绑定(bind)。该变量的初始值是一个包含 () 的单长列表,而它可能应该只是 ()

reduce 已经是一个 Common Lisp 函数,所以选择不同的名称是个好主意。

最后,格式既不是惯用的也不是一致的 - 您有 mylistnewList。 lisp 程序员会拼写这些名称 my-listnew-list

这是清理一下后的样子。我留下了一些重要的部分供您填写。

(defun unique-elements (list)
(let ((result ()))
(loop for item in list
do (when (not (member item result))
...))
...))

(为这项工作使用 loop 的收集机制会更干净,但我决定一个如何使用 do 的例子会更有帮助。)

关于LISP 从 for 循环将项目附加到数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30135924/

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