标签: common-lisp

学习LISP的最佳方法是什么?

我已经用Python,PHP,Java和C编程了几年或几年,我刚读完黑客和画家,所以我很乐意尝试一下LISP!

我理解它与我所知道的完全不同,并且这并不容易.我想(如果我错了,请纠正我)LISP的社区和发展方式会减少.所以我的问题是:学习LISP的最佳方法是什么?

我不介意买书或投入一些时间.我只是不想浪费它.

"最终"的想法是使用LISP进行网页开发,我知道这不是那么常见所以......我知道在选择第一本书或教程之前计划我的学习是很好的,并花费大量时间在可能没有的东西上是最好的方式!

谢谢大家的答案!

编辑:我阅读Practical Common Lisp并且:...长,有点,有趣并且肯定让我在Lisp中滚动,之后我读了这个小阴谋家,这对我的整体编程很简单,有趣且非常好.因此,我的建议是首先阅读小阴谋,然后(它需要几个小时而且值得)如果你决定使用lisp(或方案或任何方言)不是你想要的东西,你仍然会非常有趣关于递归的新思路!

lisp scheme common-lisp

165
推荐指数
14
解决办法
5万
查看次数

158
推荐指数
6
解决办法
8万
查看次数

Lisp在现实世界中

我已经尝试过Lisp(实际上是Scheme)并发现它是一种非常漂亮的语言,我有兴趣学习更多.但是,似乎Lisp从未在严肃的项目中使用过,而且我没有看到它被列为任何职位发布所需的技能.我有兴趣听到任何使用过Lisp或者在"现实世界"中使用它的人,或者谁知道它是否被认为是纯粹的学术语言.

lisp scheme clojure common-lisp

144
推荐指数
25
解决办法
3万
查看次数

请解释Paul Graham关于Lisp的一些观点

我需要一些帮助来理解Paul Graham的What What Lisp Different中的一些观点.

  1. 一个新的变量概念.在Lisp中,所有变量都是有效的指针.值是具有类型而不是变量的值,分配或绑定变量意味着复制指针,而不是它们指向的内容.

  2. 符号类型.符号与字符串的不同之处在于您可以通过比较指针来测试相等性.

  3. 使用符号树的代码表示法.

  4. 整个语言始终可用.读取时间,编译时和运行时之间没有真正的区别.您可以在编译时编译或运行代码,同时在运行时读取或编译代码.

这些点意味着什么?它们在C或Java等语言中有何不同?除了Lisp系列语言之外的任何其他语言现在都有这些结构吗?

lisp scheme clojure common-lisp paul-graham

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

为什么eval邪恶呢?

我知道Lisp和Scheme程序员通常会说eval除非必要,否则应该避免.我已经看到了几种编程语言的相同建议,但我还没有看到一个反对使用的明确论据列表eval.我在哪里可以找到使用中潜在问题的说明eval

例如,我知道GOTO程序编程中的问题(使程序难以理解且难以维护,难以找到安全问题等),但我从未见过反对的论点eval.

有趣的GOTO是,相反的论点应该对延续有效,但我看到Schemers,例如,不会说延续是"邪恶的" - 你在使用时应该小心.他们更倾向于使用代码而eval不是代码使用continuation(据我所知 - 我可能是错的).

lisp scheme eval clojure common-lisp

141
推荐指数
8
解决办法
1万
查看次数

Clojure,Scheme/Racket和Common Lisp有什么区别?

我知道他们是同一个语言家族的方言,称为lisp,但究竟是什么区别呢?如果可能,您是否可以概述语法,特征,功能和资源等主题.

lisp scheme clojure common-lisp racket

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

Clojure与其他Lisps

我的问题的目的不是要开始一场火焰战争,而是要确定在什么情况下每种语言都是"工作的最佳工具".

我已经阅读了几本关于Clojure的书(Clojure 编程,实用Clojure,Clojure 的喜悦,以及Clojure in Action的Manning Early Access版本),我认为这是一本很棒的语言.我目前正在阅读Let Over Lambda,它主要涉及Common Lisp宏,而且它也是一种非常有趣的语言.

不是 Lisp专家(更多的是新手),但这个语言系列对我来说很有吸引力,一般来说,功能编程也是如此.

Clojure的优点(以及"其他"的缺点):

  • 在JVM上运行.

    • JVM是一个非常稳定,高性能的语言环境,很好地满足了Sun的"一次编写,几乎在任何地方运行"的梦想.我可以在我的Macbook Pro上编写代码,将其编译成可执行的JAR文件,然后在Linux和Microsoft Windows上运行它,几乎不需要额外的测试.

    • (Hotspot和其他)JVM支持高质量的垃圾收集和非常高效的即时编译和优化.就在几年前,我写了一些必须在C中快速运行的东西,现在我毫不犹豫地在Java中这样做.

    • 标准,简单,多线程模型.Common Lisp是否有标准的多线程包?

    • 打破了所有这些括号的单调[],{}#{},虽然Common Lisp的专家可能会告诉我,有读者宏,你可以添加那些CL.

Clojure的缺点:

  • 在JVM上运行.
    • 没有尾递归或延续.Common Lisp是否支持延续?我相信,计划需要支持两者.

其他人的优点(特别是Common Lisp)(以及Clojure的缺点):

  • 用户可定义的阅读器宏.

  • 其他优点?

思考?其他差异?

lisp comparison scheme clojure common-lisp

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

使用Vim进行Lisp开发

我一直在使用Lisp一段时间,但我开始更加认真地在Lisp中做一些"真正的"工作.我是一个巨大的Vim粉丝,并且想知道如何使用Vim作为我的Lisp开发编辑器来提高效率.插件,工作流程建议等都是受欢迎的.

请不要说"使用emacs",因为我已经加入了Vim,我真的很喜欢它作为一名编辑.

lisp ide vim common-lisp

86
推荐指数
8
解决办法
4万
查看次数

Common Lisp中的LET与LET*

我理解LET和LET*之间的区别(并行与顺序绑定),作为理论问题,它非常有意义.但有没有你真的需要LET的情况?在我最近看过的所有Lisp代码中,您可以用LET*替换每个LET而不做任何更改.

编辑:好的,我理解为什么有些人发明了LET*,大概是作为一个宏,回归的时候.我的问题是,鉴于LET*存在,是否有理由让LET留在身边?您是否编写了任何实际的Lisp代码,其中LET*不能像普通的LET那样工作?

我不买效率论证.首先,认识到LET*可以编译成像LET一样高效的情况,这似乎并不难.其次,CL规范中有很多东西似乎根本就不是围绕效率而设计的.(当你最后一次看到带有类型声明的循环时?那些很难弄清楚我从未见过它们使用过.)在20世纪80年代后期的Dick Gabriel基准测试之前,CL 非常缓慢.

看起来这是另一种向后兼容的情况:明智的是,没有人愿意冒险破坏像LET那样基本的东西.这是我的预感,但是听到没有人有一个我丢失的愚蠢简单的案例令人欣慰,因为LET比LET*更容易让事情变得简单.

lisp common-lisp

78
推荐指数
9
解决办法
3万
查看次数

在哪里学习如何实际使用Common Lisp

我是一名C++程序员,正在尝试学习Common Lisp.我看了一些像Land of Lisp这样的书,并阅读了很多关于Lisp各种优点的在线文章.但是,我需要一些建议.

几乎所有我读过的关于Common Lisp的内容都与它的惊人之处有多大关系,以及它如何以惊人的速度完成这项工作以及它如何以30年前的现代编程语言解决许多问题.还有多么令人惊奇的宏,以及每个编程范例(OO,功能,基于actor或其他等)如何在Lisp中使用,以及列表如何是最终的数据结构.基本上将Lisp视为一种研究语言,并说它是多么的不同和革命性.

所有这些东西都可能是真的,但问题是我没有看到很多东西如何做实际的事情,如读取文件并将其拆分成文字并对其进行一些处理.为了学习Common Lisp,我对学习Common Lisp不感兴趣,但为了让我以前在C++中做的事情做得更快,错误更少.

所以我的问题是什么是最好的资源(无论是网站,书籍,什么),专注于教授如何使用Common Lisp来完成常见的编程任务,

  • 如何阅读文件
  • 如何读取文件,替换文件中的单词,并将结果写回文件
  • 迭代目录和其他文件系统中的文件
  • 与SQL数据库交互
  • 通过套接字进行通信
  • 对网络服务器之类的东西进行线程处理
  • 创建GUI
  • 对二进制文件执行操作
  • 编写一个解析器(不是Lisp中Lisp的解释器,据我所知,就像是5行Lisp)
  • 与操作系统交互(即用C或C++编写的东西)来做Lisp本身不能做的事情
  • 如何在C中编写Lisp扩展(可能吗?)
  • 嵌入lua解释器(可能吗?)

而且也不太实际,立即注意到,如何实现LISP常用的数据结构,如堆,栈,二叉搜索树等,但可以使用像Lisp的列表操作是公正carcdr正确的方式.我不知道.

我非常怀疑Lisp中的任何一个(列表中最后两个不太可能例外)是不可能的,或者人们不会那么喜欢它.我读到的上述内容提到了很多用Lisp编写的真实世界软件(想想雅虎网上商店).

但是,之前使用()命令式语言编程,我急于使用我所获得的新知识来编写实际应用程序.那么用Lisp学习编写实用软件的最快方法是什么?

顺便说一句,我看到彼得·塞贝尔的实践Common Lisp的,但是,以TOC来看,它只是触及了一些我想学习使用Lisp的做的事情.

还有一个问题,如果我可以(对不起,如果将两个问题合并为一个),我在哪里可以找到对Lisp函数和东西的引用?

真的很想要Lisp.

lisp common-lisp

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

标签 统计

common-lisp ×10

lisp ×9

scheme ×6

clojure ×5

comparison ×1

eval ×1

ide ×1

paul-graham ×1

racket ×1

vim ×1