lisp - lisp 的问题并使用迭代进行构造
问题描述
首先,我遇到了这个问题。我生成的代码不是遍历每个单词,而是遍历整个传递的参数。我正在使用 do 循环将信息传递到哈希表中。
(defun set_isa (partOfSpeech &rest words)
(do ((wordVar words))
((null wordVar) nil)
(putp partOfSpeech word-dict wordVar)
(setf wordVar (cdr wordVar))))
有了这个,我得到了这个结果使用跟踪
(set_isa 'Verb 'Talk 'Run 'jump )
1. Trace: (SET_ISA 'VERB 'TALK 'RUN 'JUMP)
1. Trace: SET_ISA ==> NIL
NIL
当我调用哈希表时,它只添加最后传递的参数
#S(HASH-TABLE :TEST FASTHASH-EQL (VERB . (JUMP)))
解决方案
欢迎来到 SO。我看到我们的问题存在一些问题,希望能给您一些提示。
缩进
请正确缩进您的代码。这将导致代码更具可读性,并增加其他人可以帮助您的可能性。
(defun set_isa (partOfSpeech &rest words)
"Put an understandable docstring here!"
(do ((wordVar words))
((null wordVar) nil)
(putp partOfSpeech word-dict wordVar)
(setf wordVar (cdr wordVar))))
你会在这里找到更多关于风格的建议。另请参阅信息选项卡以获取参考集合。
可运行的示例
在我们的函数putp
中没有定义。因此,我无法运行您的代码并查看究竟会出现什么错误等。请始终提供完整的示例,并清楚地说明您的期望和得到的结果。的部分hash-table
根本不清楚。它从何而来?它在我们的代码中是如何使用的?
做循环
检查初学者参考以了解do
其及其亲属的正确语法。do
如果您想使用try遍历列表dolist
。
(dolist (item '(a b c d))
(print item))
使用do
您可以通过此构造实现相同的效果:
(do ((items '(a b c d) (rest items)))
((null items))
(print (first items)))
一开始我似乎很难把括号弄对,但如果你把它背后的逻辑弄对了,它会变得更容易。您不需要该setf
零件,因为do
它会照顾它。
推荐阅读
- javascript - 当我运行代码时,它返回“TypeError:无法读取未定义的属性'名称'”
- python - 构建嵌套数组 Python
- javascript - 在从属模块的构造函数中传递 `this` 值 - 键入
- android - 不能使用 ListView 使 Stack 可滚动
- spring-boot - Springboot Thymeleaf 在控制器中使用多级路径时无法找到静态资源
- php - 我无法在我的服务提供商上注入两个或更多类
- javascript - 如何在标签中做很多事情?
- reactjs - 从firebase firestore获取数据后如何为状态挂钩赋值
- linq - Linq Group By - 无法对自定义类进行分组?
- javascript - 当光标隐藏在其他 HTML 元素后面时如何触发 mouseenter 事件?