52

我刚开始在我的大学学习计算机科学,他们教我们用 Scheme 编程。

自从我在过去 6 年中学习 C++ 以来,Scheme 对我来说似乎有点奇怪。我的导师告诉我,你可以用它编写任何可以用 C 或 Java 编写的程序。

真的有人在使用这种语言吗?

4

21 回答 21

47

据我所知,使用它的人并不多,但绝对值得一看(即使只是尝试用另一种范式编程,这样你就可以学会以不同的方式思考)。您很幸运能够参加使用 Scheme 的课程,因为现在大多数大学都教授 Java。如果您想观看麻省理工学院的一些讲座或研究示例问题等,这里是一个很好的链接。

麻省理工学院开放课件 - 计算机程序的结构和解释

还有一本免费的在线随附书籍(计算机程序的结构和解释)。

更新:

对于那些对类似于使用 JVM 并且可以访问 Java 库(因为许多大学使用 Java)的方案的语言感兴趣的人,请查看Clojure。也许这将成为计算机科学介绍的新语言选择(我们都希望!)。

于 2008-11-14T19:15:40.630 回答
30

Square USA 用它制作了电影《最终幻想》

这是他们在上面发表的一篇论文:Gluing Things Together - Scheme in the Real-time CG Content Production

从那篇论文:

在 SIGGRAPH 2000 和 2001 上,我们 Square USA 研发团队展示了计算机生成的完整电影“最终幻想:灵魂深处”中场景的实时渲染。

[...]

我们发现在实时渲染引擎中嵌入一个 Scheme 解释器有很大的帮助。

于 2008-11-15T02:14:49.833 回答
22

Scheme 会让你对编程有不同的看法。试着心胸开阔!

于 2008-11-14T19:03:30.453 回答
13

“真的有人在使用这种语言吗?”

保罗格雷厄姆,著名。

于 2008-11-14T19:08:00.130 回答
12

JavaScript 在很多方面都与 Scheme 非常相似(尽管它缺少延续和 Scheme 的高级数值系统)。

来自“ ECMAScript 语言概述”(PDF)。2007 年 10 月 23 日。第 4 页。检索于 2009-05-03。

ES3 是一种简单的、高度动态的、基于对象的语言,它的主要思想来自于语言 Self 和 Scheme。编程风格是基于对象和函数式编程的混合体:ES3 中的主要抽象机制是词法范围的高阶函数和可变对象......

于 2009-10-05T19:36:35.593 回答
11

我目前正在学习 Abelson 和 Sussman 于 1986 年在 Hewlett-Packard 进行的 SICP 讲座,以及Brian Harvey 提供的Cal-Berkeley CS61A 播客(从同一本书中讲授)并在 Scheme 中学习,并且经验正在开放对我来说全新的思维方式。对于像我这样没有任何正规 CS 高等教育的人,我强烈推荐它...

于 2009-05-14T15:51:58.190 回答
10

我曾在一个项目中使用方案代码在生产中工作,它可能是非常酷的东西。Scheme 有一个很酷的特性,即动态重新编译以自我优化执行。我认为这就像离天网只有一步之遥。

于 2008-11-14T19:35:27.063 回答
7

我在大学里用过,但从那以后我就很少用了。

如果你对递归完全不满意,我强烈推荐学习 Scheme 或 Lisp。你将学会递归地思考各种各样的事情。递归总是正确的方法吗?当然不是。但它是工具箱中的一个有用工具。

我总是鼓励开发人员学习新语言。你学习和熟练掌握的语言越多,你对问题的思考就越抽象。您与特定语言的联系越少,您就越有可能选择最适合您的问题的语言。

于 2008-11-14T20:19:24.917 回答
7

除了个人经验,最接近客观猜测的是TIOBE 指数,目前 LISP/Scheme 以 0.470% 的市场份额排名第 21 位。TIOBE 使用搜索引擎结果来创建列表。显然,您会希望对列表(以及对 Scheme 使用的任何其他猜测)持保留态度。

无耻推广:查看PLT Scheme。他们创建了一个不错的社区,为许多平台提供他们的 IDE,并为您提供开箱即用的不错的库选择。

这是一篇在商业应用程序中描述 PLT 方案的文章:http ://www.untyped.com/downloads/icfp068-welsh.pdf 。

于 2008-11-15T06:50:42.553 回答
5

在俄罗斯,我们使用 PLT Scheme 开发软件。而且它卖得很好;)

于 2011-10-01T07:58:16.017 回答
4

Clojure是一种类似于 Scheme/Lisp 的语言,可以在 JVM 中运行,并且非常适合并行处理(据说)。使用 Clojure 的好处是您可以访问整个 Java API 和任何其他 Java 库。

Clojure 和 Scala 一样受到语言爱好者的欢迎。

于 2009-08-04T08:54:50.007 回答
3

只要付出足够的努力,所有语言都可以用来写任何东西:)

然而,Scheme 很酷——根据我的经验,了解 Scheme 往往会影响你用其他语言进行编程。

Scheme 宏非常强大,并且 call-with-current-continuation 是一种思维扭曲功能。

经典测试是计算机程序的结构和解释(“SICP”)。值得一读。

于 2008-11-14T19:06:25.220 回答
3

Java平台有很多方案实现,它们用于Java应用程序的脚本和原型设计。方案中存在用于 J2EE 的基于延续的 Web 框架,称为SISCWeb

Guile 方案在一些 GNU 应用程序中用作脚本语言 - 例如 GnuCash 主要是用方案编写的。

TinyScheme也用作 GIMP 的脚本语言,它的一些变体用于嵌入式系统。

于 2008-11-26T12:36:55.390 回答
3

是的!方案很有趣。我在滑铁卢大学的第一年就学会了它。一开始有点不同,特别是如果您来自 OOP/命令式背景。

它为你做了很多好事,而函数式范式绝对是你应该探索的,如果只是为了获得不同的视角。

它也很有用,例如,我刚刚为 C 的超简化版本做了一个编译器,我无法想象没有函数式语言(:

于 2009-08-04T08:43:32.777 回答
3

Jazz Scheme 是一个基于 Gambit Scheme 的开源方案环境,它似乎在积极推广工业用途,请查看:

爵士乐计划

他们在新闻中报道了新用途:

爵士乐计划新闻

根据页面,Scheme 正在(或曾经)在以下公司使用:DEC、TI、Tektronix、HP 和 Sun。

这个人的 LinkedIn 简历报告使用了迪士尼的 Chez Scheme。

只需用谷歌搜索一下就可以发现很多。在这种情况下,它证实了我曾经听说过 Scheme 的使用非常普遍,只是不是很公开的观察。

于 2010-03-29T11:12:16.747 回答
2

绝对地。Scheme 适用于许多不同类别的问题。Jim Blandy 正在开发一个名为 Minor的 Scheme 版本,它与本地系统更紧密地集成在一起,并且旨在提高性能。

我知道 LilyPond 使用 Guile 来实现可扩展性,但我不知道我是否会将 LilyPond 视为软件的理想光辉示例,因为它严重损害了我的 OS X 安装......

于 2008-11-14T19:41:37.893 回答
1

我最近在 stackoverflow 播客上听说Reddit最初是用 LISP 编写的!

于 2008-11-14T20:03:23.497 回答
1

这些天我在玩 IronScheme,但不知道有人在实际工作中使用 Scheme。

于 2008-11-14T20:09:55.873 回答
1

方案主要用于教学目的。这就是在(有争议的)RSR6 之前没有标准模块系统的原因之一:在为家庭作业编写小程序时,需要大量大型库是不寻常的。

Scheme 最初是作为向 Lisp 添加类似 Smalltalk 的 OOP 的实验。它最终改变了宏系统,添加了call/cc(和dynamic-winddynamic-unwind),并且增长了很多。

除了使用 Guile 作为脚本语言的 GNU 项目之外,我不知道任何使用 Scheme 的生产系统。不过,我确实知道一些使用 Lisp 的生产系统(Orbitz 在其预订系统中有 Lisp 代码)。

于 2008-11-14T20:13:36.317 回答
1

我已经学习了 2 年多的 Scheme,它对我作为一名程序员有很大的帮助。它教会了我如何以不同的方式思考并理解编程语言之间更深层次的概念和联系。事实上,您可以像在 Java 和 C 中一样在 Scheme 中编写任何程序,但这是相当困难的。在将其解释为 Java 或 C 代码之前,必须进行一系列程序转换。至少学习基础知识是值得的。

于 2013-04-01T03:57:03.030 回答
0

我在我的程序语言设计课上学习它,它有一些巧妙的用途。我只会将它用于容易导致尾递归的问题。

于 2008-11-14T20:19:24.650 回答