正如标题所说,LISP的吸引力是什么?
我已经看到它抬高到高天然后回来然后在一个基座上面翻过来。我已经看到这里的人,我所知道的实际程序员,大学教授试图看起来像那些明显超越了平民语言战争的开明人员而宁愿死去而不是犯下异端邪说一种语言比另一种语言更好。
我试着学习它,我看了几个教程,在lisp和clojure的“在x分钟内学习x”页面(因为据我所知,它是在jvm上运行的更多FP投入的lisp),我理解语法以及如何处理它的内容。在过去的几个月里,我又多次回到教程中,但是每次语法都让我想找一个高中生的孩子,并因为混乱的代码而对他大吼大叫,因为看起来像是一个C风格的if条件变得狂野所有嵌套的括号和简单的东西似乎成了一件苦差事。 lisp似乎在几行中做了什么,其他FP语言如Haskell或F#,甚至像C#这样的非FP语言,只是发现地图和过滤器似乎更少以更具表现力的方式进行。
我看错了吗? 是否有需要发生的点击? 我是否只找到了蹩脚的资源?(如果是的话请给我一些学习lisp / clojure的好资源,最好是一些练习)
什么在...是lisp的吸引力?在这里诚实地向上帝提问。
提前谢谢!
答案 0 :(得分:12)
当我在2009年第一次听说Clojure时,我写了一篇名为" Clojure的博客文章:哪里是优雅?"我当时非常喜欢Python的优雅风格("可执行的伪代码"),而Lisp则非常陌生。不过,我继续和Clojure搏斗,因为"列出处理"在我的工具集中看起来像是一个重要的编程范例。我使用了很多JavaScript,Ruby和C#一段时间,并且在我自己的时间里使用ClojureScript。当我最终在2017年回到Python进行一些数据修改时,我发现我正在编写许多Clojure启发的函数来帮助。最后,我刚开始在Clojure中编写数据处理,我不会再回头了。因此,虽然您已经提出了一个可能无法回答的问题,但也许我可以说明您的观点与Lisp社区的热情之间存在差异的原因。
首先,虽然Lisp非常陌生,来自C,Python和Ruby的丰富语法,但Lisp语法的轻巧性却是一种巨大的祝福。它减轻了很多认知负担。许多种语法错误都完全消失了。但到目前为止,我从Lisp的一致语法中获得的最好的是它是如何容易转换的。在其他语言中工作时我最想念的是能够重新排列AST而无需弄乱代码的实际文本。使用Lisp比我经历过的任何其他语言都更加流畅。
其次,控制代码的评估方式是微不足道的。关于宏的荣耀已经写了很多,但对我来说,基本的超级大国是你可以阻止代码被评估,按特定的顺序进行评估,或者多次评估它,所有这些都没有包含代码的语法开销。一个功能。也就是说,我不会写宏,但是当我这样做时,函数是一个很差的替代品。
第三,大多数语言都不能很好地支持实时编码。我通常不使用REPL本身,但依靠编辑器集成来评估代码。 Clojure的工具足够好,我可以使用几十个命名空间来构建整个代码库,而无需重新启动JVM进程或将单个大代码文件拆分为单独的模块。
第四,Lisp代码往往组成得非常好。在所有作为返回值的表达式和在相对较小的数据结构上构建的语言之间,您可以混合和匹配具有很大自由的语言结构。这为其他语言提供了很多可能性。
所有这些的共同因素是语言尽力避开你的方式。当我是一名新手程序员时,C和Python以及Ruby的复杂语法有助于编程。它使我保持直线和狭窄。语言结构就像导航的地标一样。没有这些地标的Lisp可以感觉像是一个外国。但随着你越来越熟悉Lisp,其他语言会受到人为的限制,并且很难在其中移动,比如在飞行时驾驶道路。 Lisp是非常自由的,但从我个人的经验来看,我可以告诉你,就像飞行一样,它需要练习才能将它的陌生感从恐惧变为自由。