У меня есть этот код:Пролог терпит неудачу, не пытаясь любой из RHS правила
res([],M,M).
res([[A,B]|G],inM,M) :-
dfs(A, [[A,B]|G], [], [], Out),
processResponse(Out,inM,M1),
dfs(B, [[A,B]|G], [], [], Out2),
processResponse(Out2,M1,M2),
res(G,M2,M).
Если я бегу res([],[],M)
, на переводчика, он отлично работает и возвращает M = []
.
Если я запустил res([[a,b]],[],M)
, он терпит неудачу. Я попытался взглянуть на след, и он сразу же сработал на res
, даже не попробовав dfs
или любые другие правила. Если я пишу правила непосредственно на интерпретаторе, с тем же вводом, они работают нормально.
Я использую SWI Prolog. Почему это происходит? Что я должен изменить, чтобы сделать эту работу?
'inM' * атом * не * переменная *. В Prolog * переменные * должны начинаться с заглавной буквы. 'res ([[a, b]], [], M)' fail, потому что он не соответствует ни одному из ваших предикатных предложений, потому что '[[a, a]]' не соответствует '[]' в первом и '[]' не совпадает с атомом 'inM' во втором предложении. – lurker
Вы случайно используете ** атом ** в 'inM'. Переменные начинаются с буквы верхнего регистра или, например, если вы японский пользователь, с * подчеркиванием *. – mat