タグ付けされた質問 「logic-programming」

2
純粋に機能的な言語でプロローグインタープリターを実装する方法
純粋に関数型の言語でPrologインタープリターを実装する方法について、擬似コードに関する明確なリファレンスがありますか?私がこれまでに発見したのは、命令型言語のみを扱っているようで、Prolog自体の実装にすぎないか、解釈に使用する具体的なアルゴリズムを提供していません。私は答えにとても感謝しています。

4
Prologで制約充足の問題を解決できますか?
である「パーティー出席」プロローグで解ける問題のタイプ?例えば: ゴボウマルドーンとカルロッタピンクストーンは、アルバスダンブルドアが来たら来ると言いました。アルバス・ダンブルドアとデイジー・ドッデリッジは両方とも、カルロッタ・ピンクストーンが来たら来たと言った。アルバス・ダンブルドア、ゴボウ・マルドーン、カルロッタ・ピンクストーンは全員、エルフリダ・クラッグが来れば来ると言った。Carlotta PinkstoneとDaisy Dodderidgeは、どちらもFalco Aesalonが来たら来ると言っていました。ゴボウ・マルドーン、エルフリダ・クラッグ、ファルコ・アエサロンは、カルロッタ・ピンクストーンとデイジー・ドッデリッジの両方が来たら来ると言った。デイジー・ドッデリッジは、アルバス・ダンブルドアとゴボウ・マルドゥーンの両方が来たら彼女が来ると言った。すべての招待者が出席することを保証するために、誰がパーティーに出席するよう説得する必要がありますか? 私はこれをGNU Prologで表現しようとしました: attend(BM) :- attend(AD). attend(CP) :- attend(AD). attend(AD) :- attend(CP). attend(DD) :- attend(CP). attend(AD) :- attend(EC). attend(BM) :- attend(EC). attend(CP) :- attend(EC). attend(CP) :- attend(FA). attend(DD) :- attend(FA). attend(BM) :- attend(CP),attend(DD). attend(EC) :- attend(CP),attend(DD). attend(FA) :- attend(CP),attend(DD). attend(DD) :- attend(AD),attend(BM). attend(FA). /* try different …

2
PROLOGチューリングを完全にするものは何ですか?
次のようなチューリングマシンをシミュレートするプログラムを作成することで、PROLOGがチューリング完全であることを証明できることを知っています。 turing(Tape0, Tape) :- perform(q0, [], Ls, Tape0, Rs), reverse(Ls, Ls1), append(Ls1, Rs, Tape). perform(qf, Ls, Ls, Rs, Rs) :- !. perform(Q0, Ls0, Ls, Rs0, Rs) :- symbol(Rs0, Sym, RsRest), once(rule(Q0, Sym, Q1, NewSym, Action)), action(Action, Ls0, Ls1, [NewSym|RsRest], Rs1), perform(Q1, Ls1, Ls, Rs1, Rs). symbol([], b, []). symbol([Sym|Rs], Sym, …

1
現代の正規表現の表現力
私は最近、主に単語のグループを特別なプロパティと照合する正規表現の課題を提案するWebサイトについて友人と話し合いました。彼は||||||||、数|が素数であるような文字列に一致する正規表現を探していました。そのような言語は、通常であれば、補題をポンプの翻訳が素数のためにあるという事実与えますので、私はすぐにそれが今まで動作しません彼に言われた十分な大きさ、それが存在するのk ≤ pがあるようP + N kは、すべての主要ですN ≥ - 1、よく、これは全くケースしにくい(素数の配分、そのような未知の自明とプロパティを破砕、...)pppk≤pk≤pk \leq pp+nkp+nkp + nkn≥−1n≥−1n \geq -1 しかし、誰かが解決策に付属している:一致しない(||+?)\1+ キャプチャグループに一致するように、この表現しようとする(つまりすることができ||、|||、||||などの上の出現箇所)のn ≥ 2回。一致する場合、文字列で表される数はkで割り切れるので、素数ではありません。それ以外の場合です。k≥2k≥2k \geq 2|n≥2n≥2n \geq 2kkk そして、グループ化と後方参照により、正規表現が理論的な意味で...正規表現よりも実際にはるかに表現力豊かになることが明らかになったので、私は愚かに感じました。今では、実際の正規表現を実行するときに私が知らなかったルックアラウンドやその他の演算子も追加されました。 ウィキペディアによると、文脈自由文法によって生成された言語よりもさらに表現力があります。だからここに私の質問があります: 現代の正規表現エンジンを使用して、(文脈自由文法から生成された)代数言語を表現できますか より一般的な説明、または現代の正規表現で説明できる言語の種類の複雑さの少なくとも上限はありますか? より実用的には、その背後に深刻な理論がありますか、それとも有限オートマトンに基づく実際の正規表現の最初のブロックに実装可能と思われるたびに新しい機能を追加するだけですか? 「モダンな正規表現」は質問が具体的ではないことを知っていますが、少なくとも後方参照を使用することを意味します。もちろん、この「現代の正規表現」言語に対する特定の制限を想定している部分的な回答者がいる場合は、遠慮なく投稿してください。

2
関数型論理プログラミングのカプセル化検索における最新技術とは何ですか?
カプセル化された検索が評価の順序に依存する可能性がある問題の解決策に特に興味があります。 [1]によると、PAKCSでのカプセル化された検索は評価の順序に依存しますが、MCCではそうではありませんが、それを使用するにはコンパイラーの実装に関する知識が必要であり、Curry言語仕様に従っていません。これは2007年に書かれたため、もちろん現在は古くなっている可能性があります。 KiCS2はIOモナドでカプセル化された検索の結果を返しますが、理由はわかりません。 [1]Braßeland Huch、関数型プログラミングと論理プログラミングのより緊密な統合について、Proc。APLAS 2007
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.