2010-11-21 12 views
3

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

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

は、このチェック13の場合は素数であると1

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

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

だから私の質問を返します:どのように私はこのうち機能を作るのですか?どのように引数を指定するのですか?

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

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

PS。私は、関数が2のために動作しません、私は後でそれを扱うでしょうね:D

答えて

6

スクリプトを使用することができますという名前のパラメータを使用して、それらの文章で特定の値を交換するためには、次のように:

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

(ここでは '動詞'は単に3です。スクリプト本体はコロンの右側のパラメータですが、コロンの左側のパラメータとして機能しますが、しばらくその詳細を無視してパターンとして扱います

パラメータ名としてyではなくxを使用していることがわかります。明示的なJ形式では、左のパラメータはx(存在する場合)および右のパラメータyです。

動詞が不定形の配列を受け取るのは当然ですが、上記で定義した配列はスカラー以外のものがあればエラーになります。ここではそれを修正する方法があります:文体の問題として

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」は名前の動詞(「プライム」)の右パラメータの値として解釈されます。

要約:引数を指定するには、特定の値の代わりに明示的な形式が使用されます。これにはスクリプト、つまりテキストが関係します。明示的な動詞では、左と右の引数としてそれぞれ 'x'と 'y'を書いてください。引数を1つしか使用しない場合は、 'y'です。

Jプログラマーは、しばしば暗黙の形式を使用します。暗黙の形式では、スクリプトはなく、引数は常に暗黙指定されており、指定されていません。明示的な形式で作業することは問題ありません。明示的に引数が指定されているため、「明示的」と呼ばれています。

+0

ありがとうございます!それはとても役に立ちました! – Labbekak

関連する問題