2015-10-29 4 views
-1

У меня есть 3 факта.Как слить данные Факты в список в Прологе

myfact1(1,'Hamburg','Berlin', 315). 
myfact2(2,'Kiel','Bremen', 175). 
myfact3(3,'Essen', 'Oberhausen',50). 

Я хочу дать имформацию myfacts как кортеж List. Мой запрос о output(List) должен дать список, как:

[('Hamburg', 'Berlin', 315),('Kiel','Bremen',175),('Essen','Oberhausen',50)] 

Как можно реализовать Правило output/1 в Прологе

+1

Ваши данные плохо определены. Почему каждый из них является другим функтором? Это делает обработку данных излишне сложной, поскольку вам необходимо программно построить функторы для запроса фактов. У вас есть 'myfact1',' myfact2' и 'myfact3', тогда как каждый должен быть просто' myfact'. И если вам действительно не нужно индексировать факты, вам не нужен первый целочисленный аргумент, либо (обязательно). Затем вы можете использовать агрегированные предикаты, такие как 'findall ((A, B, C), myfact (_, A, B, C), L)'. – lurker

ответ

0

Я не знаю, если я понимаю это правильно, но я хотел бы изменить факты «myfact» вместо myfact1. В этом случае:

output(List) :- 
    findall(myfact(A,B,C,D),myfact(A,B,C,D),List). 

Если вы действительно хотите сохранить myfacts1, ...:

output(List) :- 
    myfact1(A1,A2,A3,A4), 
    myfact2(B1,B2,B3,B4), 
    myfact3(C1,C2,C3,C4), 

    append([myfact1(A1,A2,A3,A4),myfact2(B1,B2,B3,B4),myfact3(C1,C2,C3,C4)],[],List). 

Есть, конечно, более эффективные способы, чтобы работать вокруг.

+1

Ваше использование 'append' - довольно сложный или тупой способ унифицировать нужный список с переменной. Вы можете просто сказать: «List = [myfact1 (A1, A2, A3, A4), myfact2 (B1, B2, B3, B4), myfact3 (C1, C2, C3, C4)]'. – lurker

+0

Код, который вы указали, имеет хотя бы одну синтаксическую ошибку. – repeat

+0

@Nickelium Извините, что на самом деле это всего лишь myfact, но есть более 50 фактов, поэтому мне нужно пойти в Рекурсив через Факт, и первый элемент факта начинается с 1, а последний факт заканчивается на 50. Поэтому мне нужно пройти 50 фактов и добавить их в свой список результатов. Мне нужно что-то вроде x = x + 1, чтобы перейти к рекурсивному от первого факта до второго и так далее. – biraj01

Смежные вопросы