5

JI の初心者として、暗黙のプログラムに直面することがよくあります。暗黙のプログラムは、より馴染みのある明示的な形式と比べてかなりビザンチンに見えます。

解釈が難しいからといって、暗黙の形が正しくない、または間違っているとは限りません。多くの場合、暗黙の形式は明示的な形式よりもかなり短いため、一度にすべてを視覚的に確認する方が簡単です。

専門家への質問: これらの暗黙の形式は、構造のより良い感覚を伝え、潜在的な計算メカニズムを抽出する可能性がありますか? 他にメリットはありますか?

答えが「はい」であり、いくつかの重要な例に当てはまることを願っています...

4

2 に答える 2

7

暗黙のプログラミングは通常、より高速で効率的です。なぜなら、J に自分のやりたいことを正確に伝えることができるからです。しかし、暗黙のプログラミングをこよなく愛する者として、暗黙のプログラミングは J のやり方で物事を考えるように促すとも言えます。

結末を台無しにしてあなたの質問に答えるために: はい、暗黙のプログラミングは構造に関する情報を伝えることができますし、実際に伝えています。技術的には、何よりも意味を強調しますが、遭遇する自明ではない式 (@: & &. ^:いくつか例を挙げると) で目立つ特徴を持つ演算子の多くは、非常に構造に関連した意味を持っています。

暗黙のコードを書くことの正当性を示す標準的な例は、剰余累乗のための特別なコードであり、同様のショートカットが他にもたくさんあるという保証があります。

   ts =: 6!:2, 7!:2@]  NB. time and space
   100 ts '2 (1e6&| @ ^) 8888x'
2.3356e_5 16640
   100 ts '1e6 | 2 ^ 8888x'
0.00787232 8.496e6

もう 1 つの重要な点は、J が明示的な定義を確認すると、適用するたびにそれを解析して評価する必要があるということです。

   NB. use rank 0 to apply the verb a large number of times
   100 ts 'i (4 : ''x + y + x * y'')"0 i=.i.100 100'  NB. naive
0.0136254 404096
   100 ts 'i (+ + *)"0 i=.i.100 100'                  NB. tacit
0.00271868 265728
   NB. J is spending the time difference reinterpreting the definition each time
   100 ts 'i (4 : ''x (+ + *) y'')"0 i=.i.100 100'
0.0136336 273024

しかし、これらの理由はどちらも、 J が問題を解決する非常に独特なスタイルを持っているという考えには二の足を踏んでいます。いいえ、あります^:。ループはなく、ランクがあります。同様に、ケンは、微積分では f+g が関数の点ごとの和であるという事実に美しさを見出しました。実際、f+g は (f+g)(x) = f(x) + g( x)—そして、J はすでに点ごとの配列の加算が得意だったのに、なぜそこでやめたのでしょうか?

Haskell のような言語が、高階関数を端から端まで「手動で」同期するのではなく、それらを組み合わせることの喜びを味わうように、J もそうです。意味的に、次の例を見てください。

  • h =: 3 : '(f y) + g y'hは、その引数 を取得しy、それをfおよびgに接続し、結果を合計に注ぎ込む関数です。
  • h =: f + ghは関数fとの合計ですg
  • (A < B) +. (A = B)– 「A が B より小さいか、A が B と等しい。」
  • A (< +. =) B– 「A は B 以下です。」

それははるかに代数的です。そして、これまでは電車についてしか話してこなかった。^:やのようなツールの便利さについては、多くのことが言えます&.。ただし、教訓はかなり明確です。J は、関数を代数的に簡単に説明できるようにしたいと考えています。すべてのアクションを3 :''orでラップする必要がある場合、または4 :''さらに悪いことに、別の行に名前を付けなければならない場合は、興味深い形で ( /or^:や またはを介し​​て;.) 適用するたびに、おそらく J から非常に離れてしまうでしょう。

確かに、式が複雑になるにつれて、これほど洗練された例を見つけるのが難しくなることは認めます。暗黙のスタイルには慣れが必要です。語彙は(第二の天性ではないにしても)親しみのあるものでなければなりません。これは、どの言語でも発生する可能性があります。

于 2015-04-14T06:36:44.873 に答える