gpt4 book ai didi

lisp - Lisp中@(at-sign)的含义?

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

你们都知道这个故事:程序员阅读其他人的代码,看到他们不理解的符号,谷歌让他们失败,因为很难搜索非字母数字符号。

这次是 @ 符号,似乎 用于将一个列表的内容注入(inject)到另一个列表的中间。例如:

`(5 6 7 ,@'(8 9) 10 11)
;=> (5 6 7 8 9 10 11)

我对这种用法很满意,但我想知道我是否正确理解了 @ 的行为?它还有其他用途吗?是什么导致了以下抄本(来自 CLISP)的错误?

[1]> (list 1 2 3 4 @'(5 6 7))

*** - SYSTEM::READ-EVAL-PRINT: variable @ has no value

最后,到底是什么 @?它似乎不是一个函数:

[3]> (print #'@)

*** - FUNCTION: undefined function @

我猜这是一种基本语法,例如反引号 (`) 或逗号 (,)。它是否正确?很抱歉,如果这是重复的,但再一次,据我所知,搜索 @ 是不可能的。

最佳答案

“,@”用于在反引号内拼接...

它在反引号部分的 HyperSpec 中有描述:

2.4.6 Backquote

If a comma is immediately followed by an at-sign, then the form following the at-sign is evaluated to produce a list of objects. These objects are then “spliced” into place in the template. For example, if x has the value (a b c), then

 `(x ,x ,@x foo ,(cadr x) bar ,(cdr x) baz ,@(cdr x))
=> (x (a b c) a b c foo b bar (b c) baz b c)

值得注意的是,,@ 并非总是必需的;根据相同的文档:

Anywhere “,@” may be used, the syntax “,.” may be used instead to indicate that it is permissible to operate destructively on the list structure produced by the form following the “,.” (in effect, to use nconc instead of append).

…但是“@”本身只是另一个字母…

you ask 时,您的直觉大多是正确的,“所以基本上 @ 本身没有任何意义,唯一真正的运算符是,@?” @ 可以像普通字母一样用在其他地方。这就是为什么你得到你提到的错误: (list 1 2 3 4 @'(5 6 7)) 只是

(list 1 2 3 4 @ '(5 6 7))

@是一个变量,但它在这里没有值。将其与:

(let ((@ 4.5))
(list 1 2 3 4 @ '(5 6 7)))
;=> (1 2 3 4 4.5 (5 6 7))

…不幸的是,这可能很难搜索。

Sorry if this is a duplicate, but once again, as far as I know it's impossible to search for "@".

搜索有关某些非字母数字字符的文档可能很困难,但我发现了一些可以提供帮助的技巧。例如,如果你去 lispdoc.com,你可以搜索 comma, and the results there会让你走向反引号。 (虽然搜索 at-sign 没有帮助。)这不是一个完美的解决方案,但它有时会有所帮助。

关于lisp - Lisp中@(at-sign)的含义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21463925/

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