1

私はこの質問に取り組んでいます:

ブリッジの 4 人用ゲームでは、各プレイヤーは 13 枚のカードを順番に配られます。deal(Cards, H1, H2, H3, H4)最初の引数としてデッキを取り、H1ディールでプレイヤー 1 が受け取った 13 枚のカードにバインドすることで成功する述語を記述します。

deal1ヒント: 1 つの戦略は、プレイヤー 1 にdeal2対処する、プレイヤー 2 に対処するなどの 4 つのヘルパー述語を記述することです。

与えられたコードは次のとおりです。

cards(ace).
cards(deuce).
cards(three).
cards(four).
cards(five).
cards(six).
cards(seven).
cards(eight).
cards(nine).
cards(ten).
cards(jack).
cards(queen).
cards(king).

suits(spades).
suits(hearts).
suits(clubs).
suits(diamonds).


deck([(ace,spades),(deuce,spades),(three,spades),(four,spades),
    (five,spades),(six,spades),(seven,spades),(eight,spades),
    (nine,spades),(ten,spades),(jack,spades),(queen,spades),
    (king,spades),
    (ace,hearts),(deuce,hearts),(three,hearts),(four,hearts),
    (five,hearts),(six,hearts),(seven,hearts),(eight,hearts),
    (nine,hearts),(ten,hearts),(jack,hearts),(queen,hearts),
    (king,hearts),
    (ace,clubs),(deuce,clubs),(three,clubs),(four,clubs),
    (five,clubs),(six,clubs),(seven,clubs),(eight,clubs),
    (nine,clubs),(ten,clubs),(jack,clubs),(queen,clubs),
    (king,clubs),
    (ace,diamonds),(deuce,diamonds),(three,diamonds),(four,diamonds),
    (five,diamonds),(six,diamonds),(seven,diamonds),(eight,diamonds),
    (nine,diamonds),(ten,diamonds),(jack,diamonds),(queen,diamonds),
    (king,diamonds)]).

これが私の答えです:

deal([],[],[],[],[]).

deal([C1,C2,C3,C4|Cards],[C1|H1],[C2|H2],[C3|H3],[C4|H4]) :-
    deal(Cards,H1,H2,H3,H4).

私の答えは正しいとほぼ確信していますが、クエリに問題があります。

?- deal(deck,A,B,C,D).

クエリは戻ってきますが、動作failする代わりに実際のカードのリストを入れdeckます。リストではないデッキを挿入しようとしているところに問題があると思いますが、 でリストに入る方法がわかりませんdeck。私は Prolog を初めて使用するので、単純な修正に過ぎないことを願っています。ありがとう

編集:

以下の提案を追加した後。私の新しい答えは

dealer([],[],[],[],[]).
dealer([C1,C2,C3,C4|Cards],[C1|H1],[C2|H2],[C3|H3],[C4|H4]) :-
    dealer(Cards,H1,H2,H3,H4).

deal(_,A,B,C,D) :-
    deck(Deck),
    dealer(Deck,A,B,C,D).
4

1 に答える 1

2

deck問題は、リストではなく、唯一の引数がすべてのカードのリストに一致するアリティ 1 の述語だと思います。

試す:

deck(Deck),
deal(Deck,A,B,C,D).

deckそのため、バインドされていない変数を呼び出してデッキ リストを取得し、deck新しくバインドされた変数を使用して を呼び出す必要がありますdeal

于 2012-08-09T12:57:51.497 に答える