剪辑:变量没有值

YJS*_*YJS 0 lisp common-lisp

我想让用户程序提取列表中具有成对的a元素b(由参数给定)的元素。

像,如果我给c作为参数和list ((c a) (c b) (d f) (d g)),结果应该是'a' 'b';

所以我定义一个函数如下

(defun myr (b a) (if (= CAAR(a) b) CDAR(a) 'nope myr(b CDR(a))));
Run Code Online (Sandbox Code Playgroud)

像这样打电话

myr(b ((b a) (b c) (a d) (a f)))
Run Code Online (Sandbox Code Playgroud)

但是结果就像 variable myr has no value

这是我第一次在Lisp中,所以只要告诉我应该搜索哪个关键字将对我有很大帮助。

感谢您的阅读。

sds*_*sds 6

确实需要从一本不错的书开始,例如PCLACL。您将节省很多时间。

Lisp语言的语法是C.在C不同,你调用一个函数f带有参数?y这样的:f(x,y)。在Lisp中,您可以这样操作:(f x y)

调用函数时myr(...),将符号myr放在变量位置而不是函数位置,这会导致报告错误。

您还需要quote适当使用。