我刚开始在我的大学学习计算机科学,他们教我们用 Scheme 编程。
自从我在过去 6 年中学习 C++ 以来,Scheme 对我来说似乎有点奇怪。我的导师告诉我,你可以用它编写任何可以用 C 或 Java 编写的程序。
真的有人在使用这种语言吗?
我刚开始在我的大学学习计算机科学,他们教我们用 Scheme 编程。
自从我在过去 6 年中学习 C++ 以来,Scheme 对我来说似乎有点奇怪。我的导师告诉我,你可以用它编写任何可以用 C 或 Java 编写的程序。
真的有人在使用这种语言吗?
Square USA 用它制作了电影《最终幻想》。
这是他们在上面发表的一篇论文:Gluing Things Together - Scheme in the Real-time CG Content Production。
从那篇论文:
在 SIGGRAPH 2000 和 2001 上,我们 Square USA 研发团队展示了计算机生成的完整电影“最终幻想:灵魂深处”中场景的实时渲染。
[...]
我们发现在实时渲染引擎中嵌入一个 Scheme 解释器有很大的帮助。
Scheme 会让你对编程有不同的看法。试着心胸开阔!
“真的有人在使用这种语言吗?”
保罗格雷厄姆,著名。
JavaScript 在很多方面都与 Scheme 非常相似(尽管它缺少延续和 Scheme 的高级数值系统)。
来自“ ECMAScript 语言概述”(PDF)。2007 年 10 月 23 日。第 4 页。检索于 2009-05-03。
ES3 是一种简单的、高度动态的、基于对象的语言,它的主要思想来自于语言 Self 和 Scheme。编程风格是基于对象和函数式编程的混合体:ES3 中的主要抽象机制是词法范围的高阶函数和可变对象......
我目前正在学习 Abelson 和 Sussman 于 1986 年在 Hewlett-Packard 进行的 SICP 讲座,以及Brian Harvey 提供的Cal-Berkeley CS61A 播客(从同一本书中讲授)并在 Scheme 中学习,并且经验正在开放对我来说全新的思维方式。对于像我这样没有任何正规 CS 高等教育的人,我强烈推荐它...
我曾在一个项目中使用方案代码在生产中工作,它可能是非常酷的东西。Scheme 有一个很酷的特性,即动态重新编译以自我优化执行。我认为这就像离天网只有一步之遥。
我在大学里用过,但从那以后我就很少用了。
如果你对递归完全不满意,我强烈推荐学习 Scheme 或 Lisp。你将学会递归地思考各种各样的事情。递归总是正确的方法吗?当然不是。但它是工具箱中的一个有用工具。
我总是鼓励开发人员学习新语言。你学习和熟练掌握的语言越多,你对问题的思考就越抽象。您与特定语言的联系越少,您就越有可能选择最适合您的问题的语言。
除了个人经验,最接近客观猜测的是TIOBE 指数,目前 LISP/Scheme 以 0.470% 的市场份额排名第 21 位。TIOBE 使用搜索引擎结果来创建列表。显然,您会希望对列表(以及对 Scheme 使用的任何其他猜测)持保留态度。
无耻推广:查看PLT Scheme。他们创建了一个不错的社区,为许多平台提供他们的 IDE,并为您提供开箱即用的不错的库选择。
这是一篇在商业应用程序中描述 PLT 方案的文章:http ://www.untyped.com/downloads/icfp068-welsh.pdf 。
在俄罗斯,我们使用 PLT Scheme 开发软件。而且它卖得很好;)
Clojure是一种类似于 Scheme/Lisp 的语言,可以在 JVM 中运行,并且非常适合并行处理(据说)。使用 Clojure 的好处是您可以访问整个 Java API 和任何其他 Java 库。
Clojure 和 Scala 一样受到语言爱好者的欢迎。
只要付出足够的努力,所有语言都可以用来写任何东西:)
然而,Scheme 很酷——根据我的经验,了解 Scheme 往往会影响你用其他语言进行编程。
Scheme 宏非常强大,并且 call-with-current-continuation 是一种思维扭曲功能。
经典测试是计算机程序的结构和解释(“SICP”)。值得一读。
Java平台有很多方案实现,它们用于Java应用程序的脚本和原型设计。方案中存在用于 J2EE 的基于延续的 Web 框架,称为SISCWeb。
Guile 方案在一些 GNU 应用程序中用作脚本语言 - 例如 GnuCash 主要是用方案编写的。
TinyScheme也用作 GIMP 的脚本语言,它的一些变体用于嵌入式系统。
是的!方案很有趣。我在滑铁卢大学的第一年就学会了它。一开始有点不同,特别是如果您来自 OOP/命令式背景。
它为你做了很多好事,而函数式范式绝对是你应该探索的,如果只是为了获得不同的视角。
它也很有用,例如,我刚刚为 C 的超简化版本做了一个编译器,我无法想象没有函数式语言(:
绝对地。Scheme 适用于许多不同类别的问题。Jim Blandy 正在开发一个名为 Minor的 Scheme 版本,它与本地系统更紧密地集成在一起,并且旨在提高性能。
我知道 LilyPond 使用 Guile 来实现可扩展性,但我不知道我是否会将 LilyPond 视为软件的理想光辉示例,因为它严重损害了我的 OS X 安装......
我最近在 stackoverflow 播客上听说Reddit最初是用 LISP 编写的!
这些天我在玩 IronScheme,但不知道有人在实际工作中使用 Scheme。
方案主要用于教学目的。这就是在(有争议的)RSR6 之前没有标准模块系统的原因之一:在为家庭作业编写小程序时,需要大量大型库是不寻常的。
Scheme 最初是作为向 Lisp 添加类似 Smalltalk 的 OOP 的实验。它最终改变了宏系统,添加了call/cc
(和dynamic-wind
,dynamic-unwind
),并且增长了很多。
除了使用 Guile 作为脚本语言的 GNU 项目之外,我不知道任何使用 Scheme 的生产系统。不过,我确实知道一些使用 Lisp 的生产系统(Orbitz 在其预订系统中有 Lisp 代码)。
我已经学习了 2 年多的 Scheme,它对我作为一名程序员有很大的帮助。它教会了我如何以不同的方式思考并理解编程语言之间更深层次的概念和联系。事实上,您可以像在 Java 和 C 中一样在 Scheme 中编写任何程序,但这是相当困难的。在将其解释为 Java 或 C 代码之前,必须进行一系列程序转换。至少学习基础知识是值得的。
我在我的程序语言设计课上学习它,它有一些巧妙的用途。我只会将它用于容易导致尾递归的问题。