Lambda 这个Lisp代码是什么意思?

Lambda 这个Lisp代码是什么意思?,lambda,lisp,common-lisp,Lambda,Lisp,Common Lisp,在Lisp中,人们认为“Lisp是编写不可维护代码的人梦寐以求的语言。”,然后继续提供一些代码示例。在最近的黑客新闻评论中,这些都被认为是可悲的 我的问题是,作为一个在Clojure只有一点点经验的人,他们是什么意思 (lambda(*他们的观点是可用标识符的范围更大,但某些字符的语义重载使得编写代码变得很容易,看起来它可能在做一些奇怪的事情 如果你仔细看看第一个样本 (lambda (*<8-]= *<8-[= ) (or *<8-]= *<8-[= )) 在第二种情

在Lisp中,人们认为“Lisp是编写不可维护代码的人梦寐以求的语言。”,然后继续提供一些代码示例。在最近的黑客新闻评论中,这些都被认为是可悲的

我的问题是,作为一个在Clojure只有一点点经验的人,他们是什么意思


  • (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 >