我刚刚开始了我的一门课程,因为课程刚刚开始 2 周前,我们现在正在在一门课程中学习 Scheme,因为我稍后会认为是某种原因,但到目前为止,他所教的基本上是如何在 scheme 中写作. 当我坐在这里试图保持清醒时,我只是想了解为什么我想知道这个,以及为什么有人使用它。它擅长什么?下周我打算问他,除了如何在计划中写东西之外,在这里学习的目标是什么。
9 回答
它是一种函数式编程语言,可以很好地拓宽您的经验。
即使你不在现实世界中使用它也不意味着它没有任何价值。它将帮助您掌握递归之类的知识,并帮助您以与平时不同的方式思考问题。
我希望我的学校强迫我们学习一门函数式编程语言。
像 LISP(以及非常密切相关的 Scheme)这样的语言之于编程就像拉丁语之于英语一样。
学习完课程后,您可能在日常生活中再也不会说拉丁语了,但简单地学习拉丁语这样的语言会提高您使用英语的能力。
Scheme 也是如此。
我在这里看到所有这些人都在说,虽然他们再也不会真正使用 Scheme,但它仍然是一种值得学习的语言,因为它强制了某种思维方式。虽然这可能是真的,但我希望你会学习 Scheme,因为你最终会发现它很有用,而不仅仅是作为学习的练习。
虽然它不像编译语言那么快,在服务网站或解析文本方面也不是特别有用,但我发现 Scheme(和其他扩展的 lisps)在简单、优雅和强大的功能操作方面没有可比性复杂的数据结构。老实说,我认为在 Scheme 中。这是我解决问题的语言。不要放弃或仅仅容忍 Scheme - 给它一个机会,它不会让你失望。
顺便说一句,Scheme 的最佳 IDE 是DrScheme,它包含语言扩展,可以做任何你可以用另一种语言做的事情,如果你发现它不能做的事情,你可以使用 C FFI 并自己编写。
我建议在学习时保持开放的心态。在学校的大部分时间里,我们并不完全理解我们在学习特定科目的内容/原因。但正如我一生中经历过的大约一百万次一样,事实证明它非常有用,并且至少意识到它会对你有所帮助。不管你信不信,Scheme 会让你成为一个更好的程序员。
有人说,Scheme 的最大优势在于作为一种教学语言。虽然学习函数式编程非常有益(这是一种全新的思维方式),但学习方案的另一个好处是它也是“纯粹的”。当然它不能做很多像 java 这样的东西,但这也是它的优点,它是一种完全由括号、字母数字字符和少数其他标点符号组成的语言。
在我的介绍课程中,我们学习了 Java,我看到我的很多朋友都在为“public static void main”而苦苦挣扎,尽管这不是程序的重点,而且教授们别无选择,只能“挥手”直到他们'重新更先进。您在 Scheme 中看不到这一点。
如果您真的想了解Scheme 可以用Java 等语言很难实现的小菜一碟,我建议您看一下: http: //mitpress.mit.edu/sicp/full-text/book/ book-ZH-12.html#%_sec_1.3
这可能是关于 Scheme 的最好的书。
NASA 使用 Scheme 对一些火星探测器进行编程。它在市场上的使用非常具体,但就像我确定你的老师告诉你的那样,你在 Scheme 中学到的东西将延续到一般的编程中。
尽量不要被括号和 car/cdr 之类的细节所困扰。您所学的大部分内容都以一种或另一种方式翻译成其他语言。不要担心你是否可以将 Scheme 带到市场,你很可能会在其他课程中学习一些其他更具市场价值的语言。你在这里学到的东西更重要。
如果您正在学习方案,则可以了解有关如何实现对象系统的所有信息(提示:对象系统并不总是关于具有绑定到它的方法和实例变量的类型......)。虽然这种知识对你 95% 的日常工作没有帮助,但对于 5% 的工作,你将依赖于这些知识。
此外,您可以了解完全不同的计算风格,例如流/惰性评估,甚至逻辑编程。您还可以了解更多关于一般计算机程序是如何被解释的;从如何评估程序代码的基础知识,到更深层次的方面,例如制作自己的解释器和编译器)。了解这类信息是优秀程序员与优秀程序员的区别。
Scheme 并不是真正的函数式语言,它与方法无关。也许更重要的是,如果您想探索不同的计算方法,Scheme 是一种很好的语言选择。例如,在 Scheme 之上构建了一种高度并行的函数式语言“Termite”。
简而言之,学习计划的重点是让您可以学习编程的基础知识。
如果您需要一些帮助以使方案编程更愉快,请不要害怕问。许多程序员(例如)被括号挂断了,当有完美的方法来使用方案源代码时,使括号成为珍惜而不是讨厌的东西。例如,带有 paredit-mode、某种方案交互模式和高亮括号模式的 emacs 非常棒。
我的问题是,当我们学习这个时,我们就一起学习了 clisp。我无法保持两条海峡来挽救我的生命。
我从他们身上学到的是如何编写更好的 c 和 java 代码。这仅仅是因为我学到了不同的编程风格。我已经将更多的函数式风格应用到我的一些编程中,并且在某些情况下它对我有所帮助。
如果我没有必要,我再也不想用 scheme 或 lisp 编程,但我很高兴我至少在它们中做了一点,只是为了学习不同的编程方式。
像 Scheme 这样的函数式语言在数学、人工智能、语言学和其他高度理论的计算机科学领域(机器学习、自然语言处理等)有很大的应用。这是由于没有副作用的函数式编程语言的纯度,以及它们轻松导航高阶程序的能力。对函数式编程语言的深入了解对于解决许多刚刚超出计算机科学前沿的问题至关重要。作为奖励,你会在高阶过程和递归方面做得很好。