对于一个新的(ish)程序员来说,Lisp难以学习吗?

时间:2010-06-15 00:06:04

标签: lisp scheme common-lisp new-operator

我对Python有一点经验(足够我可以做/ if / else / elif和一些随机数生成),但我总是对Lisp语言有一种奇怪的迷恋。我下载了一些方案源代码来查看语法,但对我来说这简直是胡言乱语。

对于像我这样只有一点编程经验的程序员,给出一些好书,网站和一些时间,学习Common Lisp或Scheme会特别困难吗? 哪两个会更容易?就易学性而言,它们与Python和C相比如何?

由于

14 个答案:

答案 0 :(得分:25)

获取SICP(计算机程序的结构和解释)。直到最近,这是麻省理工学院的入门级CS课本。它完全基于Scheme。如果你喜欢CS,你会喜欢这本书。这是梦幻般的。在阅读之后你也会离开一个更好的程序员(最理想的做大部分练习)。这是一本理想的初学者书,它从一开始就开始,让你轻松胜任Scheme。然而,这是一本大学教科书,所以除非你有一点编程的诀窍,否则它可能有点困难。

答案 1 :(得分:21)

  

鉴于一些好书,网站和一些时间,学习Common Lisp或Scheme会特别困难吗?

  

两者中的哪一个会更容易?

方案,因为

  

就易学性而言,他们如何与Python和C进行比较?

我认为学习C比学习Python或Scheme更难,因为要学习C,你真的需要学习机器模型,指针和动态内存。

在Scheme和Python之间,很难预测任何个人学习者的反应。我非常喜欢Python的重要空白,我发现Scheme的括号令人烦恼并且分散注意力。很多人都非常喜欢Scheme的括号,他们发现Python的重要空白令人烦恼并且分散注意力。 (存在重要的语义差异,但很难摆脱语法的暴政。)

  

我应该使用哪些书? (问题你应该问过,但没有)

不要使用计算机程序的结构和解释(SICP)。这本书的观点是“让我们通过编码所有计算机来展示我们的聪明才智计划科学。“这本书是一个巨大的智力巡回演出,但它根本不适合初学者。当麻省理工学院在6.001中使用它时,它就像一个“彻头彻尾”的课程,因为30-40%的麻省理工学院学生想要主修EECS,他们试图让人们离开。 SCIP对于具有5年经验的高级CS学生或程序员来说是一个非常好的。 不要尝试从中学习。

要学习的一些好书:

    Felleisen et al
  • How to Design Programs经过多年的经验精心打造和磨练。它使用Scheme并教你完全在标题中声称的内容。强烈推荐。

  • Harvey和Wright的
  • Simply Scheme是一本入门的CS书,是那些认为SCIP需要“前传”的人。我很喜欢阅读它,但我没有教过它。

  • 如果你能保持可爱,Felleisen和弗里德曼的The Little Schemer有一种非常不同寻常的辩证风格,有很多例子,你可能会喜欢。

答案 2 :(得分:5)

获取

“The Little Schemer”

“高级计划”

这些书籍作为编程概念助手是不可或缺的。我个人在SICP面前做这件事只是因为SICP有点快,如果你之前没有编程太多......即使你有他们的好书!

我个人认为Scheme是一种非常好的教学语言。它可以用于我想的任何事情,但它非常适合教授编程结构而不会陷入语法问题。最接近纯粹语义的东西。

答案 3 :(得分:4)

我建议使用Common Lisp。

它具有出色的实现,可提供各种不同的功能。最好的仍然是商业实现(虽然他们有学习Lisp的免费版本),如来自Franz和LispWorks的Allegro CL。它们提供了丰富的库,并包含基于GUI的开发环境。但开源和免费实现也很出色:SBCL,CCL,ECL,CLISP,...

有很多关于Lisp的优秀书籍,比如Peter Seibel的Practical Common Lisp。

学习Common Lisp并不困难,但是获得更深层次的经验需要一些时间,因为语言及其生态系统非常丰富。

学习计划也很有用。学习SICP也可以提供帮助。但是没有立即需要,因为Lisp文献谈到了许多相同的问题。不幸的是,Scheme近年来失去了一些吸引力(我发现最新的R6RS完全令人失望)而且我发现像'Racket'这样的实现也在向错误的方向发展。相反,人们可能想学习一些更好的ML方言和实现(比如OCAML)。虽然查看各种Scheme实现可能会很有趣,但也有一些有趣的功能。

您应该从Lisp学到的核心思想是:

  • 多范式编程
  • 可编程编程语言
  • 符号计算
  • 互动和探索性发展

了解Lisp如何支持这些想法及其重要性。

答案 4 :(得分:3)

Lisp并不难学。它可以教得很差,而且它确实有一些“高级”概念,特别是如果你来自命令式的“经典”编程世界。

但是今天,现代语言可能与Lisp提供的方面非常相似,所以与其他语言相比,Lisp中可能没有太多“新”,尤其是Python。

我与Lisp(和Scheme)的“障碍”只是“lambda”。从本质上讲,我的根本问题是我没有任何关系到什么是“lambda”,为什么它被称为“lambda”等等。

如果它被命名为“功能”或“常规”或其他东西,那将是微不足道的。但事实上,“lambda”这个词在各方面都毫无意义。他们本可以称之为“mork”,“bleem”或“fizbin”,它本来就是有用的。

一旦我理解了“lambda”,剩下的就落到了地方。

如果您对A Lisp(即一种基本上来自Lisp家族的语言)感兴趣,那么Scheme是一个不错的选择。但是,Scheme不是Common Lisp(这就是今天“Lisp”的意思),它们实际上是不同的语言。

如果你想学习Common Lisp,我会从Common Lisp开始并跳过Scheme。

你可以期待Practical Common Lisp让你在没有“必须学习”的情况下编写Lisp。

答案 5 :(得分:3)

您实际上可以在Google视频上找到计算机程序的结构和解释的完整视频课程。从这里开始:http://video.google.com/videoplay?docid=933300011953693438#

这些视频是由惠普公司在80年代制作的,由Sussman和Abelson(原作者)教授。该课程充满了HP HW /机械工程师,他们正在接受SW工程师的培训。惠普将它们发布到公共领域。

任何人都可以观看这些视频并最终成为Lisp程序员。出色的,优秀的教练。

答案 6 :(得分:2)

Scheme(有意)比Common Lisp更紧凑,你会发现你可以非常快速地学习这门语言。现在,掌握(任何)语言和计算机科学概念是另一个故事,而@Matt Greer的书籍建议将是一个很好的起点。

答案 7 :(得分:2)

我会说Lisp作为一个新的程序员比你等待更容易学习。那是因为大多数语言鼓励你思考编程的方式是学习Lisp的障碍;拥有更传统语言的经验可能会在某些方面有所帮助,但与Lisp独特的品质无关。

方案---我最熟悉的Lisp可能就像Python一样容易学习,特别是如果你选择PLT Scheme(现在改名为Racket),它为你提供了很多有用的扩展。 Common Lisp可能存在同样的难度,但我发现它本能性较低,原因可能并不普遍。由于Norman Ramsey建议的原因,我发现C比其中任何一个都困难得多。

我建议学习的内容在很大程度上取决于你想用它做什么。如果您想学习一种没有多余装饰的清晰语言,可以快速学习其核心,请学习一种实现R5RS标准的方案,例如Scheme48。如果您想要一个更强大的方案,无论是立即还是稍后,请学习PLT Scheme/Racket。如果你想要一种巨大的,友好的,分散的强大语言,但不像Scheme那样明显内部一致,那么选择Common Lisp; Steel Bank Common Lisp是一个很好的实现。

答案 8 :(得分:1)

至于哪个更容易,Lisp或Scheme,作为Lisp家族的“方言”,在初学者级别它们几乎是相同的东西并且可以互换。我从Peter Siebel的“Practical Common Lisp”中学习了Common Lisp,然后选择了SICP并使用Common Lisp而不是Scheme完成了前两章的所有练习。只有几个不同的关键字和诸如在CL中使用funcall之类的东西,其中只有一对括号在Scheme中就足够了。

Siebel的书和SICP​​都可以在网上免费获得。下载它们并获得hackin'!

答案 9 :(得分:1)

上次我在Berkeley的CS61A的介绍课程中查看了使用SICP的讲座,可以从iTunes获得,这将为您提供完整的讲座系列,以帮助您学习该语言。免费!我在90年代末回到Brian Harvey,学生们非常喜欢他的讲座。

http://deimos3.apple.com/WebObjects/Core.woa/Browse/berkeley.edu.1621506930

答案 10 :(得分:0)

考虑(标题不佳)Samuel N. Kamin撰写的“编程语言,基于解释者的方法”。您将学习如何使用7种不同的语言(包括Lisp,Scheme,SASL,CLU)进行编程,以及如何为每种语言实现解释器。你应该很好地理解语言的不同之处,为什么它们的设计方式,使用它们的权衡等等。

答案 11 :(得分:0)

如果你被这种语言着迷,我想你会觉得很容易。但我必须说这并不适合所有人。我多次尝试学习Scheme和Common Lisp并失去了兴趣。当我在编程语言中看到“if”时,我开始寻找“then”,“else”,一个开括号,一个冒号等等,但Lisp却没有。我只看到一个括号的汤。

此外,在其他语言中,一些概念更容易。我同意那些不喜欢“lambda”这个词的人。当我学习Lua时,我真的得到了它(Javascript非常相似)。在Lua和Javascript中,当你需要一个匿名函数时,你输入(猜测是什么)“函数(等等)”。当你想通过返回一个函数创建一个闭包时,你写(猜猜是什么)“返回函数(等等)”。在Lisp中,您编写“lambda”并在函数末尾使用隐式返回。不是非常适合初学者。

我同意诺曼拉姆齐:不要使用计算机程序的结构和解释(SICP)。

这本书很奇怪。它开始非常简单,在第1页你学习了一些表达式(+ 137 349)。非常简单。然后,在第2页,您将学习功能。在第3页,您将学习递归。在第4页,您将学习使用lambdas(!!!)的高阶函数。在第5页起,您说WTF并且无法理解任何事情。这本书只有5章,每章有千页。它介绍了第3章中的任务。也许你的大脑是功能性的,但我的大脑肯定是必要的,我需要看看机器正在做什么:分配值,复制记忆等。在分配之前教授高阶函数只是在我的命令中倒退脑。在最后一章中,本书讨论了编译器,解释器和垃圾收集。这是开始教授表达式(+ 137 349)的同一本书吗?现在我可以理解本书的最后几章,但只有在学习了不同范例的六种编程语言并阅读了很多关于编程语言及其实现的知识之后。我不知道有谁能按照这本书对读者施加的速度。

答案 12 :(得分:0)

不,一点也不。我创建了一个名为Clojurecademy的平台,旨在教授 Clojure 编程语言(这是 Lisp 的方言),并且它具有交互式(动手实践)教学模式像Codecademy那样。

你可以从它开始,你会发现它有多容易。

答案 13 :(得分:-3)

相对而言,如果你像我一样顽固,这是一门非常难学的语言:) Python是一种OOP语言,虽然FP是可能的,但它仍然是OOP。 Lisp是一种像Haskell一样的FOP语言。像Python一样,它可以做OP,但它仍然是FOP。 使用条款: OOP =面向对象的编程 OP =对象编程 FOP =面向功能的编程 FP =功能编程