みなさんこんにちは! 私の意見では、最近、APL言語に特化したHabréの
記事が登場しましたが、このかなり単純で論理的な言語を複雑にするほど記述していませんでした。 APLが簡単であることを証明しようとすることにしました! これを行うには、Dyalogインタープリターを使用してAPLで小さなGUIアプリケーションを作成する方法を示します。APL言語自体は数十のプリミティブ(同じ「ツイスト」)で構成されているためです。 並行して、Dyalog APLのプリミティブと開発機能の意味を説明しようとします(多くの写真!)。
だから、APLの「数を推測する」!
機能
数千人! インタープリター言語と同様に、実行可能コードは関数に含まれており、関数は他の関数を呼び出すことができます。 したがって、アプリケーションは、他のすべてを呼び出す一種の「メイン」関数になります。
Dyalog APLには、新しい機能を作成する方法がいくつかあります。 最も簡単な方法は、インタープリターのコマンドライン)EDに関数名を入力し、ENTERを押すことです。 エディタウィンドウが表示され、実際にはコードが開発されています。
最初のステップは、関数ヘッダーを作成することです。 Dyalog APLでは、関数は引数なし(nyladic)、1つの引数(monadic)、2つの引数(dyadic)、または変数(1つまたは2)の引数数(アンビバレンス)を持つことができます。 さらに、関数は結果を返す場合と返さない場合があります。 私たちの場合、「メイン」関数は引数を1つ持ち、結果を返しません。
引数
fNameは、ウィンドウタイトルを含む文字ベクトルです。 Dyalog APLは明示的に型を指定しないため、さまざまなチェックまたは例外処理メカニズムを使用する必要があります。 この例では、それらを使用せず、すべてをユーザーの良心に任せます。
関数ヘッダーはローカル変数も定義します。 この場合、プログラムによって生成された乱数の値を含む変数
numberと、すべての要素を含むフォームの名前空間である変数
Winです。
関数ヘッダーの後に実行可能コードが続きます。 最初に、フォームのパラメーターとその要素を記述する必要があります。
グラフィック要素は、システム関数[] WC(すべてのシステム関数は「)」または「[]」で始まります(これは長方形ですが、近似値を使用します)。 右側の引数は名前空間または名前空間要素、左側は作成する要素のタイプとそのパラメーターです。 フォーム自体、入力フィールド、ボタン、テキストを作成する必要があります。
イベントのタイプはボタンに指定されていることに注意してください
-'Event ' 'Select' 、およびコールバック関数
-checkNum 、クリックされると実行されます。
次に、乱数を生成して変数に入れる必要があります。 APLでは、プリミティブ「?」で示されるモナドの「ロール」関数がこれに役立ちます。 その引数は、生成される値の範囲の制限です。 私たちの場合、これは10です。
実際、ここでは、フォームの作成に必要なほぼすべてのコードが含まれています。 ボタンのコールバック関数を決定し、フォームのイベントをトリガーするための行を追加するだけです。 後者は単純です。フォームの名前空間を使用してシステム関数[] DQを呼び出すと、フォームのすべての要素が関数に接続され、イベントが発生したときに実行されます。
したがって、
WhatNum関数の全文は次のようになります。
関数をワークスペースに保存するには、Escキーを押すか、メニューから[ファイル]-> [終了(および修正)]を選択します。
コールバック関数を編集するには、既知のメソッド-)ED関数名(この場合
-checkNum )を使用できます。 エディター画面が表示されます。 アクションの順序は同じです:見出し、本文。
この関数は入力値を読み取り、「非表示」と照合してヒントを表示する必要があります。 ユーザーが2秒後に数字を推測した場合。 新しいラウンドが始まります。
タイトルを書きましょう:
inpは、ユーザーが入力したテキストを含むローカル変数です。 次に、入力した数値が等しいかどうかのテストを作成する必要があります。 Dyalog APLでは、次の構成を使用できます。If:Else:EndIf。 確認してください:
計算は右から左に進むことを忘れないでください。ただし、括弧内の式が最初に実行されます。 入力した番号が一致する場合、テキストラベルに「Right!」が表示され、2秒後にプログラムは新しい番号を「推測」します。 遅延はシステム関数[] DLによって実装され、その引数は秒単位の遅延量です。
2番目の条件ブランチは次のようになります。
以上です。 変更をEscキーで保存するか、メニューからインタープリターウィンドウに戻ります。
結果を見るには、アプリケーションの「メイン」関数、つまりWhatNumを実行し、引数にフォーム名を一重引用符で渡す必要があります。
入力フィールドに数字を入力し、「応答」ボタンをクリックすると、コールバック機能の結果が表示されます。
次は?
さて、これでアプリケーションコードが機能するようになりました。 今、あなたはそれを保存する必要があります!
Dyalog APLで保存する最も簡単な方法はワークスペースです。 ワークスペースを保存するには、SAVEと入力するだけで、ワークスペースファイル(* .dws)が保存されます。
ちょっとしたトリック。 毎回手動で関数を開始しないようにするには、システム変数[] LXを使用できます。 この変数には、ワークスペースがロードされたときに実行される式が格納されます。 式は一重引用符で記述されますが(内部の引用符は2番目の引用符でエスケープされます)、いくつかの式を1行に結合するために、特別なプリミティブが使用されます(下図の菱形):
ワークスペースの動作が実際のプログラムのように見えるように、インタープリターを終了する式を追加しましたが、これはもちろん開発者の仕事です。 そして、ワークスペースに変更を保存することを忘れないでください!
これで、ワークスペースのファイルをダブルクリックしてコードを実行できます。 ただし、実行可能コードを変更するには、「CTRL + BREAK」キーを押してプログラムの実行を中断する必要があります。 表示されるポップアップウィンドウで、メニューから[終了]を選択するか、単に[Esc]を押します。
これで、上記のツールを使用して機能を編集できます。
それだけです
この記事では、APL言語の「驚異的で神秘的な」世界に幕を開けました。 私は今、彼があまりにも難解で、単なる人間には近づきにくいように思えることを願っています。
そして、はい、私は喜んであなたの質問に答えようとします。