Представление карт в Прологе

Я пытаюсь изучить Пролог. Это мои первые шаги с этим языком. В качестве упражнения я хочу написать программу, которая может распознавать некоторые покерные руки (стрит-флеш, каре, фулл-хаус и т. Д.).

Я ищу хорошее представление карт в Прологе. Мне нужно иметь возможность проверить, больше ли одна карта, чем другая, подходят ли карты и так далее.

Я начал с кода:

rank(2).
rank(3).
rank(4).
rank(5).
rank(6).
rank(7).
rank(8).
rank(9).
rank(t).
rank(j).
rank(q).
rank(k).
rank(a).

value(2, 2).
value(3, 3).
value(4, 4).
value(5, 5).
value(6, 6).
value(7, 7).
value(8, 8).
value(9, 9).
value(t, 10).
value(j, 11).
value(q, 12).
value(k, 13).
value(a, 14).
%value(a, 1).

suite(d).
suite(h).
suite(c).
suite(s).

rank_bigger(X, Y) :-
               value(X, A),
               value(Y, B),
               A > B.

Это дает mi возможность проверить, больше ли ранг A, чем, например, J .

Но я не уверен, как представлять одиночную карту. Это изображение должно содержать ранг карты, а также масть. Есть также некоторая проблема с тузом, потому что туз имеет ранг 14, но он также может быть 1 в стрите.

Мой вопрос в том, как представлять карты, если я хочу установить такие правила, как:

isStraight(C1, C2, C3, C4, C5) :- 
                                  [...]

или

isStraightFlush(C1, C2, C3, C4, C5) :- 
                                       [...]

Я Конечно, это довольно простой вопрос, если вы знаете язык, но не так-то просто «переключить» мышление с таких языков, как C или python. : -)

5
задан false 3 December 2019 в 19:09
поделиться