2

Jで次の名前を定義したと想像してください。

m =:>:i。2 4 5

これは次のようになります。

1 2 3 4 5
 6 7 8 9 10
11 12 13 14 15
16 17 18 19 20

21 22 23 24 25
26 27 28 29 30
31 32 33 34 35
36 37 38 39 40

このリストのリストの各リストに適用されるランク1の単動詞を作成したいと思います。リスト内の各代替アイテムに2倍(+:)または1()を追加します。>:この動詞を最初の行に適用すると、が得られ2 3 6 5 10ます。

各アイテムと交互になるブール値のリストを取得するのはかなり簡単です。たとえば、0 1 $~{:$ mを与え0 1 0 1 0ます。と思った、ああ!+:`の後にいくつかの式を続けるようなものを使用します>: @.が、それを完全に機能させることはできませんでした。

助言がありますか?

アップデート

以下は機能しているように見えますが、おそらくJプロによってよりエレガントなものにリファクタリングすることができます。

うんち=:モナド定義
    (($ y)$ 0 1 $〜{:$ y)((] + :) `(]> :) @。[)" 0 y
)。
4

3 に答える 3

3

ランク 1 ( /."1) の斜め動詞を使用するので、各リストの連続する要素に順番に適用されます。

動名詞を に渡すと、/.それらが順番に適用され、周期的に拡張されます。

   +:`>: /."1 m 
 2
 3
 6
 5
10

12
 8
16
10
20

22
13
26
15
30

32
18
36
20
40


42
23
46
25
50

52
28
56
30
60

62
33
66
35
70

72
38
76
40
80
于 2010-06-12T05:31:01.240 に答える
1

私は長い時間をかけてそれを見ましたが、なぜ,@議論の形を取り戻すのに役立つのかを知っていると思います。

括弧で囲まれた句の引数の形は、"共役によってランクが変更されたとしても、右側で渡された引数の形です(まあ、それはトレースがそれを呼んだものです、私はそれが副詞だと思いました)。モナディックの場合,、それはラベリングになり、結果はラベリングの副詞に基づいて、ベクトルまたは少なくとも入力よりも低いランクになります。接続詞を外すと、それが起こります-ベクトルを取得します。

だから私が起こっていると私が信じているのは、接続詞がアペンドと呼ばれる,ダイアディックのように振る舞うことです。,追加は、追加するものを追加するものに変更します。それは何も追加していませんが、それはまだ形を持っているので、中間ベクトルを入力の形に戻すことになります。

今、私はおそらく間違っています。しかし$,"0@(+:>:/。) "1>:i。2 4 5-> 2 4 511`これは私の場合を証明したと思いました。

于 2011-09-15T22:06:32.087 に答える
1

(,@(+:`>:/.)"1 a) は機能しますが、((* 2 1 $~ $)@(+ 0 1 $~ $)"1 a) も機能することに注意してください (そして私の簡単なテストでは、大規模な配列で約 20 倍高速です)。

于 2013-01-16T20:23:06.703 に答える