functional-programming - LISP 全局列表变量

标签 functional-programming lisp common-lisp

我是 LISP 的新手,这是我对它的全局变量的疑问。

我想做的是创建一个可以在结构中存储键值对的“列表”。这是我的示例代码:

(setq *x* '())

(acons 'apple 'fruit *x*)

*x*

(first *x*)

我希望我的输出看起来像,在我添加 (apple.fruit) 对之后,x 应该是 ((apple.fruit)),但这是我得到的(在加载上述代码时):

CL-USER> 
NIL
((APPLE . FRUIT))
NIL  <--- this is still nil?
NIL

谁能帮我解决这个问题,因为我不确定为什么我不能给变量 x 添加值。

此外,我还有一个关于列表的问题:
有没有办法通过一个键来查找列表中的元素?
例如,对于上面的列表,我如何使用关键字apple找到它对应的值fruit

谢谢

最佳答案

函数acons没有副作用,即它不会修改 *x*

您必须setq 得到acons 的结果才能插入*x*:

(setq *x* (acons 'apple 'fruit *x*))

关于functional-programming - LISP 全局列表变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13004534/

相关文章:

lisp - 步骤 Eval Common Lisp

Lisp - 消除语法中不可访问和非生产性元素的中间结果

Common Lisp 中的指针

python - 了解 Python 字典上的 max 函数操作

javascript - 如何使用 underscore.js 作为模板引擎?

r - 为什么 Map 只需要一组向量作为参数,而 mapply 需要这两个参数和 MoreArgs 参数?

lisp - 普通 lisp 中的强制函数——数组和列表

c# - F# 中的字典推导式(?)(从 C# 转换)

lisp - 结果 Lisp 中没有 nil 的列表

recursion - Lisp递归混淆