如何在 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

您可以使用

: 3定义动词。

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

当使用: 3时,y总是指动词的右手参数。

如果要定义二元动词,请使用 : 4x 作为左参数。

顺便说一句,您可以在任何地方设置变量的值:

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

您可能会发现 J Wiki 上的定义动词指南很有用。

如前所述,您可以使用以下语法将句子定义为动词:

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

相关内容

  • 没有找到相关文章

最新更新