Lambda 这个Lisp代码是什么意思?
在Lisp中,人们认为“Lisp是编写不可维护代码的人梦寐以求的语言。”,然后继续提供一些代码示例。在最近的黑客新闻评论中,这些都被认为是可悲的 我的问题是,作为一个在Clojure只有一点点经验的人,他们是什么意思Lambda 这个Lisp代码是什么意思?,lambda,lisp,common-lisp,Lambda,Lisp,Common Lisp,在Lisp中,人们认为“Lisp是编写不可维护代码的人梦寐以求的语言。”,然后继续提供一些代码示例。在最近的黑客新闻评论中,这些都被认为是可悲的 我的问题是,作为一个在Clojure只有一点点经验的人,他们是什么意思 (lambda(*他们的观点是可用标识符的范围更大,但某些字符的语义重载使得编写代码变得很容易,看起来它可能在做一些奇怪的事情 如果你仔细看看第一个样本 (lambda (*<8-]= *<8-[= ) (or *<8-]= *<8-[= )) 在第二种情
(lambda(*他们的观点是可用标识符的范围更大,但某些字符的语义重载使得编写代码变得很容易,看起来它可能在做一些奇怪的事情
如果你仔细看看第一个样本
(lambda (*<8-]= *<8-[= ) (or *<8-]= *<8-[= ))
在第二种情况下,它只是说明了一点,因为像+
,(defun:-](:-]2)
T
CL-USER>(:-]3)
无
将函数定义放在关键字符号上有点不寻常,但这并非闻所未闻,而且可能很有用。例如,请参见。他们的观点是,可用标识符的范围更大,但某些字符的语义重载使得编写代码变得很容易,看起来它可能在做一些奇怪的事情
如果你仔细看看第一个样本
(lambda (*<8-]= *<8-[= ) (or *<8-]= *<8-[= ))
在第二种情况下,它只是说明了一点,因为像+
,(defun:-](:-]2)
T
CL-USER>(:-]3)
无
将函数定义放在关键字符号上有点不寻常,但这并非闻所未闻,而且可能很有用。例如,请参阅。,这让我想起了我们今天在IM工作中的一次对话,我的一位同事评论说:
Scheme标准的最新版本也支持Unicode,事实上,以下代码在Racket和Guile中工作(可能还有大多数其他Scheme实现):
当使用SBCL进行测试时,这个常见的Lisp版本可以工作:
(defun ❨╯°□°❩╯︵┻━┻ ()
(format t "Calm down, bro~%"))
这让我想起了我们今天在工作IM上的一次对话,我的一位同事评论道:
Scheme标准的最新版本也支持Unicode,事实上,以下代码在Racket和Guile中工作(可能还有大多数其他Scheme实现):
当使用SBCL进行测试时,这个常见的Lisp版本可以工作:
(defun ❨╯°□°❩╯︵┻━┻ ()
(format t "Calm down, bro~%"))
Lisp和Common Lisp的一个特点是它没有运算符和复杂的运算符语法。标识符都是符号
符号由少量字符或空格分隔。例如,右括号结束其前面的任何符号
所以
及
读起来是一样的
否则,其他字符,如*、=、-、_、&、%,…是符号的有效字符,即使没有转义
CL-USER > '(*foo =foo -foo _foo &foo %foo)
(*FOO =FOO -FOO _FOO &FOO %FOO)
在实践中,你会看到像上面这样的符号,但不是问题中提到的符号
当读取表被更改或数字输入被更改时,它会受到很大的干扰
CL-USER 51 > (setf *read-base* 36)
36
CL-USER 52 > '(dear dad)
(625059 17221)
CL-USER 53 > (+ dear dad)
642280
甚至
CL-USER 54 > (|SETF| |*PRINT-BASE*| 10)
10
CL-USER 55 > (+ dear dad)
DRL4
还请注意,并非每个Lisp实现都允许使用关键字作为名称的函数:
CL-USER 1 > (defun :foo (a) (* a a))
Error: Defining function :FOO visible from package KEYWORD.
1 (continue) Define it anyway.
2 (abort) Return to level 0.
3 Return to top loop level 0.
Type :b for backtrace or :c <option number> to proceed.
Type :bug-form "<subject>" for a bug report template or :? for other options.
CL-USER 2 : 1 >
CL-USER 1>(定义:foo(a)(*a))
错误:定义函数:FOO从包关键字可见。
1(继续)无论如何定义它。
2(中止)返回到级别0。
3返回顶部循环级别0。
键入:b表示回溯,或键入:c表示继续。
键入错误报告模板的错误表单“”,或键入其他选项的错误表单“”。
CL-USER 2:1>
Lisp和通用Lisp的一个特点是它没有运算符和复杂的运算符语法。标识符都是符号
符号由少量字符或空格分隔。例如,右括号结束其前面的任何符号
所以
及
读起来是一样的
否则,其他字符,如*、=、-、_、&、%,…是符号的有效字符,即使没有转义
CL-USER > '(*foo =foo -foo _foo &foo %foo)
(*FOO =FOO -FOO _FOO &FOO %FOO)
在实践中,你会看到像上面这样的符号,但不是问题中提到的符号
当读取表被更改或数字输入被更改时,它会受到很大的干扰
CL-USER 51 > (setf *read-base* 36)
36
CL-USER 52 > '(dear dad)
(625059 17221)
CL-USER 53 > (+ dear dad)
642280
甚至
CL-USER 54 > (|SETF| |*PRINT-BASE*| 10)
10
CL-USER 55 > (+ dear dad)
DRL4
还请注意,并非每个Lisp实现都允许使用关键字作为名称的函数:
CL-USER 1 > (defun :foo (a) (* a a))
Error: Defining function :FOO visible from package KEYWORD.
1 (continue) Define it anyway.
2 (abort) Return to level 0.
3 Return to top loop level 0.
Type :b for backtrace or :c <option number> to proceed.
Type :bug-form "<subject>" for a bug report template or :? for other options.
CL-USER 2 : 1 >
CL-USER 1>(定义:foo(a)(*a))
错误:定义函数:FOO从包关键字可见。
1(继续)无论如何定义它。
2(中止)返回到级别0。
3返回顶部循环级别0。
键入:b表示回溯,或键入:c表示继续。
键入错误报告模板的错误表单“”,或键入其他选项的错误表单“”。
CL-USER 2:1>
lambda正在定义一个函数,该函数采用两个参数并返回应用于这两个参数的或
函数。您已正确地将第二部分中定义的函数标识为采用单个参数并与2
2进行相等比较的函数。(defun:-](令人尴尬的是,我没有安装,因为我当时没有安装Common Lisp。现在我已经安装了它,并且正在相应地在REPL中玩。)lambda正在定义一个函数,该函数采用两个参数并返回应用于这两个参数的或函数。您已正确地将第二部分中定义的函数标识为采用单个参数并与2
2进行相等比较的函数。(defun:-](令人尴尬的是,我没有安装,因为我当时没有安装Common Lisp。现在我已经安装了它,并且正在相应地在REPL中玩。)一些关于关键字命名函数的讨论:@LarsBrinkhoff Good find!我在回答中添加了一个链接。一些关于关键字命名函数的讨论:@LarsBrinkhoff Good find!我在回答中添加了一个链接。
CL-USER 54 > (|SETF| |*PRINT-BASE*| 10)
10
CL-USER 55 > (+ dear dad)
DRL4
CL-USER 1 > (defun :foo (a) (* a a))
Error: Defining function :FOO visible from package KEYWORD.
1 (continue) Define it anyway.
2 (abort) Return to level 0.
3 Return to top loop level 0.
Type :b for backtrace or :c <option number> to proceed.
Type :bug-form "<subject>" for a bug report template or :? for other options.
CL-USER 2 : 1 >