Как сохранить четные числа в прологе? - PullRequest
0 голосов
/ 10 ноября 2018

Я пытался сохранить четные числа, удаляя нечетные, но швы были проблемой.

keepeven([], []).
keepeven([X|Xs], Even) :- 0 is X mod 2, keepeven(Xs, [Even|X]).

И я попробовал:

keepeven([], []).
keepeven([X|Xs], [X|Even]) :- 0 is X mod 2, keepeven(Xs, Even).

Я что-то упустил. : /

Я должен получить от

keepeven([1,2,3,4,5], Even).
Even = [2,4].

Но я просто потерпел неудачу.

1 Ответ

0 голосов
/ 10 ноября 2018

Я что-то упустил. : /

Да, вы пропускаете случай, когда число равно нечетное , поскольку в этом случае 0 is X mod 2 не удастся, но Пролог не может вернуться к другому предложению, которое "удаляет" этот элемент.

Мы можем, например, добавить дополнительное предложение:

keepeven([], []).
keepeven([X|Xs], [X|Even]) :- 0 is X mod 2, keepeven(Xs, Even).
keepeven([X|Xs], <b>Even</b>) :- <b>1</b> is X mod 2, keepeven(Xs, Even).

или используйте предложение if-then-else:

keepeven([], []).
keepeven([X|Xs], R) :-
    (  0 is X mod 2
    -> R = [X|Even]
    ;  R = Even),
    keepeven(Xs, Even).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...