1

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

4

2 に答える 2

1

J WikiのDefining Verbs Guide が役に立つかもしれません。

すでに述べたように、次の構文を使用して文を動詞として定義できます。

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 + i.@:-&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 -.@e. i.&.(-&2) | ]                 NB. check no zero in result
于 2012-08-16T10:34:20.577 に答える
1

を使用して動詞を定義するだけ: 3です。

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

を使用する場合: 3y常に動詞の右側の引数を参照します。

二項動詞を定義する場合は、左引数に: 4andを使用します。x

ところで、変数の値はどこにでも設定できます。

   =&0+/(=&0)(2+i.(-&2)y)|y=.5
   1
   =&0+/(=&0)(2+i.(-&2)y)|y=.10
   0
于 2012-08-16T07:44:16.473 に答える