标签: common-lisp

为什么#'在Common Lisp中的lambda之前使用?

我想知道为什么我看到的大多数Common Lisp代码都有类似的东西

(mapcar #'(lambda (x) (* x x)) '(1 2 3))

而不仅仅是

(mapcar (lambda (x) (* x x)) '(1 2 3)),

这似乎也有效.我开始学习Common Lisp,并且在Scheme中有一些背景,这引起了我的兴趣.

编辑:我知道您需要带有函数名称的#',因为它们与变量位于不同的命名空间中.我的问题只是在lambda之前的#',因为lambda已经返回一个函数对象(我认为).#' - 由于宏扩展而减少lambdas的工作只会让它变得更有趣......

common-lisp

35
推荐指数
2
解决办法
4212
查看次数

将Common Lisp代码移植到Clojure

将Common Lisp应用程序移植到Clojure有多实用?更具体地说,Common Lisp中存在哪些功能在Clojure中不存在,并且必须重新编写?

lisp clojure common-lisp

34
推荐指数
3
解决办法
7756
查看次数

为什么Clojure的父亲说Scheme的真/假被打破了?

在这段视频中,Rich Hickey为Lisp程序员介绍了Clojure.

在时间01:10:42,他在Clojure/Common Lisp/Scheme/Java中讨论了nil/false/end-of-sequence /'().他说:"计划是真实的,但它们是破碎的."

滑动

我不明白他为什么这么说,为什么他认为它"破碎"了?

null scheme clojure common-lisp

34
推荐指数
2
解决办法
2796
查看次数

Lisp文件扩展名的约定是什么?

".el"是以Emacs Lisp程序结尾的文件名的约定.编写Common Lisp程序时的惯例是什么?

lisp filenames common-lisp pathname

34
推荐指数
2
解决办法
2万
查看次数

Lisp中1和1之间有什么区别?

我从来没有真正想过一个符号是否可以成为Lisp中的数字,所以我今天玩弄了它:

> '1
1
> (+ '1 '1)
2
> (+ '1 1)
2
> (define a '1)
> (+ a 1)
2
Run Code Online (Sandbox Code Playgroud)

上面的代码是scheme,但它在Common Lisp和Clojure中看起来大致相同. 是否有1,并引述1之间有什么区别?

lisp scheme clojure common-lisp quote

33
推荐指数
4
解决办法
3810
查看次数

Common Lisp中"flet"和"label"之间有什么区别?

它是否setqsetf?相似?flet和之间没有什么大的区别labels

祝商祺!

common-lisp

33
推荐指数
1
解决办法
4421
查看次数

检查项目是否在列表中(Lisp)

检查项目是否在列表中的简单方法是什么?

就像是

(in item list)
Run Code Online (Sandbox Code Playgroud)

可能返回true如果item=1list=(5 9 1 2)false,如果item=7

lisp list common-lisp

32
推荐指数
3
解决办法
4万
查看次数

multimethods如何解决命名空间问题?

我正在研究编程语言设计,我感兴趣的是如何用多方法泛型函数范例替换流行的单调度消息传递OO范例.在大多数情况下,它似乎非常简单,但我最近陷入困境,并希望得到一些帮助.

在我看来,消息传递OO是一种解决两个不同问题的解决方案.我在下面的伪代码中详细解释了我的意思.

(1)解决了调度问题:

===在文件animal.code ===

   - Animals can "bark"
   - Dogs "bark" by printing "woof" to the screen.
   - Cats "bark" by printing "meow" to the screen.
Run Code Online (Sandbox Code Playgroud)

===在文件myprogram.code ===

import animal.code
for each animal a in list-of-animals :
   a.bark()
Run Code Online (Sandbox Code Playgroud)

在这个问题中,"树皮"是一种具有多个"分支"的方法,它们根据参数类型的不同而不同.我们对我们感兴趣的每种参数类型(狗和猫)实施一次"树皮".在运行时,我们能够遍历动物列表并动态选择要采用的分支.

(2)它解决了命名空间问题:

===在文件animal.code ===

   - Animals can "bark"
Run Code Online (Sandbox Code Playgroud)

===在文件tree.code ===

   - Trees have "bark"
Run Code Online (Sandbox Code Playgroud)

===在文件myprogram.code ===

import animal.code
import tree.code

a = new-dog()
a.bark() //Make the dog bark

…

t = new-tree()
b = t.bark() //Retrieve the bark from …
Run Code Online (Sandbox Code Playgroud)

lisp language-design clojure common-lisp multimethod

32
推荐指数
2
解决办法
1765
查看次数

Lisp是如何动态编译的?

我不明白Lisp是如何编译和动态的.对于能够操作,修改和生成代码的语言,是否需要进行解释?语言是否可以完全编译并且仍然是动态的?或者我错过了什么?Lisp做的是什么允许它既编译又动态?

lisp common-lisp

32
推荐指数
1
解决办法
8552
查看次数

将Common Lisp编译为可执行文件

我最近开始使用SBCL学习Common Lisp.如何将我的Lisp程序编译成Windows二进制文件?

build sbcl common-lisp

32
推荐指数
4
解决办法
2万
查看次数