通过动词,副词,叉子等编写J风格的超级浓缩默契编程,是否曾经通过图书馆尝试主流功能语言?
如果是这样,结果有多成功?
如果没有,是否有技术问题使这不可能,或者它是否值得做?
我特别感兴趣的是像forks这样的结构似乎与函数式编程中的基本概念没有直接对应.
经过多年的SML,Haskell和F#,我刚刚回到OCaml进行一项新的小型研究项目.
我很快发现自己在使用OCaml库时遗漏了一些东西,而且我也错过了monadic理解的语法.
OCaml电池似乎填补了这些空白.但我有点不确定它是否已达到成熟,稳定且足够广泛的程度.我怀疑的部分原因是在安装时遇到了一些问题 - 包括发现当前的安装说明已经过时,只有Googling最终才能找到对支持请求的响应,解释了所需的内容.
电池相对稳定吗?(或者至少比以上更稳定?)它的使用相对普遍吗?(例如,使用它编写的新OCaml代码的10%?)
建议使用哪种类型的项目?
(并且,特别是建议中小型研究项目应该产生一个可能会维持一段时间的小型图书馆.)
还有其他建议吗?
正如Moggi 20年前提出的->那样,ML等语言的有效函数空间可以分解为标准的总函数空间=>加上强大的monad T来捕获效果.
A -> B 分解为 A => (T B)
现在,Haskell支持monad,包括一个看起来足以用于ML中的效果的IO monad,它有一个包含=>(但也包括部分函数)的函数空间.因此,我们应该能够通过这种分解将相当大的ML片段转换为Haskell.从理论上讲,我觉得这很有效.
我的问题是这样的嵌入是否可行:是否有可能设计一个Haskell库,允许在Haskell中以不远离ML的方式编程?如果是这样,性能将如何?
我对"实用"的标准是,具有广泛的使用效果现有ML代码可以通过嵌入相对容易地转录成Haskell中,包括涉及高阶函数复杂的案件.
为了具体化,我自己尝试通过嵌入进行这样的转录.主要功能是转录一些简单的ML代码,强制生成5个不同的变量名.而不是直接使用的分解,让他们评估他们的论点我的版本提升功能-之前的定义,main是一个小型图书馆,包括解除原语.这项工作没问题,但有些方面并不完全令人满意.
val.具有功能(如未提升的版本rdV),将有助于这一点,在这些要求中定义的成本.varNum需要monadic绑定通过<-a do.然后,这会强制任何依赖于它们的定义也在同一个do表达式中.do表达.这是ML程序是如何经常考虑,但在Haskell它不是那么很好的支持-例如,你不得不使用case,而不是公式.那么,有关改进这一点的建议,或者使用相同分解的更好方法,甚至是使用反映ML的样式在Haskell中实现相同的编程目标的完全不同的方法?(并不是我不喜欢Haskell的风格,只是因为我希望能够轻松地映射现有的ML代码.)
import Data.IORef
import Control.Monad
val :: Monad m => a -> m a
val = return
ref = join . liftM newIORef
rdV = readIORef -- Unlifted, hence takes a value
(!=) r x = …Run Code Online (Sandbox Code Playgroud) 看看Python和Javascript中的理解,到目前为止,我看不到一些我认为在Haskell等语言中理解最强大的主要特性.
他们允许像多个发电机这样的东西?或者它们只是一个基本的地图过滤器形式?
如果他们不允许多个发电机,我发现它们非常令人失望 - 为什么这些东西被遗漏了?
在处理纹理时,"UVW贴图"是否与"UV贴图"意义相同?
如果是这样,为什么有两个术语,什么是"W"?如果没有,它们之间有什么区别?
[维基百科目前对这个问题没有启发:http://en.wikipedia.org/wiki/Talk : UVW_mapping ]
最近主流语言(如perl和C#)对匿名方法/功能的转变是重要的,还是违反OO原则的奇怪功能?
最近的库是最新版本的英特尔的线程构建模块和微软PPL和Linq,依赖于这些东西是不是一件好事?
当前拒绝匿名方法/功能的语言(如Java)在坚持纯粹的OO模型时做出了明智的选择,还是由于缺乏基本的编程功能而落后?