数组语言环境虽然令人着迷,却令人困惑.是否有理由选择J或K或APL或A中的一个?这些选项似乎都不是开源的 - 是否有开源版本?我很想扩大我的想法,但我仍然感到困惑.
几个月前我遇到了J/K/APL,同时解决了一些项目的问题,并且至少可以说是好奇.对于我制作的每一个看起来优雅的20行蟒蛇解决方案,都会有十分之一的gobsmacking 20 字符 J解决方案.我一直热衷于学习一些基本的J,并且已经做了一些尝试来学习词汇,但是发现学习曲线非常陡峭.
对于那些熟悉这些语言的人,你会建议花一些时间学习一门(我特别想到J)吗?为了满足我的好奇心而不是为了职业发展或某些这样的事情,我会这么做.
如果您愿意,可以考虑一些个人情况:
熟悉这些语言的人的任何建议都将非常感激.
在 APL 中有幂运算符?
,如果将其应用于函数,则会f
叠加f
. 如何在 Raku 中实现该运算符?
例如,使用以下定义f
:
sub f(Int:D $i){ $i + 1 }
Run Code Online (Sandbox Code Playgroud)
该命令say (f ? 4)(10);
应等效于say f(f(f(f(10))));
.
我在下面的实现是针对一个带有一个参数的函数。
如何使用适用于多个(或任何)签名的更好的实现来扩展或替换它?
如何定义该新电力运营商的“高优先级”?
有没有更好的方法来定义“身份函数”结果f ? 0
?
这是 APL 的描述?
:
“Power Operator”。
(?
是一个“带两个点的星星”,或者更正式的“Apl 功能符号 Star Diaeresis”。)
这是一个实现的尝试:
sub infix:<?>( &func, Int:D $times where $times >= 0 ) {
if $times == 0 {
sub func2($d) {$d}
} else …
Run Code Online (Sandbox Code Playgroud) 我正在努力学习APL(Kona),我正在寻找示例项目,这样我就可以了解经验丰富的APL如何组织他/她的代码.
任何开源项目都会有所帮助,但非财务或任何缺乏繁重数学的东西都会很棒.
我知道J&K; 但两者都不是开源的.
我也知道A +,但这似乎已经过时了.
是否有任何体面的APL开源实现?
如果是的话,在哪里?如果没有,为什么?
我想学习APL(更具体地说是Dyalog APL),但我似乎找不到任何好的资料来学习.
我能找到的唯一来源是Dyalog的文档下载,但除此之外,任何人都可以推荐一个好的来源吗?
我需要一个APL实现来测试一些表达式,知道哪个是该语言的最佳解释器?
如果它是免费的并且它在Linux上运行会很棒.
假设我有两个列表,一个是文本t
,一个是字符列表c
.我想计算每个字符出现在文本中的次数.
使用以下APL代码可以轻松完成此操作.
+?t?.=c
Run Code Online (Sandbox Code Playgroud)
但它很慢.它取外部产品,然后对每列进行求和.
这是一个O(nm)的算法,其中n和m是大小t
和c
.
当然我可以在APL中编写一个t
逐字符读取的程序程序,并在O(n + m)中解决这个问题(假设完美哈希).
有没有办法在没有循环(或条件)的APL中更快地完成这项工作?我也接受J的解决方案.
编辑: 实际上,我这样做的地方是文本比字符列表短得多(字符是非ascii).我正在考虑文本的长度为20,字符列表的长度为数千.
如果n小于m,则有一个简单的优化.
w ? (?t)?c
f ? +?t?.=w
r ? (?c)?0
r[c?w] ? f
r
Run Code Online (Sandbox Code Playgroud)
w只包含t中的字符,因此表大小仅取决于t而不取决于c.该算法在O(n ^ 2 + m log m)下运行.其中m log m是进行交叉运算的时间.
但是,如果有人提供了大量的文本文件,则仍然优选使用次二次算法.
在APL和Haskell中,monad这个词是指两个完全不同的东西,或者从两个不同的角度看同一个东西.
我对两种语言都很陌生,并试图理解更高层次的概念.
我正在用C++编写代码,但我真的很喜欢K/APL的面向数组的风格.
有没有人知道一组好的运算符重载技巧/宏/ ...允许在C++中进行一些K/APL风格的编程?
谢谢!