是否曾经尝试使用类似动词、副词、分支等方式来模拟J语言中超级紧凑的暗示性编程风格,并通过主流函数式编程语言的库实现?
如果有的话,结果如何?
如果没有,是有技术问题使其不可能,还是因为不值得这样做?
我特别感兴趣的是像forks这样的结构,它们似乎并不直接对应于函数式编程中的基本概念。
是否曾经尝试使用类似动词、副词、分支等方式来模拟J语言中超级紧凑的暗示性编程风格,并通过主流函数式编程语言的库实现?
如果有的话,结果如何?
如果没有,是有技术问题使其不可能,还是因为不值得这样做?
我特别感兴趣的是像forks这样的结构,它们似乎并不直接对应于函数式编程中的基本概念。
j
标签下的回答中获得了第二高的点赞数。SO需要更多的J语言程序员! - C. A. McCannJ
标签中拥有最多的赞。而且,我实际上从未编写和执行过J
程序。不过我了解它 - 实际上我在1995年曾在多伦多的Ken Inverson家住了一个周末(当时我父亲正在与Ken一起工作J
相关的事情,而我正在CMU攻读博士学位 - 是的,我想我是第二代PLer)。 - RD1J
中,fork 在语法上是隐式的,hook 也是如此。我怀疑这种情况无法模拟,并且个人认为隐式 fork 和 hook 看起来有些过头了。另一个区别是 sclv 提到的实现 - J 实际上可以高效地处理大型(甚至巨大)数组。 - RD1Camccann的讨论非常好。但请注意,这种风格现在会导致两次遍历。
您可以编写一个组合器库来合并遍历。请参见此处: http://squing.blogspot.com/2008/11/beautiful-folding.html
该文章提供了编写均值的以下示例:
meanF :: Fractional a => Fold a a
meanF = bothWith (/) sumF (after lengthF fromIntegral)
mean :: Fractional a => [a] -> a
mean = cfoldl' meanF