gpt4 book ai didi

lisp - 在 lisp 中搜索用户输入的数组

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

如何在 Lisp 中搜索用户输入的数组?

一些一般性指导会非常有用!

谢谢!

我应该使用“成员”还是“查找”?

(defun enterl()  
(princ "Enter First Number")
(setq userInput (read-line))
(setf num1 (parse-integer userInput))
(member num1 '(5 9 1 2)))

最佳答案

无论是否存在,您都可以使用其中任何一个。 member 将为您提供整个子列表,其中 first 元素是搜索词,而 find 仅在找到时为您提供搜索词。 find 适用于每个序列,因此它是一个更通用的函数。例如。您可以在字符串中找到字母,因为字符串是字母序列。

;; example data
(defparameter *haystack* '("one" nil "two" "three" "four"))
(defparameter *needle* "two")

;; with find
(find *needle* *haystack* :test #'equal) ; ==> "two"

;; with member
(member *needle* *haystack* :test #'equal) ; ==> ("two" "three" "four")

但是,如果您要搜索空值,则需要使用 member

;; with find you can't find nil since it's the default result when the item is not found
(find nil *haystack* :test #'equal) ; ==> nil
(find "not-there" *haystack* :test #'equal) ; ==> nil

;; with member you see the difference since you get the cons which is a true value
(member nil *haystack* :test #'equal) ; ==> (nil "two" "three" "four")
(member "not-there" *haystack* :test #'equal) ; ==> nil

有时他们不会成为工作的工具。例如。如果您在找到项目的索引之后,您可能需要使用 loopreduce 或滚动您自己的递归。

编辑

read-line 返回包含您输入的所有内容的字符串。因此,您根本不会从中获得数组或元素列表,而是需要一个字符串 split it into values . read 与读取代码的功能相同,因此如果您输入的是有效的 LISP 数据,那么您就可以了。例如。如果您输入 (1 2 3)read,您会得到一个包含 3 个数字的列表。

除了使用 setqsetf,您还可以使用 let 的本地绑定(bind)。例如。

(let ((list (progn (princ "Enter list Eg. (1 2 3): ") (read)))
(item (progn (princ "Enter an item to search: ") (read))))
;; here you have list and item bound
(member item list :test #'equal))

请注意,您可以通过创建一个呈现字符串的函数来抽象出 progn,然后调用 read

关于lisp - 在 lisp 中搜索用户输入的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29451497/

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