2017-07-04 53 views
3

我試圖瞭解J中的構成,在努力混合和匹配不同的階段之後。我希望能幫助在同一個句子中切換monadic和dyadic之間的短語。在J句子中從二進制解釋切換到一元解釋

我剛製成以J簡單骰子輥,其將作爲一個例子:

d=.1+[:?[#] 
    4 d 6 
2 3 1 1 
    8 d 12 
10 2 11 11 5 11 1 10 

這是一個鏈:「d是一加的Y X出現的(封端的)卷」

但是如果我想使用>:來增加(並跳過上限[:),以便它在第一個分支之後「切換」爲一次解釋? 它會顯示爲:「d是y的x次出現的遞增卷」。

像這樣的東西不起作用,即使它看起來對我來說有關於股權結構:

d=.>:&?[#] 
    d 
>:&? ([ # ]) 

(如果這種做法是對糧食的J和我應該堅持上限叉,這也是有用的信息。)

回答

4

我們來看一個二元分叉a(c d f h g)b其中c,d,f,g和h是動詞,a和b是參數,其計算公式如下:(a c b) d (a f b) h (a g b)參數按照二進制方式應用於動詞在奇怪的位置(或尖齒c,f和g) - 並且這些結果是從左至右進入偶數齒d和h。另外一個分支可以是(v v v)或(n v v)的形式,其中v代表動詞,n代表名詞。在(n v v)的情況下,您只需將n的值作爲中間齒的左側參數。

如果你看一下你原來的d=.1+[:?[#]定義您可能會注意到它簡化爲五個齒(1 + [: ? #)其中[ # ]可以通過#被替換,因爲它是一個二元叉子叉二元(見上面的定義)。

[:的(CAP)動詞沒有返回值到的?左邊參數,這意味着monadically上的a # b結果?行爲並且這成爲正確的參數+其具有1一個左參數。

因此,在對如何擺脫[:和使用>:代替1 + ...

的問題,你也可以寫([: f g)[email protected]:g擺脫帽,這意味着([: ? #)成爲[email protected]:#,現在的既然你想這個結果送入>:你能做到這一點有兩種方法:

d1=.>:@:[email protected]:# 
    d2=. [: >: [email protected]:# 
    4 d1 6 
6 6 1 5 
    4 d2 6 
2 3 4 5 
    8 d1 12 
7 6 6 4 6 9 8 7 
    8 d2 12 
2 10 10 9 8 12 4 3 

希望這有助於,它是關於叉如何評估一個好的根本問題。您最好選擇使用([: f g)還是[email protected]:g組合形式。

+0

如果我理解正確,我完全誤解了分支評估,但運氣正確的答案,因爲1和[:忽略了給他們的論據。 :-) – dukereg

+0

我不能評論你對fork的理解,但你是正確的[:和任何名詞(在你的示例1中)忽略(nvv)fork中的參數 – bob

4

總結動詞的主簡單圖案以J混合:

  (f @: g) y = f (g y)    NB. (1) monadic "at" 
     x (f @: g) y = f (x g y)   NB. (2) dyadic "at" 
     x (f &: g) y = (g x) f (g y)  NB. (3) "appose" 
      (f g h) y = (f y) g (h y)  NB. (4) monadic fork 
     x (f g h) y = (x f y) g (x h y)  NB. (5) dyadic fork 
      (f g) y =  y f (g y)  NB. (6) monadic hook 
      x (f g) y =  x f (g y)  NB. (7) dyadic hook 

那些的一個很好的評論是here (compositions)here (trains)

通常動詞有很多種可能的形式。更復雜的是,你可以用不同的方式混合很多原語來達到相同的結果。

經驗,風格,performance和其他這樣的因素影響你將結合上述形式的動詞的方式。

在這種特殊情況下,我會用@ bob的d1,因爲我覺得它更清晰閱讀:increase the roll of x copies of y

>: @ ? @ $ 

出於同樣的原因,我與$更換#。當我在這種情況下看到#時,我自動閱讀「元素數量」,但也許這只是我。

+0

當我自動讀取「生氣的臉」時看看>:@但是否則我認爲我的大腦可以更容易地處理構圖。 – dukereg