我想知道我可以从Scheme中学习哪些独特的功能来帮助我成为更好的程序员?
我在主流语言方面有很多经验,并且我希望拓宽视野并了解其他语言所缺少的功能方面。我熟悉javascript的闭包,C#的lambda表达式,我想知道我能专注于其他语言中缺少的东西吗?除了Lisp语法外,我觉得到目前为止,我已经用其他语言遇到过。
Scheme / Lisp的独特之处是什么会教给我一些新东西?
我想知道我可以从Scheme中学习哪些独特的功能来帮助我成为更好的程序员?
我在主流语言方面有很多经验,并且我希望拓宽视野并了解其他语言所缺少的功能方面。我熟悉javascript的闭包,C#的lambda表达式,我想知道我能专注于其他语言中缺少的东西吗?除了Lisp语法外,我觉得到目前为止,我已经用其他语言遇到过。
Scheme / Lisp的独特之处是什么会教给我一些新东西?
Answers:
Lisp最重要的定义特征可能是“代码即数据”。 使用任何其他语言都不会获得完全相同的体验。在C#中,最接近的类似物是表达式树。
正是这种质量使Lisp成为了一种出色的解析语言。这也是促使保罗·格雷厄姆(Paul Graham)说起Lisp的品质:“ Lisp的不寻常之处-实际上,是Lisp的定义品质-可以自己编写。” 尽管自托管编译器并不是什么新鲜事物,但是没有语言能够像Lisp一样优雅地进行编译。
元编程(Lisp也擅长的东西)也是值得学习的东西。
Paul Graham击败平均线
http://www.paulgraham.com/avg.html
是的,它将帮助您以递归方式进行思考。我在一个编程语言课程中只学习了一个月左右的时间(计划),它帮助我发展了思考和解决编程问题的方式。
尝试其他编程范例总是有价值的。然后,您将以新的想法回到OO世界。
不是语法,而是推理,这是很棒的大脑锻炼。从递归和列表的有趣用法来看,Appart没有太多其他恕我直言,但这是值得的。
延续:
在计算机科学和程序设计中,延续是计算机程序控制状态的抽象表示。延续化了程序控制状态,即,延续是一种数据结构,表示过程执行中给定点处的计算过程;可以通过编程语言访问创建的数据结构,而不是将其隐藏在运行时环境中。它包含诸如过程的当前堆栈(包括其寿命在过程中的所有数据,例如“局部变量”)之类的信息,以及计算中的过程点。延续的实例可以在以后用作控制结构。调用后,它将从其表示的控制点恢复执行。“当前的延续”
然后尝试实现McCarthy的模糊运算符:
1963年,Lisp的发明者约翰·麦卡锡(John McCarthy)发表了论文“计算的数学理论基础”,在其中他提出了函数amb(。,。)(在计算机程序意义上)。这个想法是amb(x,y)首先等于x。但是,如果稍后在计算中发现这导致某种矛盾,则x的值将缩回并替换为y。这比起初看起来要复杂得多。撤回一个值本质上意味着将整个计算状态回退到amb返回值x时的状态,然后滑入y值。这意味着以某种方式冻结并复制首次返回x时的整个状态。当发现矛盾时,将放弃程序的整个状态,并用重新激活的冻结版本代替。这些冻结状态称为延续。从许多方面来看,这就像是关于酸的GOTO声明。它可能导致跳转到代码上的任意位置。但是连续性比GOTO更好,因为它们更适合逻辑推理。