Как передавать значения списка одно за другим в другом предикате prolog

#prolog

#пролог

Вопрос:

Это мой файл prologdb

 trip_to_nation(X,Y,T):- % X is a city ,T is a list
      list_airport(Y,A),
      write(A),% [dublin,cork] list 
      all_trip(X,A,T). % here A is an atom and T is the list
  

Я хочу передавать значение списка одно за другим в all_trip, чтобы получить данные, как это возможно?

Что-то вроде list[0],list[1] и получить данные в списке.Спасибо

Комментарии:

1. Вам нужно уточнить, что делают предикаты list_airport и. all_trip

2. обновлено, @DavidTonhofer

3. Это может помочь: member/2 будет выполнять обратный переход по содержимому списка. Прямой доступ с помощью индексации выполняется (неэффективно) nth0/3 .

4. Я пробовал, это не работает all_trip(X,member(One, [One]),T). @DavidTonhofer

5. Я вижу: maplist(all_trip(X,A), Ts). будет вызывать all_trip(X,A,T) для каждого T в списке Ts . Смотрите maplist/2

Ответ №1:

Теперь T будет иметь все переходы от X к элементам A.

 maplist(all_trip(X), A, T).
  

Если вы хотите, чтобы trips представляли собой несколько решений, а не их список, сработает следующее.

 member(City, A), all_trip(X, City, T).
  

Комментарии:

1. но как передать это в all_trip()?

2. Что именно all_trip делает? Можете ли вы поделиться этим кодом?

3. /** * Все поездки между двумя городами * * найдите все поездки между C (первый город) и L(второй город) и поместите затем в T */ all_trip(C,L,T): — findall(Ci, trip(C,L,any,Ci), T).

4. all_trip предоставляет список всех поездок между двумя городами C и L

5. @gANDALF: я не уверен в остальной части кода, но моего ответа на обновление должно хватить на этот конкретный вопрос.