Это вопрос проверки, с которым у меня возникают проблемы. Как вы пишете метод оценки алгебраического выражения с операторами «плюс», «минус» и «раз». Вот некоторые тестовые запросы:Оценка алгебраического выражения
simplify(Expression, Result, List)
?- simplify(plus(times(x,y),times(3 ,minus(x,y))),V,[x:4,y:2]). V = 14
?- simplify(times(2,plus(a,b)),Val,[a:1,b:5]). Val = 12
?- simplify(times(2,plus(a,b)),Val,[a:1,b:(-5)]). Val = -8 .
Все, что я получил были эти примеры запросов и нет другого объяснения. Но я уверен, что метод должен рассекать первый аргумент, который является алгебраическим выражением, подставляя x и y для своих значений в третьем аргументе (List). Второй аргумент должен быть результатом после вычисления выражения.
Я думаю, что один из методов должен быть simplify(V, Val, L) :- member(V:Val, L).
В идеале должно быть только 4 метода ... но я не уверен, как это сделать.
Вы написали код, который вы можете отобразить?Это не практика этого сообщества писать код для людей. – Brad
@Brad Кроме того, что я написал, нет. Это вопрос проверки и все еще тупик относительно того, как это сделать. Я становлюсь все более и более запутанным, поскольку я думаю об этом ... Толкание в правильном направлении было бы высоко оценено. – user2121487
Вам захочется рекурсивно вызывать упрощение с помощью левого и правого деревьев выражений и соответствующим образом объединить эти значения с использованием имени структуры (times, plus и т. Д.). Вы передадите список переменных по каждому из этих вызовов. Это все намеки, которые я могу дать из пределов поля комментариев. –