我已经使用Python,PHP,Java和C进行了几年或几年的编程,刚刚读完黑客和画家,所以我很想给LISP一个尝试! 我明白它与我所知道的完全不同,并不容易。 另外我想(如果我错了,请纠正我)LISP周围的社区和开发方式less得可怜。 所以我的问题是:学习LISP的最好方法是什么? 我不介意买书或投资一些时间。 我只是不希望它被浪费。 “最终”的想法是使用LISP进行Web开发,而且我知道这并不常见,所以我知道在select第一本书或教程之前计划我的学习是很好的,并且花费大量的时间在一些不可能的事情上是最好的方法! 谢谢大家的答案! 编辑:我阅读Practical Common Lisp,是:…很长,很难,有趣,肯定让我在Lisp中滚动,在那之后,我阅读了这个小小的策划者,而且对我的整体编程来说很短,很有趣,非常好。 所以我的build议是首先读小诡计,然后(它的几个小时,它的价值),如果你决定口齿不清(或计划或任何方言)是不是你在哪里寻找,你仍然会有一个非常有趣关于recursion的新思路!
我一直在学习Lisp扩展我的视野,因为我听说它被用于AI编程。 在做了一些探索之后,我还没有findAI语言中的例子或其他任何可以使它更倾向于使用的例子。 过去是Lisp使用,因为它可用,还是有什么,我只是失踪?
如今所教授的软件工程完全专注于面向对象的编程和面向世界的“自然”面向对象视图。 有一个详细的方法,描述了如何通过几个步骤和许多(UML)工件(如用例图或类图)将域模型转换为类模型。 许多程序员已经内化了这种方法,并且对如何从头开始devise一个面向对象的应用程序有了一个好主意。 新的炒作function编程,这是在许多书籍和教程中教授。 但是function软件工程呢? 在阅读Lisp和Clojure时,我发现了两个有趣的陈述: function程序通常是自下而上的,而不是自上而下(“On Lisp”,Paul Graham) function程序员使用OO程序员使用对象/类的地图(“Clojure for Java程序员”,由Rich Hickley讲话)。 那么,一个function性应用程序的系统化(基于模型)devise的方法是什么呢,例如在Lisp或Clojure中呢? 什么是常见步骤,我使用的是什么工件,我如何将它们从问题空间映射到解决scheme空间?
阅读Paul Graham关于编程语言的文章可能会认为Lispmacros是唯一的出路。 作为一名繁忙的开发人员,在其他平台上工作,我没有使用Lispmacros的特权。 作为想要了解这个嗡嗡声的人,请解释是什么让这个function如此强大。 请把这与我从Python,Java,C#或C开发世界中理解的东西联系起来。
(define .. (lambda (start stop) (cond ((> (add1 start) stop) (quote ())) ((eq? (add1 start) stop) (sub1 stop)) (else (cons start (.. (add1 start) stop)))))) 我定义了一个简单的范围函数。 目的是为了 (.. 1 5) –> (1 2 3 4) 相反,一个奇怪的时期正在被添加到我的元组,我不知道为什么: (.. 1 5) –> (1 2 3 . 4) 我不明白为什么会这样。 任何帮助表示赞赏
在介绍Lisp书的主要部分之后,我仍然不明白特殊的运算符(quote) (或等价' )函数做了什么,但是这已经遍布我所见过的Lisp代码。 它有什么作用?
我试图理解Lisp-1和Lisp-2之间的区别,以及它如何与Clojure相关,但我仍然无法正确理解。 任何人都可以启发我吗?
我有一个七个整数的列表,最初都是0,我们称之为“数据”。 定期在运行我的程序的过程中,我想增加一个整数的值之一。 在程序结束时,我打印数据。 一切都很好,除了在程序的每次连续运行中,所有来自上次运行的数据值都会被添加到此运行的所有数据值中。 我只想要这个运行的数据值。 数据是类方法中的局部variables,类方法调用的单独函数中的局部variables或类的槽,会发生这种意外的行为。 我是否通过incf或(setf value(1+ value))递增数据的单个值。 当我重新加载程序时,数据重置为全零,但是当我再次运行程序时,数据再次将所有最后一次运行的数据添加到此运行的数据。 当我增加其中一个数据值时,我使用函数nth,index是另一个对象的插槽的值。 什么会导致我的“数据”列表的价值不受欢迎的持续存在?
我知道Lisp和Scheme程序员通常会说,除非严格需要,否则应该避免使用eval。 我已经看到几种编程语言的相同的build议,但我还没有看到一个明确的反对使用eval的参数列表。 我在哪里可以find使用eval的潜在问题的帐户? 例如,我知道过程编程中的GOTO问题(使程序不可读,难以维护,难以find安全问题等),但是我从来没有看到反对eval的论点。 有趣的是,反对GOTO的同样的论点应该是有效的反对延续,但是我看到Schemers,例如,不会说延续是“邪恶的” – 你应该小心使用它们。 他们更有可能使用eval而不是使用代码使用代码(据我所知 – 我可能是错的)。