2012-08-16 43 views
1

我想寫主要功能爲學習J. 的目的,到目前爲止,我想出了這一點:如何在J中的函數中使用兩次參數?

=&0+/(=&0)(2+i.(-&2)y)|y 

它的工作不同的是,我應該存儲在y可變數量巨大。

y=.5  
    =&0+/(=&0)(2+i.(-&2)y)|y NB. prime cheker 
1 
    y=.13  
    =&0+/(=&0)(2+i.(-&2)y)|y NB. prime cheker 
1 
    y=.14 
    =&0+/(=&0)(2+i.(-&2)y)|y NB. prime cheker 
0 

我該如何編寫一個函數來處理需要參數的函數?即f 13 - >1

回答

1

你可以只用define一個動詞,使用: 3

f =: 3 :'=&0+/(=&0)(2+i.(-&2)y)|y' 
f 5 
1 
f 13 
1 
f 10 
0 

當使用: 3y總是指動詞的右側參數。

如果要定義二元動詞,請使用: 4x作爲左側參數。

順便說一句,你可以在任何地方設置一個變量的值:

=&0+/(=&0)(2+i.(-&2)y)|y=.5 
    1 
    =&0+/(=&0)(2+i.(-&2)y)|y=.10 
    0 
1

您可能會發現在J維基有用Defining Verbs指南。

正如已經提到的,你可以把你的句子,並使用下面的語法定義爲一個動詞:

isPrime0=: 3 : '=&0+/(=&0)(2+i.(-&2)y)|y' 

但是它可能是更自然的把它寫這樣的:

isPrime1=: 3 : '0 = (+/ 0 = (2 + i. y - 2) | y)' 

您還可以像以下任何一樣定義默認版本(不參考參數):

isPrime2=: 0 = [: +/ 0 = ] |~ 2 + [: i. 2 -~ ] 
isPrime3=: 0 = [: +/ 0 = ] |~ 2 + [email protected]:-&2  NB. replace train with verb composed using conjunctions 
isPrime4=: 0 = [: +/ 0 = ] |~ i.&.(-&2)   NB. use Under to re-add the 2 after Integers 
isPrime5=: 0 [email protected] i.&.(-&2) | ]     NB. check no zero in result 
+0

謝謝!哇,這些叉子{:]真的很棘手! – defhlt 2012-08-16 11:40:11

+0

另一個簡單的默認版本是:'1 {[:/:〜i。 | ]'但適用於整數> 2.例如。 '((1 {[:/:〜i。|])「0#])3 + i.25',給出'3 5 7 11 13 17 19 23' – Eelvex 2012-08-18 14:41:24

相關問題