Lisp有什么好的"丰富"IDE?通过"丰富"来澄清我的意思是它应该有一个很好的查找参考,自动完成,自动包含,检查各种类型,某种编译支持,版本管理,REPL等.我已经回顾了一些以前的问题/ answers(比如什么是适用于Windows的Common Lisp实现?)但它确实没有达到我的需要/问题.我已经习惯了Eclipse并且已经找到了(CUSP,但活动/支持似乎很轻松).
不要麻烦我关于"富"IDE的短语,说emacs或史莱姆是美妙的,它是和IDE.我明白,我在大学期间已经使用了emacs多年.我想知道在Visual Studio,Netbeans或Eclipse中还有哪些(和更好的),类型UI和功能集?
我现在正在通过Practical Common Lisp工作
http://www.gigamonkeys.com/book/
这是一本很好的书,最后有一些实际的任务,但我正在寻找探索函数,变量和宏的使用的基本问题.任何人都可以提出合适的资源来加强所提出的概念吗?
(免责声明 - 我知道Seqs在Clojure中的重要性)
在常见的lisp中,cons函数可用于将两个符号组合成一个列表:
(def s 'x)
(def l 'y)
(cons s l)
Run Code Online (Sandbox Code Playgroud)
在clojure中 - 你只能使用一个序列 - 缺点还没有扩展到使用两个符号.所以你必须写:
(def s 'x)
(def l 'y)
(cons s '(l))
Run Code Online (Sandbox Code Playgroud)
在Clojure中有更高级别的模式可以解释Common LISP和Clojure之间的这种差异吗?
我想知道是否有一些函数式语言用于Web开发,哪些是最有用的并且支持这个目标?
好的,最后的问题,我将在Common Lisp完成我的猜数游戏!:D无论何时游戏开始(或者在第一场比赛后开始新游戏),都会调用以下函数.
;;; Play the game
(defun play ()
;; If it's their first time playing this session,
;; make sure to greet the user.
(unless (> *number-of-guesses* 0)
(welcome-user))
;; Reset their remaining guesses
(setq *number-of-guesses* 0)
;; Set the target value
(setq *target*
;; Random can return float values,
;; so we must round the result to get
;; an integer value.
(round
;; Add one to the result, because
;; (random 100) yields a number between
;; …Run Code Online (Sandbox Code Playgroud) 将项目添加到列表末尾的典型方法是什么?
我有一个列表(1 2 3)并想要添加4(其中4是评估结果(+ 2 2))
(setf nlist '(1 2 3))
(append nlist (+ 2 2))
Run Code Online (Sandbox Code Playgroud)
这表示append需要一个列表,而不是一个数字.我怎么做到这一点?
在Common Lisp中,如何覆盖CLOS类的默认字符串表示形式,以便调用format或princ打印可理解的内容,即使该类的对象嵌入其他类型(如列表或数组)中也是如此?
例如,如果我(format t "~a~%" x)在x持有我的解决方案类的实例时调用,我希望它打印出类似的东西#<SOLUTION genes: #(1 2 3) scores: #(4 5) rank: 6>而不是#<SOLUTION {BB7CD31}>.
到目前为止,我已经设法弄清楚是编写自定义函数来处理我知道将包含此类实例的打印结构,但这很乏味.当然Lisp提供了一些免费获得此功能的方法吗?
我是初学程序员,正在浏览"Land of Lisp"这本书.
我一直在用REPL输入书中的例子.是否可以将我当前的程序保存为.lisp文件,以便我可以加载它并在以后继续处理它?我知道我可以在文本编辑器中创建.lisp文件并加载它们,但我很乐意在全屏模式下使用REPL来做示例.
在Practical Common Lisp一书的第3章中,有一个类似SQL的选择和函数的例子.这是它的简化版本:
(defun where (x)
#'(lambda (item)
(> item x)))
Run Code Online (Sandbox Code Playgroud)
它像这样使用:
(remove-if-not (where 2) (list 1 2 3 4))
Run Code Online (Sandbox Code Playgroud)
在本书的前面部分解释说,#'序列用于表示它后跟一个函数名,而不是一个需要评估的变量.我不明白为什么这里需要它.我尝试在where没有它的情况下实现该功能,它也可以工作:
(defun where (x)
(lambda (item)
(> item x)))
Run Code Online (Sandbox Code Playgroud)
我试着谷歌搜索它,并且,正如你可以想象的那样,通过这样一系列的角色,它不是一个非常有成效的搜索.我不知道这件事的名字.在上面的代码中是否有任何特殊原因需要它?
就像这里的一些问题,我是Lisp的新手.我正在阅读Practical Common Lisp一书,但是稍微看了一下设置一个Web应用程序是多么容易,所以我一直在关注这个教程,以及这里的更新版本.
当我到达启动服务器的位置时,我的REPL就会死掉,然后我无法将任何东西推到服务器上*dispatch-table*.
所以基本上,我的代码在REPL中工作得很好,将对象添加到列表中,检索它们等等,然后我启动服务器使用
(setf *web-server* (start (make-instance 'hunchentoot:acceptor :port 8080)))
Run Code Online (Sandbox Code Playgroud)
哪个很好用,我可以访问它http://localhost:8080.但是当我访问它时,日志会打印到REPL,从那时起我无法实际使用REPL.例如,在Adam Petersen的帖子之后,我不能那么做
(push (create-prefix-dispatcher "/retro-games.htm" 'retro-games) *dispatch-table*)
Run Code Online (Sandbox Code Playgroud)
因为REPL没有反应.我尝试从不同的窗口(即从终端的SBCL)启动服务器但是它不知道我所处的上下文 - 它不理解我正在处理的包或我的任何代码.
我使用的是略微非标准的设置; 我在OSX上使用Sublime Text 2和SublimeREPL和SBCL(因为我真的没有进入Emacs和ST2很棒!).我描述我是如何把它一起在这里 -但我真的只张贴的以防万一,我会感到惊讶,如果它是我的设置造成的问题,而不是我失去了一些基本的东西.
无论如何,我知道我可以继续在更像生产的环境中设置hunchentoot,并且已经看到一些详细说明并远程访问REPL的帖子,但是我希望有一些更简单的东西可以解决我的问题.我错过了.
common-lisp ×10
lisp ×8
sbcl ×2
append ×1
clisp ×1
clojure ×1
clos ×1
cons ×1
eclipse ×1
hunchentoot ×1
ide ×1
land-of-lisp ×1
list ×1
quote ×1
random ×1
scheme ×1
sequence ×1
string ×1
sublimetext2 ×1