я пытаюсь решить конкретную проблему с помощью prologs ограничений решателей, и я застрял: D Более общая версия моего требования проблемы является так:как запустить приостановленные цели в прологе с ограничениями
:- lib(ic).:- lib(ic).
solve([A1*X+B1*Y=C1, A2*X+B2*Y=C2]):-
X::[0..999],
Y::[0..999],
X #\= 0,
Y #\= 0,
A1*X+B1*Y#=C1, % line1
A2*X+B2*Y#=C2. % line2
и это запрос/цель я использую:
solve([2*X+3*Y=5, 3*X+2*Y=5]).
и программа будет вычислять значения X и Y (в данном случае X = 1, Y = 1 раствор). Я думаю, что, если количество аргументов в цели/запросе может меняться ... в этом случае моя пролог-программа должна иметь динамические приостановленные цели вместо строк, прокомментированных с помощью% line1 и% line2.
Вопрос в том, как заставить эти выражения задерживаться ..? Я не хочу жестко кодировать их в этой проблеме и думаю, что через цель пройдут только два выражения.
Надеюсь, что вопрос будет ясен. Спасибо.
спасибо за фрагмент. Я не понял эту часть кода: Eq0 = (Lhs # = Rhs) Как это работает? Пожалуйста, направляйте меня на подходящие материалы, доступные в Интернете, чтобы я мог больше узнать о таком кодировании. Спасибо. – kallakafar
@kallakafar: если вы знаете, что переменная не может иметь значение 0, вы можете установить домен соответственно 'Vars :: [1..999]' и удалить цикл foreach. Строка 'Eq0 = (Lhs # = Rhs)' означает, что переменная 'Eq0' привязана к цели' (Lhs # = Rhs) ', но цель не выполняется. Он выполняется только в следующей строке 'call (Eq0)'. Проблема с написанием «Lhs # = Rhs» заключается в том, что с помощью библиотеки ic допускаются только переменные, а не сложные термины. В вашем случае термин «Lhs» будет термином, поэтому вам нужно будет обернуть его в 'eval/1':' eval (Lhs) # = Rhs'. – twinterer
@kallakafar: документацию по ECLiPSe можно найти здесь: http://www.eclipseclp.org/doc/userman/umsroot.html и здесь: http://www.eclipseclp.org/doc/libman/libman. HTML. Однако вы должны были получить оба руководства с вашей установкой ECLiPSe. Затем есть курс электронного обучения Хельмута Симониса: http://4c.ucc.ie/~hsimonis/ELearning/index.htm и введение учебника ECLiPSe: http://www.eclipseclp.org/doc/tutorial/index. HTML. Наконец, рассмотрите вопрос о конкретных вопросах ECLiPSe в списке рассылки пользователей: https://lists.sourceforge.net/lists/listinfo/eclipse-clp-users – twinterer