0

私たちは教室でプロローグを学び始めたばかりで、最初の演習は次のようになります。

問題:

注: a と b のようなアトムは無限にあるのではなく、2 つだけであると仮定します。

a) 命題論理式の帰納的定義を翻訳する (つまり、定義 1 を翻訳する) プロローグ プログラムを作成します。これには、次を使用する必要があります。

1.) 原子式を表す単項述語 "at" (つまり、"at(f)" は "F は原子式である" を意味します。ここで、f は定数です)。

2.) 式を示すための単項述語「fmla」(つまり、「fmla(F)」は「F は式である」を意味します)。

3.) 否定を表す単項演算「neg」(つまり、「neg(F)」は ¬F を表します)。

4.) 二項演算「or」は、2 つの式の論理和を表します (つまり、「or(F,G)」は (F∨G) を表します)。

試み:

    at(a). % Our first atom.
    at(b). % Our second atom.

    fmla(F):-
        at(F).

    neg(F):-
        fmla(F).

    or(F,G):-
        fmla(F), fmla(G).

    fmla(F):-
        or(F,G),
        neg(F),
        fmla(G).

有効な式の例: (~A v B) ---> or(neg(a), b)。

プログラムを構築した方法は正しいと思いますが、再帰部分は機能しません(シングルトンエラーも発生しています)。私はこれを何時間も理解しようとしましたが、役に立ちませんでした。どんな助けでも大歓迎です。

4

1 に答える 1

2

あなたはすでに原子を正しく持っています。次に、命題論理式の帰納的な定義を簡単に説明します。

at(a). % Our first atom.
at(b). % Our second atom.

fmla(F):-           % an atom is a formula
    at(F).

fmla(neg(F)) :-     % neg(F) is a formula if F is a formula
    fmla(F).

fmla(or(F,G)) :-    % or(F,G) is a formula if F and G are formulas
    fmla(F),
    fmla(G).

fmla(and(F,G)) :-   % and(F,G) is a formula if F and G are formulas
    fmla(F),
    fmla(G).

上記の例でこれをクエリしようとすると、次のようになります。

   ?- fmla(or(neg(a), b)).
yes

接続詞の最後の規則が必要かどうかは、どの帰納的定義に固執しているかによって異なります。一部の教科書では、論理積は and(A,B) = neg(or(neg(A),neg(B))) として表現できるため、否定と選言のみを使用します。

于 2016-04-04T19:18:48.433 に答える