3

Jを学び始めたばかりで、数が素数かどうかをチェックする関数を作成しようとしました。

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

これは、13が素数であるかどうかをチェックし、1を返します。

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

そして、これは0を返します。

だから私の質問:これから関数を作るにはどうすればいいですか?引数を指定するにはどうすればよいですか?

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

もちろん、これは機能しません。しかし、どうすればJでこの関数を作成できますか?

PS。関数が2で機能しないことはわかっていますが、後で処理します:D

4

1 に答える 1

6

これらの文の特定の値を名前付きパラメーターに置き換えるには、次のようなスクリプトを使用できます。

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

(ここで、単語「動詞」は単に 3 です。これはコロンの左側のパラメーターとして機能し、スクリプト本体はコロンの右側のパラメーターです。ただし、しばらくの間その詳細を無視して、パターン「動詞 :」として扱ってください。スクリプトの引用された本文の前。)

パラメータ名として x ではなく y を使用していることに気付くでしょう。明示的な 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' をそれぞれ左引数と右引数として記述します。引数を 1 つだけ使用する場合は、'y' です。

J プログラマーは、代わりに暗黙の形式を使用することがよくあります。暗黙の形式ではスクリプトはなく、引数は常に暗示され、指定されません。(より快適な場合は、明示的な形式で作業しても問題ありません。) 「明示的な」というのは、その形式では引数が明示的に示されるためです。

于 2010-11-22T11:43:57.290 に答える