我的一位朋友提请我注意第四届欧洲Lisp研讨会的欢迎辞: … Lisp方言的实现和应用,包括Common Lisp,Scheme,Emacs Lisp,AutoLisp,ISLISP,Dylan,Clojure,ACL2, ECMAScript ,… 然后问ECMAScript是否真是Lisp的一种方言。 这真的可以考虑吗? 为什么? 是否有一套明确而清晰的标准来帮助我们检测一种语言是否是Lisp的一种方言? 或者是一个非常松散的方言(在这种情况下,我们可以添加Python,Perl,Haskell等到Lisp方言列表?)
我听过很多关于函数式编程语言的知识,而且我也很愿意学习。 我想这将主要是为了好玩,但是,我希望这会提高我的编程技能。 我主要是C#/ .net背景,所以我的第一select是学习F#(因为.NET和熟悉Visual Studio)。 另一方面,我想知道F#是否具有像Lispmacros或Haskell高阶函数的function。 你能比较F#,Haskell和Lisp吗? 哪一个将是你select的语言?
我看到Practical Common Lisp使用(defvar * db * nil)来设置全局variables。 使用setq出于同样的目的不行吗? 使用defvar vs setq有什么优点/缺点?
有.Net的Common Lisp实现吗?
我在Common Lisp中完成了大部分开发工作,但是有一些时候我想切换到Scheme( 在小块文件中读Lisp的时候,当我想继续玩,或者当我想在Gauche做一些脚本的时候,例)。 在这种情况下,我不舒服的主要原因是我没有粘液(是的,你可能称我为瘾君子)。 什么是计划最亲密的对手粘液? 具体来说,我最感兴趣的是: Emacs集成(这点很明显;)) 体面标签完成(理想情况下,cwcc TAB应扩展为与电stream继续调用)。 它甚至可能是基于符号表的(也就是说,它不一定要注意我一次定义的函数)。 函数参数提示在minibuffer中(如果我已经键入(map |) (光标位置用|表示)),我想看看(map predicate . lists)在小缓冲区 发送表单给解释器 与debugging器集成。 我已经下令重要性的function。 我的计划实施的select是: 的MzScheme 的Ikarus 左岸 中的bigloo 鸡 如果至less和他们一起工作,那将是非常好的。
为什么Lispers将它们的代码格式化,如示例1所示,而不是示例2中所示? 对我来说(对于来自不同编程背景的大多数其他人来说,除了Lisp之外),示例2中显示的格式将更易于阅读。 Lispers喜欢样本1风格有什么特别的原因吗? 样品1 (defun factorial (n) (if (<= n 1) 1 (* n (factorial (- n 1))))) 样品2 (defun factorial (n) (if (<= n 1) 1 (* n (factorial (- n 1))) ) )
我一直和The Little Schemer一起学习Scheme,并使用PLT-Scheme来处理我的环境。 小Schemer帮助我很大程度上recursion(现在对我来说很简单),但是我被卡在介绍“collections家”的书的一部分,并且把整个函数作为一个整体继续。 这里是他们使用的示例代码。 我理解recursion元素,但我卡住了,特别是在lambda函数 – 我的头脑不能遵循path,如何设置该lambda函数的参数(因为他们唯一的调用是再次调用它们recursion,有在function体内没有具体的使用)。 如果有人能够或多或less地通过将函数recursion到lambda收集器中来计算我的计算path,那可能对我有帮助。 ;; Build a nested list of even numbers by removing the odd ones from its ;; argument and simultaneously multiply the even numbers and sum the odd ;; numbers that occur in its argument. (define (even-only-collector l col) (cond ((null? l) (col (quote ()) 1 0)) […]
我已经读了很多,LISP可以重新定义语法,大概是用macros。 我很好奇这实际上走了多远? 你能否重新定义语言结构,使其成为另一种语言的编译器? 例如,你能否将LISP的function性改变成面向对象的语法和语义,也许是说语法更接近Ruby这样的语法? 特别是,有可能使用macros摆脱括号的地狱? 我已经学会了足够多的(Emacs-)LISP来自定义Emacs的微特性,但是我非常好奇macros可以在定制语言的时候走多远。
这就是Rich Hickey在其中一篇博文中所说的,但我不明白使用apply的动机。 请帮忙。 Clojure和CL最大的区别在于Clojure是一个Lisp-1,所以funcall是不需要的,apply只用于将一个函数应用到运行时定义的参数集合中。 所以,(应用f [i])可以写成(fi)。 另外,他的意思是“Clojure是Lisp-1”,funcall是不需要的? 我从来没有编程在CL。 谢谢
我习惯了从Haskell的懒惰评估,并发现自己现在已经使用懒惰评估正确地使用默认的急切语言激怒。 这实际上是非常有害的,因为我使用的其他语言主要是懒散地评估一些非常尴尬的东西,通常涉及到自定义迭代器等等。 所以,仅仅通过获取一些知识,我实际上使自己的原有语言的生产力下降 。 叹。 但是我听说ASTmacros提供了另一种干净的方式来做同样的事情。 我经常听到类似“懒惰的评估使得macros冗余”的说法,反之亦然,主要来自Lisp和Haskell社区的争吵。 我已经涉足了各种Lisp变体的macros。 他们看起来像是一个真正有组织的方式来复制和粘贴大量的代码,以便在编译时处理。 他们当然不是Lispers喜欢认为的圣杯。 但是,这几乎可以肯定是因为我不能正确使用它们。 当然,让macros观系统工作在相同的核心数据结构上,这种语言本身就是非常有用的,但它基本上仍然是复制和粘贴代码的有组织的方式。 我承认,将macros系统放在与允许完整运行时变更的语言相同的AST上是非常有用的。 我想知道的是,macros是如何简明扼要地做懒惰评估呢? 如果我想一行一行地处理一个文件,而不是浑浊起来,我只是返回一个列表,其中有一个线路阅读程序映射到它。 这是DWIM的完美例子(按照我的意思)。 我甚至不必考虑这个问题。 我显然不会得到macros。 我已经使用了它们,并没有特别留下深刻印象的炒作。 所以有些东西我错过了,我没有通过在线阅读文档。 有人可以向我解释这一切吗?