Во-первых, я увидел, что этот же вопрос задавали ранее сегодня, и решил попробовать сам (и у меня возникли проблемы с этим). Надеюсь, я создал для этого новый вопрос!
Я пытаюсь написать программу на прологе, которая решает квадратную формулу X = (−b±√b2-4ac)/2a. Реализованный предикат quadratic([A,B,C], [Result]) принимает список a, b и c в качестве первого аргумента и список результатов в качестве второго. Однако списки доставляют мне неприятности; Я написал этот код:
quadratic([A,B,C], [X]):-
underRoot([A,B,C], UnderRootResult),
UnderRootResult<0,
X is 0.
quadratic([A,B,C], [X]):-
underRoot([A,B,C], UnderRootResult),
UnderRootResult=:=0,
X is -B/2*A.
quadratic([A,B,C], [X]):-
underRoot([A,B,C], UnderRootResult),
UnderRootResult>0,
X is -B - sqrt(UnderRootResult)/2*A,
X is -B + sqrt(UnderRootResult)/2*A.
(Это, вероятно, полно ошибок, так что извините меня заранее) Запуск этого даст мне неопределенную ошибку процедуры для underRoot/2. Я действительно не понимаю, почему это происходит. Я чувствую, что у меня есть общее представление о том, как это запрограммировать, но я делаю много ошибок новичка. Я не могу понять, в чем проблема, поэтому буду признателен за любую помощь!
edit: Кроме того, если мне разрешено задавать два вопроса одновременно, как я могу получить оба X в случае> 0 в списке как один результат?
UnderRoot
, вероятно, неверно? - person Willem Van Onsem   schedule 17.09.2017