Чтение списков в прологе - PullRequest
0 голосов
/ 29 марта 2020

У меня есть список списков в прологе в форме

[[Olivia,Thales,Canada Post,Cisco],[Jackson,Thales,Canada Post,Cisco],[Sophia,Cisco,Thales,Canada Post]]

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

[Olivia, Jackson, Sophia]

Пока я могу читать каждый элемент списка и записывать его в терминал, но как только он дойдет до последнего элемент завершается неудачно, потому что хвост списка не существует.

Этот код читает каждый подсписок, но не удается, когда я достигаю последнего элемента, потому что хвост списка больше не существует. Я попытался добавить is_list, чтобы проверить, существует ли хвост списка, но он, похоже, не работает.

listReading([H|T]) :- write(H), is_list(T),!, nl, listReading(T).

Я предполагаю, что лучший подход - это читать каждую подпрограмму -list, а затем добавить заголовок подсписка в новый список, однако я действительно изо всех сил пытаюсь получить правильную первую часть.

1 Ответ

2 голосов
/ 29 марта 2020

Я смог исправить свою проблему сам. Вот код для ответа:

listReading([], []). listReading([[H|_]|T], [H|T2]) :- listReading(T, T2).

Оказывается, ответ был довольно простым, и я просто слишком усложнил свой мыслительный процесс

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