Рекурсивная проверка, все ли элементы в списке имеют определенное значение в Прологе - PullRequest
0 голосов
/ 11 мая 2018

В Прологе я определил это следующим образом:

listOfa([H|T]):- H = 'a', listOfa(T).
listOfa([]).

Он делает то, что я хочу. Он проверяет, являются ли все элементы списка определенным элементом, в данном случае символом a, и возвращает соответственно значение true или false. Тем не менее, он возвращает true, если список пуст, и я не хочу этого. Кроме того, я не уверен, что использовать в качестве базового варианта для рекурсии, кроме пустого списка. Как мне сохранить рекурсию без возврата true для пустого списка?

1 Ответ

0 голосов
/ 11 мая 2018

Естественно начать с двух предложений для пустых и непустых списков, и фактически вы можете сохранить этот шаблон! Вы можете легко решить это с помощью отдельного предиката , который имеет значение true, если его аргумент является списком хотя бы с одним элементом.

Например:

not_empty([_|_]).

Затем опубликуйте соединение этого предиката и того, что вы уже успешно реализовали.

Если вы хотите, вы также можете объединить это в третий предикат, который состоит только из этого соединения.

Кроме того, проверьте это:

?- maplist(=(a), Ls).

Объединив эти цели, вы можете - чисто алгебраическим резонансом - найти еще более короткое решение!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...