gpt4 book ai didi

lisp - 在 Lisp 中,如何获取表达式的值?

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

这将打印data,但我希望它打印show。我想打印值,而不是表达式,我该怎么做?

(defun display (x)
(list x))

(setq temp 'data)
(set temp 'show)
(display 'data)

如果你不知道变量是否绑定(bind)怎么办?我必须编写一个带有键和值的函数,如果键不存在,那么我必须执行 setq 键值,如果键已经存在,那么我会将值添加到键中。在这种情况下,如果我这样做(存储数据键值),如果值没有被限制,我会得到一个未绑定(bind)的错误,我将如何处理这种情况?

例如,如果没有 mydata 而我做 (storedata value mydata) 那么 mydata 将变成 (value),现在如果我做 (storedata value2 mydata) 那么 mydata 变成 (value value2)。

最佳答案

在 Lisp 中用 ' 引用列表或符号完全等同于使用特殊形式 (quote ...)。它专门用于使引用的内容 得到评估。 Lisp 代码中的或输入到 REPL 中的 'data(quote data) 相同,计算结果为符号 data

不带引号的

data 的计算结果为当前范围内的变量 data 的值。所以,在 REPL 中:

[1]> (setq data 14)
14
[2]> data
14

第一个表达式的计算结果也为 14,因为 setq 返回绑定(bind)变量的值(在这方面就像赋值运算符 =在 C 中)。

您在上面的代码中所做的是将名为 temp 的变量设置为包含符号 data,然后使用 set (没有 setq),将名为 data 的变量设置为符号 show。这有点类似于在 Perl 中使用软引用(例如),但我不认为它作为一种 Lisp 技术被广泛使用或推荐。

顺便说一下,您的 display 过程可能也没有按照您的想法进行:它返回一个包含您传递给它的任何元素的列表。当您将值键入 REPL 时打印该值的事实只是因为 any 表达式的值在 REPL 中打印。要在程序中显示一个值,您可以使用 printformat . (我假设您使用的是 Common Lisp,因为它显然不是 Scheme,但也许是其他 Lisp 变体,在这种情况下,该链接将无济于事。)

关于lisp - 在 Lisp 中,如何获取表达式的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8392678/

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