Я хотел бы определить начальное состояние проблемы. Мой кодПроверить номера ввода в прологе
isDigit(X) :- (number(X),
X >= 0,
X =< 8
); (writeln('[0-8] AND Number'),!,fail).
define_initial_state(INITIAL_STATE) :- write('Pos (1,1):'),
read(A11),
isDigit(A11),
write('Pos (1,2):'),
read(A12),
isDigit(A12),
write('Pos (1,3):'),
read(A13),
isDigit(A13),
write('Pos (2,1):'),
read(A21),
isDigit(A21),
write('Pos (2,2):'),
read(A22),
isDigit(A22),
write('Pos (2,3):'),
read(A23),
isDigit(A23),
write('Pos (3,1):'),
read(A31),
isDigit(A31),
write('Pos (3,2):'),
read(A32),
isDigit(A32),
write('Pos (3,3):'),
read(A33),
isDigit(A33),
INITIAL_STATE = state(row1(A11,A12,A13), row2(A21,A22,A23),row3(A31,A32,A33)).
start :- define_initial_state(INITIAL_STATE),
write(INITIAL_STATE).
У меня есть проблема в том, что печатается много раз сообщение Например
1 ?- start.
Pos (1,1):4.
Pos (1,2):2.
Pos (1,3):11.
[0-8] AND Number
[0-8] AND Number
[0-8] AND Number
false.
Кроме того, я хотел бы проверить, если номер уже дано, и если да, то спросить снова для этого числа.
Спасибо за ваш ответ, Это работает, но это ужасно Кроме того, я не, знаю, как я могу попросить пользователя в случае ошибки при вводе попробовать другой номер. isDigit (Х): - (число (Х), Х> = 0, Х = <8 -> истинно ; WriteLn ('[0-8] и номер'), неудачу). check_if_exists (Num, List): - (member (Num, List) -> true ; writeln ('Num are already')). \t \t \t \t \t \t \t \t \t delete_one (Эль, [Эль | Tail], хвост). delete_one (Elem, [Head | Tail1], [Head | Tail2]): - \ + (Elem = Head), delete_one (Elem, Tail1, Tail2). – user494766
define_initial_state (INITIAL_STATE): - L = [0,1,2,3,4,5,6,7,8], записи ('Pos (1,1):'), \t \t \t \t \t \t \t чтения (А11), \t \t \t \t \t \t \t isDigit (А11), \t \t \t \t \t \t \t \t \t delete_one (А11, L, L1), \t \t \t \t \t \t \t записи ('Pos (1,2):'), \t \t \t \t \t \t \t чтения (А12), \t \t \t \t \t \t \t isDigit (А12), \t \t \t \t \t \t \t check_if_exists (A12, L1), delete_one (A12, L1, L2), \t \t \t \t \t \t \t \t ... \t \t \t \t \t \t \t \t \t INITIAL_STATE = состояние (row1 (А11, А12, А13), row2 (А21, А22, А23), row3 (А31, А32, A33)). \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t старт: - define_initial_state (INITIAL_STATE), записи (INITIAL_STATE). – user494766
отредактируйте свой OP, чтобы опубликовать код, пожалуйста, он не читается в комментариях ... и что ужасно о моем ответе? – m09