gpt4 book ai didi

function - J、创建函数

转载 作者:行者123 更新时间:2023-12-02 21:54:42 25 4
gpt4 key购买 nike

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

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

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

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

这将返回 0。

所以我的问题是:如何从中创建一个函数?如何指定参数?

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

这当然行不通。但是我怎样才能在 J 中创建这个函数呢?

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

最佳答案

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

   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 程序员经常使用默认形式。在默认形式下,没有脚本,并且参数始终是隐含的,而不是指定的。 (如果更舒服的话,以显式形式工作是没有问题的。)之所以称为“显式”,是因为在这种形式中,参数是明确指示的。

关于function - J、创建函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4239990/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com