Я пытаюсь изучить Пролог. Это мои первые шаги с этим языком. В качестве упражнения я хочу написать программу, которая может распознавать некоторые покерные руки (стрит-флеш, каре, фулл-хаус и т. Д.).
Я ищу хорошее представление карт в Прологе. Мне нужно иметь возможность проверить, больше ли одна карта, чем другая, подходят ли карты и так далее.
Я начал с кода:
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. : -)