可能重复:
现实世界中的Lisp
Google上的搜索查询显示,搜索字词"practical lisp"会返回Practical Common LISP的链接,这是一本非常好的入门书.但是,当我开始搜索这些术语时,这不是我想要或想到的.
我正在阅读Practical Common Lisp.这本书很棒,语言很有趣,但我并不喜欢学习Emacs.我已经学会了Vim,这对于一个大脑来说已经是足够的文本模式编辑器了.我不想学习另一个.双控制命令伤害了我的头脑.在Windows上编写Lisp的最佳非Emacs解决方案是什么?
我想知道是否有某种方法可以从Common Lisp调用C++代码(最好是可移植的,如果没有,最好是在SBCL中,如果没有,那么,然后是Clozure,CLisp或ECL).
C++将在内部循环中调用以进行数值计算,因此如果调用速度很快就会很好.
CFFI似乎不支持这个:
"这个概念可以推广到其他语言;在撰写本文时,只有CFFI的C支持相当完整,但正在开发C++支持."
(手册第4章)
SBCL的手册也没有提到C++; 它实际上说
本章描述了SBCL与C程序和库的接口(并且,因为C接口是Unix世界的一种 通用语言,一般来说是其他程序和库.)
C++代码使用OO和运算符重载,所以它确实需要用g ++编译.
据我所知,我可以拥有一个C++ main()函数并为C函数编写包装器,但不是相反 - 这是真的吗?
无论如何......有没有办法做到这一点?
谢谢!
在Common Lisp中为值和函数设置单独的命名空间的设计决策背后的基本原理是什么?支持和反对的论据是什么?
我正在通过格雷厄姆的书"On Lisp"工作,并且无法理解第37页的以下示例:
If we de?ne exclaim so that its return value incorporates a quoted list, (defun exclaim (expression) (append expression ’(oh my))) > (exclaim ’(lions and tigers and bears)) (LIONS AND TIGERS AND BEARS OH MY) > (nconc * ’(goodness)) (LIONS AND TIGERS AND BEARS OH MY GOODNESS) could alter the list within the function: > (exclaim ’(fixnums and bignums and floats)) (FIXNUMS AND BIGNUMS AND FLOATS OH MY GOODNESS) To make exclaim proof against such problems, it should be written: (defun exclaim …
采取这个功能:
(defun sum-greater (x y z)
(> (+ x y) z))
Run Code Online (Sandbox Code Playgroud)
我的理解是,在LISP中,列表中的第一个元素始终表示要在后续原子/列表上执行的函数.那么为什么LISP不将xin (x y z)作为一个函数来对待y和执行z.显然,这不是理想的行为,但这将是预期的行为.
据推测,defun以某种方式定义的函数会覆盖列表的标准LISP评估?如果是这样,你能详细说明吗?
谢谢
我在互联网上寻找一个很好的Qt + Lisp实现,但找不到任何.大多数项目都被关闭了.
有人知道一个很好的Common Lisp + Qt集成吗?
提前致谢.
任何人都可以在Paul Graham的ANSI Common Lisp第110页中解释一个例子吗?
该示例尝试解释use&rest和lambda来创建函数式编程工具.其中之一是构成函数参数的函数.我找不到任何解释它是如何工作的东西.代码如下:
(defun compose (&rest fns)
(destructuring-bind (fn1 . rest) (reverse fns)
#'(lambda (&rest args)
(reduce #'(lambda (v f) (funcall f v))
rest
:initial-value (apply fn1 args)))))
Run Code Online (Sandbox Code Playgroud)
用法是:
(mapcar (compose #'list #'round #'sqrt)
'(4 9 16 25))
Run Code Online (Sandbox Code Playgroud)
输出是:
((2) (3) (4) (5))
Run Code Online (Sandbox Code Playgroud)
2号线和6号线对我来说看起来特别神奇.任何意见将不胜感激.
我用Vim作为编辑."实用的常见Lisp"建议安装Lispbox,我不知道如何使用emacs,不知道如何使用该TT运行lisp代码之后我找到了vim的lisp插件,称为limp.vim,带有长而硬的安装指令:((最后我安装了"Clisp",我可以使用一个简单的命令运行lisp代码:
clisp ~/test.lisp
Run Code Online (Sandbox Code Playgroud)
但是如何编译呢?lisp是编译语言吗?对不起,我只是什么都不知道,我是lisp的新手
任何人都可以告诉我在linux上安装lisp到底需要什么?什么是SLIME,sbcl,......等等?
为什么Common Lisp中存在函数/宏二分法?
允许同名表示宏(在编译/ eval中的函数位置找到优先级)和函数(例如可用)的逻辑问题是什么mapcar?
例如,second既定义为宏又作为函数允许使用
(setf (second x) 42)
Run Code Online (Sandbox Code Playgroud)
和
(mapcar #'second L)
Run Code Online (Sandbox Code Playgroud)
无需创建任何setf技巧.
当然很明显,宏可以做的不仅仅是函数,所以类比不能完整(我当然不认为每个宏都是一个函数)但是为什么要禁止它,因为它可以共享一个命名空间可能有用吗?
我希望我不会冒犯任何人,但我真的没有找到"为什么这样做?" 回应真的很相关...我在寻找为什么这是一个坏主意.施加任意限制,因为没有很好的用途是IMO有点傲慢(有点假设完美的远见).
或允许它有实际问题吗?