问题标签 [j]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
function - 你把这个函数式语言特性叫做什么?
好吧,够尴尬的,我发布了我需要解释的代码。具体来说,它首先将绝对值和减法链接在一起,然后进行排序,同时根本不必提及参数和参数,因为存在可以连接这些函数的“副词”“动词”
什么(非 APL 类型)语言支持这种无参数函数组合(我有一个模糊的想法,它与 monad/dyad 和 rank 的概念密切相关,但很难得到一个特别容易理解的图片只是来自阅读维基百科),我怎么称呼这个概念?
j - J @ 没有按预期工作
我刚开始尝试学习 J 语言,但对以下内容感到困惑:
在 @ 的文档中说:“xu@vy ↔ uxv y”
我想我只是把一个词性误认为是另一个词性,但无法弄清楚
另外,我怎么知道一个名字是什么类型的演讲?
operators - 在哪里可以找到 J 中所有运算符的列表
我正在尝试学习 J,我遇到的一个大问题是我不知道所有预定义的运算符是什么或在哪里可以找到它们。我花了太长时间才弄清楚 | 既是余数函数(当它是二元函数时),但当它使用一元函数时,它会获得绝对值或幅度。有谁知道在哪里可以找到 J 默认定义的所有运算符的列表?
functional-programming - 为什么这个 J 函数没有运行?
我正在尝试学习 J,而我正在使用的书说这是定义一元函数的正确方法
所以我按照这种格式编写了折叠代码。你能告诉我为什么当我尝试用输入调用它时会抛出语法错误但是如果我只是调用 p 它返回 3
tacit-programming - 学习 J/K/APL
我知道所有 3 个都是相关的,并且我已经看到了很多用 J 编写的Project Euler问题的答案,还有一些书面的 K。我想知道的是,你建议学习哪个,你建议去哪里关于拿到材料来学习呢?
refactoring - 如何在 J 中重构它?
我对 Project Euler #1 的新手解决方案
我知道这可以重构,并转换成一个函数,我不知道该怎么做,我必须阅读所有的实验室来学习它。
refactoring - 如何在 J 中重构它?
这是 Project Euler #1 解决方案的另一种方法:
如何重构它?
j - 阅读 J 代码的最佳策略
我已经使用 J 几个月了,我发现阅读不熟悉的代码(例如,我不是自己编写的)是该语言最具挑战性的方面之一,尤其是当它处于默认状态时。一段时间后,我想出了这个策略:
1)将代码段复制到word文档中
2)从(1)中取出每个运算符并将其放在单独的行上,以便垂直读取
3) 用词汇页面中的语言描述替换每个运算符
4)从J语法粗略翻译成英语语法
5) 使用翻译来识别概念上相关的组件并用换行符分隔它们
6)用简单的英语散文描述(5)中的每个组件应该做什么
7) 根据 (6) 写出整个程序应该做什么的描述
8) 解释为什么(1)中的代码可以说代表(7)中的设计概念。
虽然我从这个过程中学到了很多东西,但我发现它相当费力和耗时——尤其是如果有人使用我以前从未遇到过的概念来设计他们的程序。所以我想知道:J 社区中的其他人是否有最喜欢的方式来找出晦涩的代码?如果是这样,这些方法的优点和缺点是什么?
编辑:
我需要分解的代码示例如下:
我自己写了这个,所以我碰巧知道它需要一个数字输入,将其重新解释为三元数组,并将结果解释为以 base-2 表示的数字,最多有一个重复。(例如,binconv 5 = (3^1)+2*(3^0) -> 1 2 -> (2^1)+2*(2^0) = 4。)但是如果我偶然发现它没有任何先前的历史或文档,弄清楚这就是它所做的事情将是一项不平凡的工作。
algorithm - J:冒泡排序默认实现中的自引用
由于我是 J 的初学者,我决定使用这种语言解决一个简单的任务,特别是实现冒泡排序算法。我知道在函数式语言中解决此类问题并不是惯用的,因为在 C 等命令式语言中使用数组元素转置自然地解决了它,而不是在声明性语言中构造修改后的列表。然而,这是我写的代码:
这是语句的结构:
让我们将其应用于数组:
让我感到困惑的是$:
指最外面的括号内的陈述。帮助说:
$:
表示包含它的最长动词。
另一本书(~300 KiB)说:
上述短语中加号和 时间的+ 和 * 等符号称为动词,表示功能。J 短语中可能有多个动词,在这种情况下,它就像简单英语中的句子一样,从左到右阅读,即 添加到后面的任何内容,
4+6%2
即除以。4
6
2
让我们重写我的代码片段,省略最外层()
:
结果是一样的。我无法解释自己为什么这样有效,为什么 only((<./@(2&{.)), $:@((>./@(2&{.)),2&}.)) ^: (1<#)
被视为最长的动词$:
而不是整个表达式((<./@(2&{.)), $:@((>./@(2&{.)),2&}.)) ^: (1<#) ^: #
,而不仅仅是(<./@(2&{.)), $:@((>./@(2&{.)),2&}.)
,因为如果((<./@(2&{.)), $:@((>./@(2&{.)),2&}.)) ^: (1<#)
是动词,它还应该在与 连词后形成另一个动词#
,即一个人可能会对待整个句子(第一个片段)作为动词。一个连词限制的动词长度可能有一些限制。
看下面的代码(从这里):
factorial
within 表达式是指整个函数,即(* factorial@<:) ^: (1&<)
.
在此示例之后,我使用了函数名称而不是$:
:
我希望bubblesort
引用整个函数,但对我来说似乎并不正确,因为结果是正确的。
如果您有其他实现,我还想看看其他实现,甚至稍微重构。
谢谢。