gpt4 book ai didi

lisp - 如何在列表中找到原子的位置

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

我试图在列表中找到一个原子的位置。

(在列表中的位置 'a (a b c d e))给出 0

(列表中的位置 'b (a b c d e) )给出 1

(列表中的位置 'Z(a b c d e) )给出零。

我粘贴了只返回 1 的代码。

(defun position-in-list (letter list) )
( cond
( (null list) nil
)
( (eq (car list) letter) count
)
( t (position-in-list letter (cdr list)) count)
)
)

( defun count ()
( + 0 1)
)

最佳答案

首先,Common Lisp 标准库已经有了;它叫做 position

(position 'a '(a b c d e)) ==> 0
(position 'b '(a b c d e)) ==> 1
(position 'z '(a b c d e)) ==> NIL

一般来说,标准库里的东西就是拿来用的。 (是的,position 给出了这些输出。我只是通过 REPL 运行了它们。)

其次,不要听起来比你更圣洁或其他任何东西,但你的括号风格只会伤害我的眼睛。将左括号放在列表中第一项的正前方,并将所有右括号与列表中的最后一项放在同一行。例如:

(defun hello-world ()
(format t "Hello World!"))

(defun position-in-list (letter list)
(cond
((null list) nil)
((eq (car list) letter) count)
(t (position-in-list letter (cdr list))
count)))

(defun count ()
(+ 0 1))

这可能会让您觉得难受(起初对我来说是这样),但它可以帮助您更轻松地发现错误。

第三,我不知道您的 count 函数应该做什么,但是 position-in-list 可能没有按照您期望的方式执行。试试这个:

(defun position-in-list (letter list)
(cond
((null list) nil)
((eq (car list) letter) 0)
(t (1+ (position-in-list letter (cdr list))))))

最终,如果 list 中未找到 letter 则返回 NIL,如果是则返回索引。是的,我知道那些括号看起来不透明,但这就是 Lisp 的编写方式。你会习惯的。

tl;dr 在标准库中使用 position;它做你想做的事。

关于lisp - 如何在列表中找到原子的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8052756/

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