Вот решение на Прологе:
Цитата:
DOMAINS
S = symbol
M = is(S, S);d(S,M)
PREDICATES
mb(S)
is(S, S)
d(S, M)
d1(S, S, S)
d2(S, S, S)
d3(S, S, S)
d4(S, S, S)
q
CLAUSES
mb(wume).
mb(newume).
d(wume, is(X, Y)):-is(X, Y).
d(newume, is(X, Y)):-not(is(X, Y)).
d(wume, d(X, is(Y, Z))):-d(X, is(Y, Z)).
d(newume, d(X, is(Y, Z))):-not(d(X, is(Y, Z))).
is (X, X).
d1(wume, S2, S3):-is(S2, wume);is(S3, wume).
d1(newume, S2, S3):-is(S2, newume), is(S3, newume).
d2(wume, S2, S3):-d3(wume, S2, S3);d4(wume, S2, S3).
d2(newume, S2, S3):-is(wume, S2), is(newume, S3);is(newume, S2), is(wume, S3).
d3(wume, S2, S3):-is(S2, newume), is(S3, newume).
d3(newume, S2, S3):-is(S2, wume);is(S3, wume).
d4(wume, S2, S3):-is(S2, wume), is(S3, wume).
d5(newume, S2, S3):-is(S2, newume);is(S3, newume).
q:- mb(K2), mb(K3), mb(K4), mb(K5), mb(K6), mb(K7), mb(KJ), mb(KA),
d(K3, is(KA, newume)), d1(K4, K3, K2), d2(K5, KA, K4), d4(K6, KA, K2),
d(K7, is(K5, newume)), d1(KJ, K6, K7), write("Валет", KJ),
nl, fail.
GOAL
q
К сожалению проверить его немогу т.к. свежая версия Visual Prolog похоже не совместима с синтаксисом из книги.
Но может есть тут специалисты которые прочтут эти исходники.
Набирал вручную, возможны опечатки.
Может уже подведем итог и сделаем вывод? Возможно ли описание алгоритма решения этой задачи на Драконе или нет?