lisp - 关于在列表 LISP 中查找给定数字的相同数字的问题
问题描述
所以我试图接受两个参数,一个列表和一个数字,当且仅当数字等于列表中的任何元素时才返回 true
(defun find-num(a z)
(if (= z (car a)) (write t))
(if (not(= z (car a))) (find-num (cdr a)) )
(if (not(= z (car a))) (write f) )
)
(find-num '(1 2 3 4 5) 5)
所以我假设如果 z 等于 a ,则代码将执行这些步骤,返回 true,如果 z 不等于 a ,写入 f(返回 false)或跳转到递归函数,该函数在其余列表中找到数字,直到它找到相同的数字
但是,我收到了这样的错误
VAL/APPLY: Too few arguments (1 instead of at least 2) given to
FIND-NUM
我不确定哪个部分搞砸了
我尝试使用 cond 语句,但也收到了同样的错误
(defun find-num(a z)
(cond
( (= z (car a)) (write t) )
( (not(= z (car a))) (find-num (cdr a)) )
( (not(= z (car a))) (write f) )
)
)
(find-num '(1 2 3 4 5) 5)
解决方案
错误信息很清楚,不是吗?
给 FIND-NUM 的参数太少(1 个而不是至少 2 个)
您FIND-NUM
使用一个参数调用该函数,但该函数需要两个。您的函数具有参数a
和z
。那是两个。但是你的递归调用是(find-num (cdr a))
. 这只是一个论点: 的价值(cdr a)
。
另一个问题:f
不是Lisp中false的值。f
是一个未定义的变量。评估(not t)
一下Lisp 中的false值到底是什么。
CL-USER > (not t)
结果可能是什么?
然后接下来您需要检查您的函数是否返回正确的结果。
推荐阅读
- node.js - 为什么(以及如何解决)在使用 moment.js 并将类型作为字符串时,它会“冻结”日期?
- apache-spark - 通过 DataFrames 从配置单元视图与配置单元表读取时的性能考虑
- ruby-on-rails - 在 Ruby on Rails 视图助手中使用 define_method
- google-sheets - Google 表格中的 NORMDIST 给了我一个指数分布
- logging - 尝试将通用 CEF 日志转发到 Azure Sentinel
- php - 检查 Zip 文件是否使用 PHP 加密或密码保护
- python - 如何更好地理解“最长有效括号”问题的解决方案?
- javascript - Woocommerce 重定向到已添加产品的购物车
- f# - 如何将需要操作的初始化代码转换为 F#
- powershell - powershell Receive-Job 查找状态是否失败