【问题标题】:J, creating a functionJ、创建函数
【发布时间】:2011-05-13 12:05:57
【问题描述】:

我刚开始学习 J,并尝试创建一个检查数字是否为素数的函数。

<./<./13|*/~(2}.i.)13

这会检查 13 是否为素数并返回 1。

<./<./10|*/~(2}.i.)10

这将返回 0。

所以我的问题是:我如何利用这个来创建一个函数?如何指定参数?

prime(x) =: <./<./x|*/~(2}.i.)x

这当然行不通。但是如何在 J 中创建这个函数呢?

PS。我知道该功能不适用于 2,我稍后会处理:D

【问题讨论】:

    标签: function numbers primes j


    【解决方案1】:

    为了用命名参数替换这些句子中的特定值,您可以使用脚本,如下所示:

       prime=: verb :'<./<./y|*/~(2}.i.)y'
       prime 13
    1
       prime 10
    0
    

    (这里“动词”这个词只有3个。它作为冒号的左边参数,而脚本体是冒号的右边参数。但是你可以暂时忽略这个细节,把它当作一个模式'动词 :' 在引用的脚本正文之前。)

    您会注意到我使用 y 而不是 x 作为参数名称。在显式 J 形式中,左侧参数是 x(当有一个时),右侧参数是 y。

    在 J 中,动词接收形状不定的数组是很自然的,但如果给定除标量之外的任何内容,上面定义的数组就会出错。以下是解决此问题的方法:

       prime=: (verb :'<./<./y|*/~(2}.i.)y')"0
       prime 10 11 12 13
    0 1 0 1
    

    作为文体问题,

       prime=: (verb :'<./ , y|*/~(2}.i.)y')"0
    

    我想提一下,虽然这样的程序非常适合探索语言,但判断一个数字是否为素数是由 J 初级处理的。通常会使用该符号 p: 。如果需要一个指定的名称,并选择明确的形式,这是一个典型的定义:

       prime=: verb :'1 p: y'
    

    和以前一样,'y' 将被解释为命名动词(“prime”)的右参数的值。

    总结:要指定参数,而不是特定值,使用显式形式。这涉及一个脚本,即文本。在显式动词中,将“x”和“y”分别写为左右参数。如果你只使用一个参数,它是'y'。

    J 程序员通常使用默认形式来代替。在默认形式中,没有脚本,并且参数总是隐含的,而不是指定的。 (在更舒适的情况下,以显式形式工作没有问题。)之所以称为“显式”,是因为在该形式中,参数是显式指示的。

    【讨论】:

    • 谢谢!这很有帮助!
    猜你喜欢
    • 2014-08-01
    • 1970-01-01
    • 2014-11-24
    • 1970-01-01
    • 2015-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多