因为我是J的初学者,所以我决定用这种语言解决一个简单的任务,特别是实现BubbleSort算法。我知道在函数语言中解决这类问题不是惯用的方法,因为在命令式语言(如C)中使用数组元素转置自然解决了问题,而不是在声明性语言中构造修改后的列表。然而,这就是我写的代码:
(((<./@(2&{.)), $:@((>./@(2&{.)),2&}.)) ^: (1<#)) ^: #
陈述的结构如下:
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ¬âââ¬ââ
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ¬âââ¬âââââââââ^:â#â
âââââââââââââââââââââââ¬ââ¬âââââââââââââââââââââââââââââââââââââââââ^:ââââ¬ââ¬ââââ â â
âââââââââââ¬ââ¬ââââââââââ,âââââ¬ââ¬âââââââââââââââââââââââââââââââââââ ââ1â<â#âââ â â
ââââââââ¬âââ@ââââ¬ââ¬âââââ ââ$:â@ââââââââââââââââââââââ¬ââ¬ââââââââââââ ââââ´ââ´ââââ â â
âââââ<.â/ââ ââ2â&â{.âââ ââ â ââââââââââ¬ââ¬ââââââââââ,ââââ¬ââ¬âââââââ â ââ â â
ââââââââ´âââ ââââ´ââ´âââââ ââ â âââââââ¬âââ@ââââ¬ââ¬âââââ ââ2â&â}.âââââ â ââ â â
âââââââââââ´ââ´ââââââââââ ââ â ââââ>.â/ââ ââ2â&â{.âââ ââââ´ââ´âââââââ â ââ â â
âââ â ââ â âââââââ´âââ ââââ´ââ´âââââ â ââââ â ââ â â
âââ â ââ â ââââââââââ´ââ´ââââââââââ â ââââ â ââ â â
âââ â ââ â ââââââââââââââââââââââ´ââ´ââââââââââââ â ââ â â
âââ â âââââ´ââ´âââââââââââââââââââââââââââââââââââ â ââ â â
âââââââââââââââââââââââ´ââ´âââââââââââââââââââââââââââââââââââââââââ â ââ â â
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ´âââ´âââââââââ â â
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ´âââ´ââ
让我们将其应用于数组:
(((<./@(2&{.)), $:@((>./@(2&{.)),2&}.)) ^: (1<#)) ^: # 5 3 8 7 2
2 3 5 7 8
让我困惑的是
$:
指最外面括号内的语句。
Help
说:
美元:
表示最长的动词
包含它。
The other book
(约300 kib)说:
3+4
7
5*20
100
符号如+和*表示
加
和
时代
在上面的短语中称为
动词和表示函数。你可以
在j短语中有多个动词,
在这种情况下,它的构造就像
简单英语句子
阅读
从左到右
,那就是
4+6%2
方法
4
加在后面的内容上,即
6
除以
2
.
让我们重写我的代码片段,去掉最外层
()
S:
((<./@(2&{.)), $:@((>./@(2&{.)),2&}.)) ^: (1<#) ^: # 5 3 8 7 2
2 3 5 7 8
重复使用是相同的。我无法解释为什么这会起作用,为什么只有
((<./@(2&{.)), $:@((>./@(2&{.)),2&}.)) ^: (1<#)
被认为是最长的动词
美元:
但不是整个表达
((<./@(2&{.)), $:@((>./@(2&{.)),2&}.)) ^: (1<#) ^: #
而不仅仅是
(<./@(2&{.)), $:@((>./@(2&{.)),2&}.)
因为如果
(</@(2&.),$:@(>/@(2&.)),2&.))^:(1<)
是一个动词,它还应该在与
#
也就是说,人们可以把整个句子(第一个片段)当作动词。可能动词长度受一个连词的限制。
看下面的代码(
from here
):
factorial =: (* factorial@<:) ^: (1&<)
factorial 4
24
factorial
在表达式中指的是整个函数,即。
(* factorial@<:) ^: (1&<)
.
在这个例子中,我使用了一个函数名,而不是
美元:
:
bubblesort =: (((<./@(2&{.)), bubblesort@((>./@(2&{.)),2&}.)) ^: (1<#)) ^: #
bubblesort 5 3 8 7 2
2 3 5 7 8
我期待
bubblesort
引用整个函数,但对我来说似乎不正确,因为结果是正确的。
另外,如果您有其他实现,我希望看到它们,甚至稍微重构一下。
谢谢。