我刚刚开始学习Lisp,我无法弄清楚如何编译和链接lisp代码到可执行文件.
我正在使用clisp并clisp -c生成两个文件:
接下来我要做什么来获取可执行文件?
我发现了一个类似的问题.
但我不太明白这个解释.
所以我试图使用以下示例运行clisp:
[1]> (defvar a 5)
A
[2]> (+ a 1)
6
[3]> (defparameter b 5)
B
[4]> (+ b 1)
6
[5]> (setf c 5)
5
[6]> (+ c 1)
6
[7]> (setq d 5)
5
[8]> (+ d 1)
6
[9]> (let ((a 500)) (+ a 1))
501
[10]> (let ((b 500)) (+ b 1))
501
[11]> (let ((c 500)) (+ c 1))
501
[12]> (let ((d 500)) (+ d 1))
501
[13]>
Run Code Online (Sandbox Code Playgroud)
我发现的完全一样.
我无法弄清楚它们有什么不同?
我想做一些模拟,ACT-R我需要一个Common Lisp实现.我有三种Common Lisp可用的实现:(1) CLISP [1],(2) ECL [1]和(3) SBCL [1].正如您可能从链接中收集的那样,我已经在维基百科上阅读了所有这三个链接.但我想要一些有经验的用户的意见.更具体地说,我想知道:
(i) 这三种实现之间的主要区别是什么(例如:它们最擅长的是什么?它们中的任何一种仅用于特定目的,因此可能不适用于特定任务吗?)?
(ii)基于我将使用的事实ACT-R还是基于一般原因,是否有明显的选择?
由于这可以解释为一个主观问题我检查了我在这里可以问什么主题以及我应该避免询问哪些类型的问题?如果我读得正确,它不应该被视为禁果.
我目前正在阅读Paul Graham的ANSI Common Lisp,我有一个关于编写lambda表达式的问题.
我们需要在lambda表达式前加上#'?如果我在REPL中写这样的东西,它会正常工作
> ((lambda (x) (+ x 1)) 1)
2
Run Code Online (Sandbox Code Playgroud)
这样也会
> (mapcar (lambda (x) (+ x x)) '(1 2 3 4))
(2 4 6 8)
Run Code Online (Sandbox Code Playgroud)
我明白这#'表示一个功能.所以我的问题是,它是某种惯例还是推荐的做法?如果我不为lambdas添加前缀#',可能出现任何问题,是否依赖于实现?
当我这样做时(/ 7 2),我该怎么办才能得到结果3呢?如果我这样做(/ 7 2.0),我得到了3.5,这是预期的.
我有一些不理解来自gnu clisp的动作假设,我有一些代码 (let ((x "Hi!"))(print x)).如果我从控制台执行它(比如,clisp fileName.lisp),我明白了
嗨!
但是,当我从解释器执行它时,我会看到这个文本两次.为什么?
请帮帮我.
我是初学程序员,正在浏览"Land of Lisp"这本书.
我一直在用REPL输入书中的例子.是否可以将我当前的程序保存为.lisp文件,以便我可以加载它并在以后继续处理它?我知道我可以在文本编辑器中创建.lisp文件并加载它们,但我很乐意在全屏模式下使用REPL来做示例.
如何配置apache + mod_lisp + clisp并设置"Hello World!"?我找不到关于这个主题的任何完整的指南.谢谢.
编辑:Vebjorn的解决方案有效,但后来我不知道如何编写"你好世界!".谁能告诉我怎么办?有一些东西,比如刷新clisp,然后用SLIME连接到它,但是当我启动mod_lisp的演示时,测试页面没有提供,我的粘液不会返回?
再次感谢.
很长的故事:
我正在为我的功能编程课做一个项目,我想在Lisp中编写一个AI控制器,用于Mario AI竞赛.
我正在研究从Java调用Lisp代码的框架/库/方法,甚至更好的Lisp-Java互通.
我看过Jacol,但它已经老了,而且对我来说编译不好.
到目前为止,我最好的选择是:Jatha.它真的很整洁,虽然一些lisp构造尚未实现,但可以轻松定义自己的构造.例如,mapcar和cond未实现.我已经实现了自己的mapcar,在Lisp中命名为mapp,如下所示:
(defun map* (f l r)
(if (null l)
r
(map* f (rest l) (cons (funcall f (first l)) r))))
(defun mapp (f l)
(reverse (map* f l nil)))
Run Code Online (Sandbox Code Playgroud)
现在我有一个使用它的简单函数,例如,一个函数,它计算非线性列表中有多少个原子
(defun myfunc (l)
(if (atom l)
'1
(apply '+ (mapp 'myfunc l))))
(myfunc '(6 2))
Run Code Online (Sandbox Code Playgroud)
这一切在clisp中运行正常 现在从Java调用Lisp代码我使用了Jatha.所有人要做的就是在java项目中导入Jatha库并加载一个像这样的lisp文件(ex):
import org.jatha.*;
import org.jatha.dynatype.*;
public class Main {
public static …Run Code Online (Sandbox Code Playgroud) 我已经阅读了很多关于Land of Lisp的好东西,所以我想我可以通过它来看看有什么可看的.
(defun tweak-text (lst caps lit)
(when lst
(let ((item (car lst))
(rest (cdr lst)))
(cond
; If item = space, then call recursively starting with ret
; Then, prepend the space on to the result.
((eq item #\space) (cons item (tweak-text rest caps lit)))
; if the item is an exclamation point. Make sure that the
; next non-space is capitalized.
((member item '(#\! #\? #\.)) (cons item (tweak-text rest t …Run Code Online (Sandbox Code Playgroud)