リスト内の各原子に交互に別の動詞を適用する動詞をjの動詞を定義するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/2988579

  •  24-10-2019
  •  | 
  •  

質問

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 Proによってよりエレガントなものにリファクタリングできます。

poop =: monad define
    (($ y) $ 0 1 $~{:$ y) ((]+:)`(]>:) @. [)"0 y
)
役に立ちましたか?

解決

ランク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

他のヒント

私は長い時間を過ごしてそれを見ました、そして私は理由を知っていると信じています ,@ 議論の形を回復するために働きます。

括弧付きのフレーズに対する引数の形状は、ランクが変更されている場合でも、右側の引数の形状です。 " コンジュゲート(まあ、それはトレースがそれを呼んだものであり、私はそれが副詞だと思った)。もしも , モナディックだったので、それはラベルであり、結果はベクター、または少なくともravelへの副詞に基づいて入力よりも低いランクになります。これは、接続詞を取り出した場合に起こることです - ベクトルを取得します。

だから私が起こっていると信じているのは、結合が作っているということです , ダイアディックのように振る舞います , これは付録と呼ばれます。付録は、アプリがあるものに追加するものを変更します。それはまだ形状を持っているだけでなく、入力の形状に中間ベクトルを変えることになります。

今、私はおそらく間違っています。しかし $,"0@(+:>:/。) "1>:i。24 5-> 2 4 5 1 1`は、私のケースが証明されたと思った。

(、@(+: `>:/。)" 1 a)動作しますが、(* 2 1 $〜$)@(+ 0 1 $〜$) "1 a)も機能しています(および私の簡単なテストでは、大きな配列での約20倍高速です)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top