为了学习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
答案 0 :(得分:1)
您可以使用: 3
define动词。
f =: 3 :'=&0+/(=&0)(2+i.(-&2)y)|y'
f 5
1
f 13
1
f 10
0
使用: 3
时,y
始终引用动词的右手参数。
如果要定义二元动词,请使用: 4
和x
作为左参数。
顺便说一下,您可以在任何地方设置变量的值:
=&0+/(=&0)(2+i.(-&2)y)|y=.5
1
=&0+/(=&0)(2+i.(-&2)y)|y=.10
0
答案 1 :(得分:1)
您可能会发现J Wiki上的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 + 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