一些主要区别: ELisp 传统上使用动态作用域规则; Common Lisp 使用词法作用域规则。通过动态作用域,函数可以访问调用函数中声明的局部变量,并且通常已不再受欢迎。从 Emacs 24 开始,Emacs 允许在逐个文件的基础上进行可选的词法作用域(并且核心发行版中的所有文件都将逐步转换)。 动态范围的 ELisp 没有闭包,这使得...
Common Lisp变量的一些事情 Lisp-1 vs Lisp-2[1] Scheme的求值模型非常简单:只是用一个名字空间,所有表达式中相应位置的值应该是明确的。 Common Lisp和Scheme最大的不同是,函数名字空间和数据的名字空间是分离的。操作函数名字空间的语句包括,defun,flet,labels,defmethod和defgeneric等方法。要用函数名作为另一个...
Lisp vs RISC or What Common Lisp Implementors Really WantMacLachlan, Robert A
因此我们说 Common Lisp 拥有独立的函数和变量名字空间 (name-space)。我们可以同时有一个叫 foo 的变量以及一个叫 foo 的函数,而且它们不必相同。这种情形可能会让人不解,并且可能在一定程度上影响代码的可读性,但这是 Common Lisp 程序员必须面对的问题。 Common Lisp 还提供了两个函数用于将符号映射到它所代表...
这个警告,是因为在setq中,foo是一个未定义的符号,因此会出现这个警告。在Common Lisp中,我们应该使用...
这似乎也可以。我开始学习Common Lisp,并且在Scheme中有一定背景,这引起了我的兴趣。 编辑:我知道您需要带函数名的#',因为它们与变量位于不同的命名空间中。我的问题是关于lambda的#',因为lambda已经返回了一个函数对象(我认为)。少#'的lambda由于宏扩展而起作用的事实使其变得更加有趣... ...
Common Lisp的写法如下: (defun foo (n) (lambda (i) (incf n i))) Ruby的写法几乎完全相同: def foo (n) lambda {|i| n += i } end Perl 5的写法则是: sub foo { my ($n) = @_; sub {$n += shift} } 这比Lisp和Ruby的版本,有更多的语法元素,因为在Perl语言中,你不得不手工提取参...
但是Lisp没有原神。要做出原神,我们需要写很多的框架,很多的库,很多的语言feature。比如我要写一个...
在Common Lisp 里,我们可以同时拥有名为 double 的函数和变量。 "拥有分开的变量和函数命名空间的 Lisp 称为 Lisp–2,在另一类 Lisp–1 下,变量和函数定义在同一命名空间里,最著名的这种 Lisp 方言是 Scheme。关于 Lisp–1 vs. Lisp–2 在网上有很多讨论,一般观点认为 Lisp–1 对于编译器来说更难实现。"...
它们有一些相似之处,但Common Lisp中的主要区别似乎是,您不必为每个函数、参数等定义类型,而在Haskell中,您可以这样做。我的问题是,在不同的应用程序或用途中,像Haskell这样的语言可能比Common Lisp这样更动态的语言更有意义。例如,Lisp似乎可以用于更底层的编程,例 浏览1提问于2009-01-28得票数 9 回答已采纳...