💎J蚀語を極める j蚀語faq

倉数がどのように宣蚀されるかを知り、条件匏ずルヌプの構文を孊び、関数の呌び出し方を孊び、線集する䟋をいく぀か手に入れれば、あなたはコヌダヌだ。 ふざけやがっお Jでは、宣蚀はないし、ルヌプを目にするこずはめったにない。 䟋題からコヌディングするこずに関しおは、私たちの䟋題のほずんどは2、3行のコヌドに過ぎない 歯を食いしばっお、たったく新しいプログラムの曞き方を孊ぶしかないのだ。

https://www.jsoftware.com/help/jforc/foreword.htm#_Toc191734286

PRI:Primer contents

J蚀語はずおも豊かな蚀語だ。䜕幎も勉匷しお䜿っおも、自分は初心者だず思うこずができる。これは、ベヌシックやJavaのような単玔な蚀語が、数ヶ月の勉匷ず䜿甚で゚キスパヌトになれるのずは察照的である。Jプログラマヌの゚キスパヌトになるために必芁な努力は、C++プログラマヌの゚キスパヌトになるために必芁な努力に近い。

https://www.jsoftware.com/help/primer/why_j.htm

「-2」ではなく「_2」なので混乱するかもしれない。心配しないで、すぐに説明するから。

https://www.jsoftware.com/help/primer/experiment.htm

-は垞に動詞である。このため、-が数字のすぐ巊で䜿われる堎合は特別なケヌスがないため、文の評䟡ルヌルが単玔化される。しかし、-が垞に動詞である堎合、負の数を綎るには別の文字、_アンダヌバヌが必芁になる。

https://www.jsoftware.com/help/primer/negative_number.htm

ダむアドずモナド

すべおの動詞には2぀の定矩がある。巊匕数ず右匕数の䞡方を持぀堎合に䜿われるダむアドず、右匕数のみを持぀堎合に䜿われるモナドである。この2぀の定矩は通垞関連しおおり、「-」の定矩が「マむナス」、「吊定」の定矩が「モナド」である。

https://www.jsoftware.com/help/primer/ambivalence.htm

芚えおおこうすべおの動詞はモナドずダむアドの䞡方の定矩を持っおいる。

ボキャブラリヌの5行目の+の行を芋おください。この行の最初の項目には + 掻甚 o Plus. この単語+は動詞で、そのモナドはconjugateず呌ばれ、そのダむアドはplusず呌ばれる。ダむアドは算数で定矩されるプラスである。

https://www.jsoftware.com/help/dictionary/d100.htm

動詞の巊偎に名詞がある堎合、動詞は二単項匏で実行されたす。動詞の巊偎の名詞ず右偎の名詞が、動詞の x 匕数ず y 匕数になりたす。
動詞の巊偎に名詞がない堎合、動詞は単項匏で実行され、動詞の右偎の名詞が y 匕数になりたす。
呌び出しのタむプは呌び出しの䟡 倀ず呌ばれ、モナド型かダむアド型かを衚したす。

https://code.jsoftware.com/wiki/Vocabulary/Verbs#Executing_an_Explicit_Definition:_Private_Namespaces

ランク

名詞のランクは、その軞の数です。原子のランクは 0、リストのランクは 1、衚のランクは 2、5 ぀の軞を持぀配列のランクは 5 です。配列のランクは非垞に重芁で、動詞が配列に察しおどのように䜜甚するかを決定したす。
配列の圢状は、配列の軞ず同じ数の数字を持぀リストである。぀たり、配列の圢状のカりントが配列のランクずなる。

https://www.jsoftware.com/help/primer/rank.htm

Jのパワヌの倚くは、匕数を䞀連の郚分ずしお扱う動詞の胜力にある。動詞はそれぞれの郚分に自らを適甚しお、䞀連の郚分的な結果を䜜り出し、その郚分的な結果を最終的な結果に組み立おたす

https://www.jsoftware.com/help/primer/verb_arguments.htm

動詞にはランクがあり、それがどのように匕数に適甚されるかを決定する。ランクkのモナドは匕数のk個のセルに適甚される。巊のランク kl ず右のランク kr のダむアドは、巊の匕数の kl のセルず右の匕数の kr のセルに適甚されたす。動詞のランクは、動詞の配列ぞの適甚方法を制埡する匷力な道具である。
原始動詞のランクはJ蟞曞の定矩に瀺されおいる。䟋えば、 + の定矩を芋おください。ランク情報は、ヘッダヌの単語の埌にありたす。の堎合、これは 0 0 0 です。モナドのランクは0であり、モナド+が原子に適甚されるこずを瀺す。ダむアド・ランクは、巊の匕数が0アトム、぀たり0セルに適甚されるこずを瀺す、右の匕数が0やはり右の匕数のアトムに適甚されるこずを瀺すである。

https://www.jsoftware.com/help/primer/verb_rank.htm

副詞ず接続詞

副詞は動詞ず䌌おいるが、以䞋の点で異なる
副詞は巊の匕数のみを持぀動詞は䞡矩的で、右の匕数たたは巊ず右の䞡方の匕数を持぀。
副詞は名詞たたは動詞に適甚できる動詞は名詞にのみ適甚される。
副詞は通垞、その結果ずしお動詞を持぀ (動詞は垞に名詞の結果を持぀)
副詞の動詞の結果は、掟生動詞ず呌ばれたす。

原始的な / は副詞です。その結果は新しい動詞です。掟生動詞のモナド栌が䜿甚される堎合、/はinsertず呌ばれたす。掟生動詞のダむアド栌が䜿われる堎合、/はテヌブルず呌ばれる。

https://www.jsoftware.com/help/primer/adverb.htm

接続詞は副詞に䌌おいるが、巊右䞡方の匕数を取る点が異なる。ランク接続詞は以前のセクションで非公匏に玹介した。さらに、摂氏のような動詞の定矩に䜿われる : も接続詞ずしお認識できるようになった。centigradeを定矩する際、:は巊匕数に3、右匕数に0を取る。ここたでは動詞の可胜性もあるが、結果が動詞であるこずが接続詞であるこずを蚌明しおいる。
接続詞の動詞の結果は掟生動詞ず呌ばれる。

https://www.jsoftware.com/help/primer/conjunction.htm

摂氏動詞は接続詞 : で明瀺的に定矩された。明瀺的ずいう甚語は、定矩における動詞の匕数がx.ずy.ずいう名前によっお明瀺的に参照されおいるこずを瀺す。
暗黙の定矩では、匕数には名前がなく、定矩に明瀺的に登堎しない。匕数は定矩の構文芁件によっお暗黙的に参照される。あなたはすでにいく぀かの暗黙の定矩を䜿っおいる。

https://www.jsoftware.com/help/primer/tacit_definition.htm

接続詞「!:
は敎数のスカラヌ巊匕数ず右匕数に適甚され、動詞を生成する。
の堎合は副詞を生成する。これらの動詞は、他の動詞ず同じように振る舞いたす。動詞には名前を割り圓おるこずができ、副詞や接続詞の匕数ずしお䜿甚するこずができたす。これらの動詞が匕数ずしお名前を取る堎合、4!:55 'a';'bc' のように名前を枠で囲み、a ず bc ずいう名前を消す。括匧で囲たれた巊の匕数は省略可胜であるこずを瀺す。

https://www.jsoftware.com/help/dictionary/xmain.htm

J for C Programmers

本曞は、本栌的なアプリケヌションを開発するための蚀語ずしおJを䜿甚するのに十分なJに぀いお説明するが、J蚀語を孊ぶこず以䞊に、プログラミングにおいお「倧きく考える」こず、そしおJでのプログラミングがCでのプログラミングず根本的にどのように異なるかに぀いお曞かれおいる。Cのプログラムはスカラヌ単䞀の数倀や文字を密接に扱い、それらのスカラヌを配列や構造䜓にたずめる堎合でも、配列や構造䜓に察する操䜜はスカラヌに察する操䜜によっお定矩される。 配列の各項目を確実に操䜜するために、配列の各芁玠を蚪れ、その芁玠に察しおスカラヌ挔算を実行するルヌプが䜜られる。
スカラヌ蚀語でコヌドを曞くず、郚隊を䞀人䞀人蚪問しお耳元でささやきながら呜什を䞋す将軍のようになる。 そのようなハリヌに觊れるような将軍のやり方は、勝利ずいう結果を埗るこずができるし、呜什をその人に合わせるこずができるずいう利点もある。 偉倧なロンメルでさえ、時には過劎に芋舞われた。
それずは察照的に、Jプログラマヌは軍隊の前に立ち、軍隊党䜓ぞの呜什をブチ䞊げる将軍である。 すべおの兵士が同じ呜什を受けるが、呜什自䜓には個々の兵士が適切に行動するのに十分な詳现が含たれおいる。 このような将軍は、小隊ず同じくらい簡単に軍団を指揮するこずができ、垞に「党䜓像」を念頭に眮いおいる。
さお、あなたはロンメルではないかもしれないが、珟圹のプログラマヌであり、実甚的なプログラムで配列挔算ずしお衚珟できるものはほずんどないのではないか--行列の乗算ずか、数倀のリストの加算ずか--、たた、仮に幅広いプログラムが可胜だずしおも、サポヌトされる挔算のセットは実甚的ずいうには膚倧すぎるのではないか--ず疑っおいるのではないだろうか。
本曞の前半は、配列操䜜を䜿っお意味のあるプログラムを曞くこずが実際に可胜であるこずを瀺すこずに費やされおいる。 ルヌプのさたざたな䜿われ方を芋お、配列操䜜を䜿っお同じ結果を埗るためにJがどのような機胜を持っおいるかを芋おいくアプロヌチをずりたす。 Jには、数ダヌスの配列凊理プリミティブず、それらのプリミティブを接続しお、実甚的なプログラミングに必芁な配列凊理関数を無限に提䟛するこずを可胜にする、非垞に巧劙に遞択された1ダヌスほどの配管継手が含たれおいるこずがわかるだろう。
より耇雑な配列操䜜の説明の間に、実甚的なプログラミングに必芁な他の事柄、すなわち構造䜓の定矩、入力ず出力、性胜枬定、DLLの呌び出し、モゞュヌル化されたプログラミングが挿入されおいる。 最終的には、Jでif-then-elseやdo-whileを䜿う方法を孊ぶこずになるが、同じ結果を埗るためにもっず゚レガントな方法を孊ぶこずになるだろう。
本曞の最埌の郚分は、関数型プログラミングのためのJ蚀語である暗黙プログラミングのオプション・トピックに費やされおいる。 タシット・プログラミングはアルゎリズムを衚珟する極めお簡朔な方法であり、1ペヌゞのC蚀語から数行のJ蚀語に圧瞮されたプログラムをさらに圧瞮するこずを可胜にするものである。

if文はどうなったのか

プリミティブに組み蟌たれおいる。 ほずんどのルヌプがプリミティブの䞭に隠されおいるように、ほずんどの条件文もプリミティブの䞭に隠されおいたす。 あなたが曞く関数も、組み蟌みの条件匏を含むこずができたす。

文の区切り蚘号は䜕ですか

ありたせん。 ステヌトメントは正確に1行の長さです。

Jのコヌドを芋たこずがある。 他の文字はすべおピリオドかコロンだ。 目の前にシミができた。 こんなの誰が読めるんだ

そのうち慣れるよ。 Jには非垞に倚くのプリミティブがあり、1行に倚くの蚈算を収められるように名前を短くするこずが重芁です。そのため、名前は>のような1文字か、ピリオドやコロンが付加された文字>. ピリオドやコロンは名前の䞀郚に過ぎたせん。 i.のようにピリオド/コロンを付加した1文字もプリミティブに䜿甚されたす。 プリミティブに独自の名前を付けたい堎合は蚱可されおいたすが、スペヌスずタむピングを節玄するために、すぐに短い名前に戻りたくなるでしょう。

宣蚀はどこにあるのか Jでは配列を䜿わないのですか 倉数の型を知るには

そうそう、Jでは配列を䜿っおいる。 どんな倉数でも配列になる。 型ず次元が䜕であるかに぀いおは、あなたが倉数を代入したのでしょう あなたが倉数に入れたもの、数倀、文字列、配列、構造䜓...。 Jが芚えおいるだろう。 プログラム・ロゞックで倉数の珟圚の属性を調べる必芁があれば、Jが教えおくれたす。
プリミティブも、あなたが曞いたプログラムも、すべおのJプログラムは自動的に配列に適甚できる。 入念に考え抜かれたこの方法は、Jの長所のひず぀である。
x + y
ずいう文は、「xずyを足す」ずいう意味であり、xずyが単数であっおも、倚次元配列であっおもそうなる。 個々の数倀を操䜜するために必芁なルヌプ凊理は、プログラムではなく蚀語に組み蟌たれおいる。

Jのコヌドを䞀行芋おみたが、構文もよくわからずぐちゃぐちゃだ。

䟋えば
lifodd =. ]`[@.(2&|@[)
おそらく、巊オペランドが奇数なら巊オペランドを返し、そうでなければ右オペランドを返すプログラムだろう
忍耐。 すべおの文字には意味があり、たずえ` " [ ] { }の文字であっおも、ペアずしおではなく個々に動䜜する。 それらの意味を孊べば、すべおが明らかになるだろう。

1 2 + 3。 䜙分な数字が空間に浮かんでいるのはなぜだろう

1 2は、1ず2の倀を持぀2぀の数倀の1次元配列である。 Jでは配列がよく出おくるので、配列の芁玠の倀以䞊の構文を必芁ずせずに、配列を定矩するためにこの省略蚘法を䜿う。

あるJのコヌドを芋おみたが、そこには倉数がたったくない。 それが䜕を意味するのか

ああ、あなたは暗黙のプログラムに出くわしおしたったのだ。暗黙のプログラムは、倉数を参照するこずなく、蚘号的なパラメヌタヌさえも䜿わずに蚈算を蚘述する。 叀兞的な教育䟋は
平均 =.
これは数倀の配列の平均を求める。 暗黙のプログラムは本曞では高床なトピックずみなし、巻末のセクションで取り䞊げおいる。 そのため、倚くのJプログラマヌはこれを奜んで䜿うが、単玔なJを孊んでからでもよい。
䟋題の䞭で、あなたが代入文だず蚀った=:ず=.を含む行しか芋圓たりたせん。 どうやっおプログラムを曞けばいいのですか
代入文のいく぀かはプログラムです。 Jでは、名前に関数の倀を代入するず関数名になりたす。

プログラムを曞いたら、どうやっお実行するのですか 関数呌び出しのようなものは芋圓たりたせん。

Jでは、関数呌び出しのための特別な構文はありたせん。 マむナス」関数を - y で、「匕き算」関数を x - y で実行するのず同じように、ナヌザヌ定矩関数を呌び出すには、オペランドの前たたは間にその名前を入力したす x DifferenceSquared y たたは FindPrimeGreaterThan 1000。

プログラムはどのようにコンパむルするのですか

コンパむルはしない。 J蚀語はむンタプリタです。 プログラムを入力すればあるいはファむルから読み蟌めば、すぐに䜿えるようになる。 ここにスタヌタヌ・プログラムがある
h =. 動詞 : '''Hello world.''
ず入力し䞉重匕甚笊に泚意、それを
h ''

䞉重匕甚笊は醜い。

腹を立おるのはやめよう。 この本を読めば、䞉重匕甚笊を避ける方法がわかるだろう。 Cの10行をJの4分の1行で眮き換えたこずを思い出し、自分でその方法を孊んでください。

数孊でも䜿われる蚀葉をコンピュヌタ蚀語から奪う 関数は動詞になる

プログラミングの芁玠を説明するために、Jが䜿うのは、もしかしたら恐ろしいかもしれないが、なじみのある語圙、぀たり英文法の語圙である。 名詞、動詞、そういったものを䜿っお話をする。 読曞感想文を曞く必芁はないのでご安心を
この専門甚語の䜿い方は、芋た目ほど奇劙なものではない。 䟋えば、「動詞」はC蚀語の「関数」や「挔算子」に盞圓する。 なぜ「挔算子」ず蚀わないのか この単語は数孊や物理孊でも䜿われ、C蚀語ずはたったく異なる意味を持぀。 Cの'関数'でさえ、真の数孊的関数ではない。
Jでは、䜿い慣れた単語を遞び、たったく新しい意味を䞎えるこずで、䞍正確な甚法を避けおいる。 J蚀語は蚀語なので、遞ばれた語圙は英文法のものである。 しかし、Jの意味さえ芚えれば、文法的な意味は忘れおも構わない。

https://www.jsoftware.com/help/jforc/preliminaries.htm

動詞defineの結果は動詞であり、通垞はその結果を名前に割り圓おお、必芁なずきにその名前で動詞を実行できるようにする。 動詞defineの埌の行から始たり、')'のみを含む次の行の前たでが、動詞のテキストずしお読み蟌たれ、保存されたす)を省くず、倩眰が䞋りたす。 動詞は'コンパむル'されない--最も初歩的な構文チェックを行った埌、テキストは保存され、動詞が実行されたずきに解釈される。
動詞の各行は文ステヌトメントである。 最埌に実行された文の結果が、動詞党䜓の結果ずなるこれは正確には正しくないが、今のずころはこれに近い--詳现は「制埡構造」で明らかになる。
J動詞のオペランドは1぀か2぀しかないので、C蚀語の関数定矩のようにパラメヌタ名のリストを提䟛する必芁はありたせん。 動詞の実行開始時に、プラむベヌト名yは動詞の右オペランドの倀で初期化される。 動詞が二項挔算の堎合、プラむベヌト名xは巊オペランドの倀で初期化される。 倚くのプログラマヌは、これらの倀をより説明的な名前に代入しお動詞を開始したがりたす。

特別な名前に関する泚意

Jでは、動詞などの匕数を衚すためにx、y、u、v、m、nずいう名前を䜿甚したす。 これらの名前を他の目的で䜿甚するこずは避けるべきです。

お願い臎したす