标签: j

APL与A对J与K对比?

数组语言环境虽然令人着迷,却令人困惑.是否有理由选择J或K或APL或A中的一个?这些选项似乎都不是开源的 - 是否有开源版本?我很想扩大我的想法,但我仍然感到困惑.

j apl k

74
推荐指数
3
解决办法
1万
查看次数

有人会推荐学习J/K/APL吗?

几个月前我遇到了J/K/APL,同时解决了一些项目的问题,并且至少可以说是好奇.对于我制作的每一个看起来优雅的20行蟒蛇解决方案,都会有十分之一的gobsmacking 20 字符 J解决方案.我一直热衷于学习一些基本的J,并且已经做了一些尝试来学习词汇,但是发现学习曲线非常陡峭.

对于那些熟悉这些语言的人,你会建议花一些时间学习一门(我特别想到J)吗?为了满足我的好奇心而不是为了职业发展或某些这样的事情,我会这么做.

如果您愿意,可以考虑一些个人情况:

  • 我喜欢数学,每天都在我的工作中使用它(作为初创公司的数学家)但说实话我并不觉得我使用的工具(比如python + NumPy)感觉有限,所以我不能用这个借口.
  • 我并不特别渴望在金融行业工作,这似乎至少是K用户的主要呼叫港口.另外,我应该将C#作为下一种语言学习,因为它是我工作的主要语言.实际上,J几乎绝对不应该是我学习的下一种语言.
  • 我对MATLAB相当熟悉,因此使用基于数组的编程语言不会构成巨大的范式转换.

熟悉这些语言的人的任何建议都将非常感激.

programming-languages j apl k

44
推荐指数
10
解决办法
1万
查看次数

是否通过主流函数式语言库来模拟J风格的副词,forks等?

通过动词,副词,叉子等编写J风格的超级浓缩默契编程,是否曾经通过图书馆尝试主流功能语言?

如果是这样,结果有多成功?

如果没有,是否有技术问题使这不可能,或者它是否值得做?

我特别感兴趣的是像forks这样的结构似乎与函数式编程中的基本概念没有直接对应.

f# haskell functional-programming j tacit-programming

24
推荐指数
2
解决办法
1321
查看次数

使用J编程语言编写大型项目

泄露

这是一个"普遍"的问题,也许没有具体的答案,但它并不打算作为一场火焰战争.在开始我的项目之前,我真的想要一些信息.

我必须实现一个特别的项目,它将真正受益于J提供的数据结构和抽象.这是一个大型项目,旨在作为大型(软实时)Web应用程序的核心组件.所以表现非常重要.

我一直试图在大型商业或开源项目中找到有关J的使用的一些信息,但我无法找到任何有关我的决定继续前进的信息.我有:

  • 搜索了Google趋势,但收到了以下回复:"您的条款 - j编程语言 - 没有足够的搜索量来显示图表."
  • 搜索免费(代码),并没有找到使用J的单个项目
  • 在Sourceforge上搜索,没有找到使用J的单个项目
  • 搜索了Lambda the Ultimate,并且只发现了以下倾向于引用APL的讨论
  • 通常在Google和Bing上进行搜索,但未能找到使用J的部署中的大型项目的任何示例

我在为项目使用J时会犯一个错误吗?它似乎拥有我想要的一切 - 特别是在数据结构,抽象和简洁方面.当然,我可以花时间在F#,C#或C++中模拟所有这些属性,但J已经拥有它们,所以...

有人可以告诉我在重要项目中使用J(或任何晦涩的语言)的一些缺点吗?它的表现不够好吗?它没有图书馆吗?还有什么我应该知道的吗?

在此先感谢您的回复.

performance functional-programming j

22
推荐指数
2
解决办法
8792
查看次数

如何过滤J中的列表?

我目前正在学习迷人的J编程语言,但有一点我无法弄清楚如何过滤列表.

假设我有任意列表3 2 2 7 7 2 9,我想删除2s,但保持其他一切不变,即我的结果将是3 7 7 9.我怎么做到这一点?

j tacit-programming

19
推荐指数
3
解决办法
1557
查看次数

J/K/APL如何根据共同范例进行分类?

我刚刚开始学习J,这非常有趣,但我想知道它是什么样的语言,与常见的范例和分类有关.例如,您可以说F#是强类型的,主要是功能性的(它支持OO和过程编程,但它被认为是"功能")语言属于ML族.然而,对于J,我找不到很多关于如何"按常规"对其进行分类,或者在Stackoverflow上找到任何确认它是函数式编程语言的东西.维基百科称它"是一种非常简洁的数组编程语言","支持函数级编程","不是冯·诺依曼编程语言",其中没有一种更有用.

我有一些问题:

  1. J/K/APL属于哪种主要范式(程序性,OO,功能性,逻辑性)?如果他们的范例只是"阵列编程",那么这种范式是什么样的,或者最相似的呢?

  2. 什么知名的编程语言是J/K/APL最相似的?例如,我猜他们就像Lisp,因为它们在数组(列表)上运行,并且具有最小的,没有逗号语法.

我只是想根据我已经知道的东西将这些语言分类.谢谢.

language-agnostic paradigms haskell functional-programming j

19
推荐指数
2
解决办法
1448
查看次数

J中的术语"monadic"是否与Haskell的使用有关?

(对不起,我很愚蠢,没有受过教育,所以这可能是一个荒谬的问题.)

我刚开始看J,他们使用术语"monadic"和"dyadic"来表示(对我来说)是一元和二元运算符.为什么要这样做,它与我听到的那个地方(Haskell)有什么关系呢?我的猜测是他们是无关的同音异义词,但我不确定.

monads haskell terminology j

16
推荐指数
4
解决办法
1078
查看次数

typedef A(*AF)()是什么意思?

我的主要编程语言最近是开源的.为了改进它,我正在研究用C语言编写的源代码.

但是,自从我读过或写过C以来,这已经是一段很长的时间了,而我当时并不擅长.编写这个特定代码库的方式是......特殊的(许多APL解释器,其中的J,其源代码以高级"APL样式"编写,即使用低级语言编写;非常简洁,冗余避免,重大的宏观用途等)

目前,我正在尝试理解它采用的基本数据结构.最基本的是typedefA("A"代表" 数组 "):

typedef struct {I k,flag,m,t,c,n,r,s[1];}* A;
Run Code Online (Sandbox Code Playgroud)

我明白很好.但我正在努力绕过AF两行之后:

typedef A (*AF)();
Run Code Online (Sandbox Code Playgroud)

这个语法是什么意思?特别是,当事情后来被宣布为"AF型"时,它意味着什么?一个是AF简单的指针A

我的直接目标是解释包含类型V(对于" 动词 ")的内存转储,其前两个成员是AFs:

typedef struct {AF f1,f2;A f,g,h;I flag,mr,lr,rr,fdep;C id;} V;
Run Code Online (Sandbox Code Playgroud)

但是我的总体目标比这更大,所以请详细说明AF定义中使用的语法.

c j

13
推荐指数
3
解决办法
2039
查看次数

阅读J代码的最佳策略

我已经使用J几个月了,我发现阅读不熟悉的代码(例如我自己没有写的代码)是该语言最具挑战性的方面之一,特别是当它处于默认状态时.过了一会儿,我提出了这个策略:

1)将代码段复制到word文档中

2)从(1)中取出每个操作员并将其放在单独的一行上,使其垂直读取

3)用词汇表页面中的口头描述替换每个操作符

4)从J语法到英语语法的粗略翻译

5)使用翻译来识别与概念相关的组件,并使用换行符分隔它们

6)用普通的英文散文写出(5)中每个组成部分应该做的描述

7)基于(6)写出整个程序应该做什么的描述

8)写出为什么可以说(1)中的代码代表(7)中的设计概念的解释.

虽然我从这个过程中学到了很多东西,但我发现它相当艰巨和耗时 - 特别是如果有人使用我以前从未遇到的概念设计他们的程序.所以我想知道:J社区中的其他人是否有最喜欢的方法来找出晦涩难懂的代码?如果是这样,这些方法的优点和缺点是什么?

编辑:

我需要分解的代码类型的示例如下:

binconv =: +/@ ((|.@(2^i.@#@])) * ]) @ ((3&#.)^:_1)
Run Code Online (Sandbox Code Playgroud)

我自己写了这个,所以我碰巧知道它需要一个数字输入,将它重新解释为一个三元数组,并将结果解释为base-2中一个数字的表示,最多只有一个重复.(例如,binconv 5 =(3 ^ 1)+ 2*(3 ^ 0) - > 1 2 - >(2 ^ 1)+ 2*(2 ^ 0)= 4.)但如果我偶然发现它没有任何先前的历史或文件,弄清楚这是它的作用将是一个非常重要的练习.

j tacit-programming

11
推荐指数
2
解决办法
968
查看次数

如何在没有循环的情况下计算APL或J中元素的频率

假设我有两个列表,一个是文本t,一个是字符列表c.我想计算每个字符出现在文本中的次数.

使用以下APL代码可以轻松完成此操作.

+?t?.=c
Run Code Online (Sandbox Code Playgroud)

但它很慢.它取外部产品,然后对每列进行求和.

这是一个O(nm)的算法,其中n和m是大小tc.

当然我可以在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是进行交叉运算的时间.

但是,如果有人提供了大量的文本文件,则仍然优选使用次二次算法.

j apl

10
推荐指数
3
解决办法
1029
查看次数