измените свою кнопку на:
<button id="submit" type="button" onclick="calculeaza()" style="margin-
top: 5%; "> CALCULEAZA
по умолчанию кнопка имеет тип SUBMIT, которая отправит форму. Вы можете использовать JavaScript, чтобы отключить функцию или просто внести небольшие изменения в вашу кнопку.
При поиске функций высшего порядка в Прологе необходимо определенно консультироваться с Naish (1995), очень хороший ресурс на этом.
Его определение filter/3
следующее (он использует нотацию списка различия, поэтому выходит из необходимости определить filter/4
):
filter(_,[],[]).
filter(P, A0-As0, As) :-
(
call(P, A0) -> As = A0-As1
;
As = As1
)
, filter(P, As0, As1).
Я у Вас есть вопросы об этом предикате, спрашивают меня в комментарии. Читать газету также настоятельно рекомендовано, это также определяет map
, foldr
и compose
! Примечание, которое многие ограничения он упоминает (как, например, отсутствие call/3
или высшего порядка apply
не подавайте заявку больше. SWI-пролог имеет =..
оператор, который обращается ко всем его проблемам и делает произвольную логику n-порядка возможной.
Предложения SWI-пролога exclude/3
и другие такие метапредикаты. Ваша исходная проблема может быть кодирована как это:
are_identical(X, Y) :-
X == Y.
filterList(A, In, Out) :-
exclude(are_identical(A), In, Out).
Пример использования:
?- filterList(A, [A, B, A, C, D, A], Out).
Out = [B, C, D].
Хорошо, что Вы знали бы, я просто понял это. Так, вот я отправляющий ответ на мой собственный вопрос, как ожидалось действительно короткая функция сделала задание:
filterList(_,[],R,R). % Returns answer when the list is exhausted.
filterList(L,[A|List],Temp,Res) :-
filterList(L,List,New,Res), % Recursive call, New is either the same list
( filter(L,A), % in case the filter outputs true, or the list
New = Temp
; New = [A|Temp] % plus the current element otherwise.
).