数组语言环境虽然令人着迷,却令人困惑.是否有理由选择J或K或APL或A中的一个?这些选项似乎都不是开源的 - 是否有开源版本?我很想扩大我的想法,但我仍然感到困惑.
几个月前我遇到了J/K/APL,同时解决了一些项目的问题,并且至少可以说是好奇.对于我制作的每一个看起来优雅的20行蟒蛇解决方案,都会有十分之一的gobsmacking 20 字符 J解决方案.我一直热衷于学习一些基本的J,并且已经做了一些尝试来学习词汇,但是发现学习曲线非常陡峭.
对于那些熟悉这些语言的人,你会建议花一些时间学习一门(我特别想到J)吗?为了满足我的好奇心而不是为了职业发展或某些这样的事情,我会这么做.
如果您愿意,可以考虑一些个人情况:
熟悉这些语言的人的任何建议都将非常感激.
我正在努力学习APL(Kona),我正在寻找示例项目,这样我就可以了解经验丰富的APL如何组织他/她的代码.
任何开源项目都会有所帮助,但非财务或任何缺乏繁重数学的东西都会很棒.
我正在用C++编写代码,但我真的很喜欢K/APL的面向数组的风格.
有没有人知道一组好的运算符重载技巧/宏/ ...允许在C++中进行一些K/APL风格的编程?
谢谢!
我一直在阅读维基百科关于K编程语言的文章,这就是我所看到的:
该解释器的小尺寸和该语言的紧凑语法使K应用程序完全适合处理器的1级缓存.
我很好奇.如何将整个程序放在L1缓存中?比方说,CPU有256kb的L1缓存.假设我的程序比这少,并且它需要很少的内存(比如,仅用于调用堆栈等).比如,它不需要任何库(虽然如果程序是用于操作系统,则需要包含kernel32.dll或其他).并不是OS会自动为任何程序分配一些最小内存(好吧,对于可执行代码和堆栈和堆)?
谢谢.
我知道所有3个都是相关的,我已经看到了用J编写的Project Euler中的问题的几个答案,以及一些写的K.我想知道的是,你建议学习哪个,你会建议去哪里关于获取材料学习它?
我试图了解APL,J,K,由于以下原因,这有点令人沮丧:
多数书籍都是关于APL的,但很少有APL的实现,而且我没有奇怪的键盘。
K似乎已被Q取代
J似乎没有
我几乎感觉就像盯着Common Lisp,Guile,Gambit,Chicken,SBCL一样-我真正想要的是看方案评估员的两页内容。
因此,我的问题是:是否有简短的文档(例如,约50页)讨论了APL / J / K的核心,例如:
其评价模型
它的解析模型(因为左/右优先级似乎很重要)
它的语法
谢谢!
我在Project Euler 问题的上下文中使用John Earnest 的 K 实现。
许多问题涉及从无限级数(特别是素数)中获取前 n 项或所有项 <= n。它还可能涉及一次从预先存在的列表中取出项目,直到满足条件为止。
在 Python 中,一种方法是依赖迭代器协议:您可以从迭代器中取出直到它完成,或者在满足某些条件时提前中断(假设您已经取出了 n 项,或者您取出的最后一项满足了某个条件)健康)状况)。
K(或其他 APL)中用于实现类似目标的典型模式是什么 - 即,从列表或生成器中获取直到满足条件,而不评估或处理整个列表?我是否必须依赖以下技术,也许使用某种内部状态f?是否不鼓励这种方法,如果是这样,为什么?
f/x / fixed point
n f/x / apply f n times
p f/x / do or while loop, with p a predicate function (stops when 0)
Run Code Online (Sandbox Code Playgroud)
编辑 2018-10-14:此处有关 APL 中延迟迭代的一些有趣说明。
我有这个功能 f
f:{{z+x*y}[x]/[y]}
Run Code Online (Sandbox Code Playgroud)
我可以在f没有第三个参数的情况下调用,但是我得到了,但是如果{z+x*y}没有第三个参数,内部能够完成吗?
aj[`time`sym;trade;quote] 正在使用先前的报价值加入每笔交易。
我想做同样的联接,但是引用的下一个值而不是上一个。
我该如何实现?