另外,即使我可以使用Common Lisp,我应该吗?方案更好吗?
我在Common Lisp中完成了大部分的开发工作,但是有些时候我想切换到Scheme(在Small Pieces中读取Lisp,当我想要使用continuation时,或者当我想在Gauche中执行一些脚本编写时,例).在这种情况下,我不舒服的主要原因是我没有史莱姆(是的,你可以称我为瘾君子).
Scheme最接近史莱姆的是什么?具体来说,我最感兴趣的是:
let中定义的函数).(map |)(光标位置由|)表示),我想(map predicate . lists)在迷你缓冲区中看到我已经通过降低重要性来命令这些功能.
我的Scheme实现选择是:
如果它至少与它们一起工作会很棒.
是否有.Net的Common Lisp实现?
我想学习lisp语言,因为我的编辑器是emacs,我更喜欢emacs lisp.
任何人都可以给我一些建议来学习lisp,emacs lisp或常见的lisp吗?
这两者之间的主要区别是什么?
我发现了一个类似的问题.
但我不太明白这个解释.
所以我试图使用以下示例运行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)
我发现的完全一样.
我无法弄清楚它们有什么不同?
基本上,我想做以下事情,只使用Common Lisp而不是Python:
print("Hello world.\r\n")
Run Code Online (Sandbox Code Playgroud)
我可以这样做,但它只输出#\newline字符并跳过#\return:
(format t "Hello world.~%")
Run Code Online (Sandbox Code Playgroud)
我相信我可以使用外部参数完成此操作,如下所示:
(format t "Hello world.~C~%" #\return)
Run Code Online (Sandbox Code Playgroud)
但对我来说似乎很尴尬.当然,我可以以某种方式嵌入#\return到格式字符串中,就像我可以一样#\newline?
我正在阅读Peter Seibel撰写的"Practical Common Lisp"一书.
在第6章"变量"部分"词汇变量和闭包"和"动态,又称特殊,变量". http://www.gigamonkeys.com/book/variables.html
我的问题是两个部分中的示例都显示了(让...)如何影响全局变量,并没有真正说明动态和词汇变量之间的区别.
我理解闭包是如何工作的,但我真的不知道在这个例子中让我们如此特别:
(defvar *x* 10)
(defun foo ()
(format t "Before assignment~18tX: ~d~%" *x*)
(setf *x* (+ 1 *x*))
(format t "After assignment~18tX: ~d~%" *x*))
(defun bar ()
(foo)
(let ((*x* 20)) (foo))
(foo))
CL-USER> (foo)
Before assignment X: 10
After assignment X: 11
NIL
CL-USER> (bar)
Before assignment X: 11
After assignment X: 12
Before assignment X: 20
After assignment X: 21
Before assignment X: 12
After assignment X: 13
NIL
Run Code Online (Sandbox Code Playgroud)
我觉得这里没什么特别的.外FOO …
什么是代码作为数据?我听说它比"code-as-ascii-characters"要好,但为什么呢?我个人认为代码作为数据的哲学实际上有点令人困惑.
我已经涉足了Scheme,但我从来没有真正得到整个代码作为数据的东西,并想知道它究竟是什么意思?
我是字节编译模块.它给了我这个警告:
Warning: cl package required at runtime
Run Code Online (Sandbox Code Playgroud)
为什么这是一个警告?我很清楚我正在使用这个cl包.事实上(require 'cl),模块中有一个声明.
使用这些cl东西有什么问题吗?
如果是,是否有已发布的变通方法列表?我使用的主要内容是mapcan和delete-duplicates.
是否有任何良好的跨平台(至少是SBCL和CLISP)易于安装的GUI库?