Я пытаюсь изучить Prolog. Это мои первые шаги с этим языком. В качестве упражнения я хочу написать программу, которая может распознать некоторые покерные руки (прямой флеш, четыре вида, полный дом и т. Д.).Представления карт в Prolog
Я ищу хорошее представительство в Prolog. Мне нужно иметь возможность проверить, больше ли одна карта, чем другие, если карты подходят и так одно.
Я начал с кодом:
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.
Это даст ми возможность проверить, если ранг А больше, чем, например, J.
Но я не уверен, как представлять одну карту. Это представление должно содержать ранг карты, а также костюм. Существует также проблема с Ace, потому что Ace имеет ранг 14, но он может быть также 1 в прямой.
Так что мой вопрос заключается в том, как представляет карты, если я хочу, чтобы правила, как:
isStraight(C1, C2, C3, C4, C5) :-
[...]
или
isStraightFlush(C1, C2, C3, C4, C5) :-
[...]
Я уверен, что это вроде простой вопрос, если вы знаете язык , но не так-то просто «переключить» мышление с таких языков, как C или python. :-)
Спасибо за ответ! Опять же, мне нужно проанализировать это. :) – Adam