問題タブ [mercury]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
haskell - モナド以外に、純粋関数型言語で状態を処理できる方法は他にあるでしょうか?
そこで、モナド (Haskell で使用) に頭を悩ませ始めました。純粋な関数型言語で IO や状態を (理論的にも現実的にも) 処理できる他の方法に興味があります。たとえば、「効果型付け」を使った「mercury」という論理言語があります。haskell などのプログラムでは、エフェクトタイピングはどのように機能しますか? 他のシステムはどのように機能しますか?
gcc - Mac OSX10.8でのMercuryコンパイルエラー
MacでMercuryをコンパイルする際に問題が発生しました。Mac OS X 10.8を実行していて、Xcode 4.5がインストールされており、コマンドラインツールもインストールされています。
私はこれまでに何をしましたか:
tar.gzファイルをダウンロードして解凍し、./configure
そのフォルダーで実行してから、make PARALLEL=-j2 install
コマンドを使用しました(後で説明し./configure
ます)。
そのステップで、コマンドラインに次のように表示されます。
次に、readmeを読みましたが、他のバージョンのを使用する必要があると書かれていましたGCC
。そこで、これらをインストールしてCommand Line Tools
(GCCが含まれていることがわかったので)、再試行しました。運が悪い、それでも同じ問題。
どんな助けでもいただければ幸いです。
mercury - 決定論的有限オートマトン (DFA) の作成 - Mercury
Mercury でシミュレートされた決定論的有限オートマトン (DFA) を使用したいと考えています。しかし、私はいくつかの場所でうんざりしています。
正式には、DFA は次の特性で記述されます。
- setOfStates S、
- inputAlphabet E <-- 合計記号、
- transitionFunction : S × E --> S,
- a startState s € S,
setOfAcceptableFinalStates F =C S.
DFA は常に開始状態で開始されます。次に、DFA は入力のすべての文字を 1 つずつ読み取ります。現在の入力文字と現在の状態に基づいて、新しい状態が作成されます。これらのトランジションは、transitions 関数で定義されます。DFA が許容可能な最終状態の 1 つにある場合、最後の文字を読み取った後、DFA は入力を受け入れます。そうでない場合、入力は拒否されます。
この図は、0 の数が 3 の複数である文字列を受け入れる DFA を示しています。条件 1 は初期状態であり、唯一許容される状態でもあります。各入力文字は、次の状態に続く対応するアークです。
しなければならないこと
状態を表す型「mystate」。各州には、識別に使用される番号があります。
状態間の可能な遷移を表す型「遷移」。各遷移には、source_state、input_character、および final_state があります。
DFA 全体を表すタイプ「ステートマシン」。このソリューションでは、DFA に次のプロパティが必要です。
- すべての状態のセット、
- 入力アルファベット、
- 可能な遷移のセットとして表される遷移関数、
- 受け入れる最終状態のセット、
- DFA の現在の状態
図に示すように、彼の引数を DFA と統合する述語「init_machine (state machine :: out)」。DFA の現在の状態は、初期状態、つまり 1 に設定されています。DFA の入力アルファベットは、文字 '0' と '1' で構成されています。
ユーザーは、DFA によって制御されるテキストを入力できます。プログラムは、ユーザーが Ctrl-D を入力して EOF をシミュレートするまで続行されます。ユーザーが DFA の入力アルファベットに許可されていない文字を使用すると、エラー メッセージが表示され、プログラムが終了します。(事前に必要)
例
私が持っているもの。
1
2
3 (エラー、finale_state および current_state および input_character)
4たくさん欠けている
5完璧ではない
あなたが私を助けてくれることを願っています
敬具
prolog - Prolog のどのバージョンでも、アキュムレータの高次抽象化をサポートしていますか?
次のような組み込み呼び出しを含めることができる Prolog について疑問に思っていました。
したがって、たとえば、再帰を使用せずにリストを合計するには、次のように記述できます。
このコンストラクトまたは同等のプロローグはありますか? 私は Prolog の初心者であり、明らかな何かが欠けている可能性があることに注意してください。
types - Mercury のような論理プログラミング言語に型はどのような利点をもたらしますか?
Mercury 言語を調べ始めましたが、これは非常に興味深いと思われます。私はロジック プログラミングは初めてですが、Scala と Haskell での関数型プログラミングにはかなりの経験があります。私が考えていることの 1 つは、少なくとも型と同じくらい表現力のある述語が既にあるのに、なぜ論理プログラミングで型が必要なのかということです。
たとえば、次のスニペットで型を使用する利点は何ですか (Mercury チュートリアルから抜粋)。
述語のみを使用して記述する場合と比較して:
このトピックを扱っている紹介資料を自由に参照してください。
編集:おそらく質問の定式化が少し不明確でした。Idris のような依存型型付け言語を調べた後、私は実際に Mercury に注目し始めました。依存型型付けの型で値を使用できるのと同じ方法で、論理プログラムの正確性を検証するためにコンパイル時に述語を使用できるのと同じ方法です。プログラムの評価に長い時間がかかる場合、コンパイル時のパフォーマンス上の理由から型を使用する利点が見られます (ただし、依存型の型付けについて話すときは必ずしもそうではない「実装」よりも型が複雑でない場合のみ)。私の質問は、コンパイル時のパフォーマンス以外に型を使用する利点があるかどうかです。
mercury - Mercury では、関数アプリケーションで状態変数を使用できないのはなぜですか?
状態変数を説明するとき、Mercury のリファレンス マニュアルでは次のように述べて!X
います。私はその推論をよりよく理解したいと思います.状態変数と関数について、組み合わせを無意味にするのは何ですか?
私の混乱の一部は、以下のコードから来ています。ここでは!.X, !:X
、状態変数の形式を使用できますが、形式は使用できません!X
。前者を使用できる場合、後者を使用できないのはなぜですか?
このコードはコンパイルされ、期待どおりに実行されます。
ただし、最初の 2 行を変更するとpick_a_b
、コンパイル エラーが発生します。
rust - Rust の所有権のセマンティクスは、Clean と Mercury に見られる一意性の型付けとどのように関連していますか?
Rust では移動が左辺値に適用され、移動元オブジェクトが使用されないように静的に強制されていることに気付きました。
これらのセマンティクスは、Clean と Mercury に見られる一意性型付けとどのように関連していますか? それらは同じ概念ですか?そうでない場合、それらはどのように異なりますか?