nic*_*ame 31 scheme haskell functional-programming referential-transparency
我已经使用了一些函数式编程语言,并且非常喜欢Lisps使用的s-expr语法(特别是Scheme).
我也看到了使用纯函数式语言的优势.因此:
是否有任何纯粹的功能方案(或一般的Lisps)?
jon*_*onr 24
新的Racket语言(以前称为PLT Scheme)允许您使用s表达式(实际上是任何语法)实现您喜欢的任何语义.基本语言是一种热切评估的,动态类型的方案变体,但是在顶部构建的一些值得注意的语言是惰性方案和称为父时间的功能性反应系统.
在Racket中制作纯函数语言的一种简单方法是采用基本语言,而不是提供任何改变状态的过程.例如:
#lang racket/base
(provide (except-out (all-from-out racket/base) set! ...more here...))
Run Code Online (Sandbox Code Playgroud)
构成一种没有的语言set!.
j-g*_*tus 15
我不相信有任何纯粹的功能性Lisps,但Clojure可能是最接近的.
Clojure的创造者Rich Hickey:
为什么我要编写另一种编程语言?基本上是因为我想要为并发而设计的Lisp for Functional Programming并且找不到它.
Clojure is functional, with immutable data types and variables, but you can get mutable behavior in some special cases or by dropping down to Java (Clojure runs on the JVM).
This is by design - another quote by Rich is
A purely functional programming language is only good for heating your computer.
See the presentation of Clojure for Lisp programmers.
C. *_*ann 12
可能不是,至少不是玩具/概念证明之外的任何东西.请注意,即使Haskell是不是100%纯粹的功能-它拥有秘密逃生舱口,并在东西IO是在这个词的一些痛苦,挥手感只是"纯".
那就是说,你真的需要一种纯粹的功能语言吗?您几乎可以使用任何语言编写纯功能代码,并且会带来不同程度的不便和低效率.
当然,承担普遍状态修改的语言会使保持纯粹的东西变得痛苦,所以也许你真正想要的是一种鼓励不变性的语言?在这种情况下,你可能会发现看看Clojure的哲学是值得的.这是一个Lisp,开机!
最后要注意的是,确实认识到Haskell的大部分"语法"都是厚厚的糖层.底层语言只不过是一个类型化的lambda演算,并没有什么能阻止你以这种方式编写所有代码.不过,你可能会从其他Haskell程序员那里得到有趣的外观.还有Liskell,但我不确定这些日子里的状态.
最后,实际的注意事项:如果你想要实际编写你想要使用的代码,而不仅仅是为了好玩而修补一些东西,你真的想要一个知道如何使用纯代码/不可变数据结构的聪明的编译器.
不一致和不可扩展的语法
什么是"不一致"?
基于语法选择语言是很奇怪的.毕竟,学习语法需要几个小时 - 这只是所需投资的一小部分.
相比之下,重要的考虑因素,如速度,打字规则,可移植性,图书馆的广度,文档和社区,对您是否能够提高效率有更大的影响.
无视所有的火焰诱饵,快速google for immutable Scheme会产生一些结果:http: //blog.plt-scheme.org/2007/11/getting-rid-of-set-car-and-set-cdr.html