【发布时间】:2017-02-05 01:30:51
【问题描述】:
我正在尝试查找原子在列表中的位置。
预期结果:
(position-in-list 'a '(a b c d e)) 给出 0
(position-in-list 'b '(a b c d e)) 给出 1
(position-in-list 'Z '(a b c d e)) 给出零。
当项目在列表中时,我有一个函数可以正确给出位置:
(defun position-in-list (letter list)
(cond
((atom list) nil)
((eq (car list) letter) 0)
(t (+ 1 (position-in-list letter (cdr list))))))
问题是当item不存在时它不会返回nil,好像它到达(atom list) nil它会给出这个错误:*** - 1+: nil is not a number当它unstacks时,它会尝试将值添加到nil.
有没有办法调整这个函数(保持相同的结构),以便在项目不在列表中时正确返回nil?
注意事项:
我知道库中有一个
position函数,但我不想使用它。我知道我的问题类似于this one,但我上面提到的问题没有得到解决。
* 编辑 * 感谢大家的回答。虽然我没有必要的知识来理解你提到的所有建议,但它很有帮助。
我找到了另一个解决我的问题的方法:
(defun position-in-list (letter liste)
(cond
((atom liste) nil)
((equal letter (car liste)) 0)
((position-in-list letter (cdr liste)) (+ 1 (position-in-list letter (cdr liste)))) ) )
【问题讨论】:
-
这既晦涩又低效。既然你正在努力学习,我希望你能找到最有效、最有效的方法。 (sds已经提供了,
标签: recursion position lisp common-lisp