Категорически вас приветствую.
Есть 2 базы. Одна имеет вид:
doctorate(258,"Dio Lewis Holl","Ph.D.","The University of Chicago",1925,"UnitedStates","Dissertation","Viscous Fluid Motion in Eccentric Cylinders").
Другая:
advisor(10,258).
advisor(10,38464).
Другими словами: вторая база содержит 2 поля с ID. Первый ID содержитсжя 2 первой базе(см. пример). Первая база содержит и другую информацию: имена, названия университетов и тд. Мне нужно пройтись по базе задав или ID или имя и вывести из базы нр. 1, имя.
Если я работаю только со второй базой, то проблем с рекурсией нет. Например я делаю так:
ancestor(X,Y):-advisor(X,Y).
ancestor(X,Y):- advisor(X,Z),ancestor(Z,Y).
ancestor(10,Y).
И получаю 2 результата:
?- ancestor(10,Y).
Y = 258 ;
Y = 38464 ;
Если я пытаюсь определить имена к этим ID(например 258,38464) пролог возвращает только один результат.
ancestor(X,Y):-advisor(X,Y).
ancestor(X,Y,NAME):- doctorate(Y,NAME,_,_,_,_,_,_),ancestor(X,Y).
ancestor(10,Y,NAME), writef("%s\n",[NAME]).
Получается:
?- ancestor(10,Y,NAME), writef("%s\n",[NAME]).
Dio Lewis Holl
Y = 258,
NAME = [68, 105, 111, 32, 76, 101, 119, 105, 115|...] ;
Тоесть есть имя только для ID 258. И ещё не нужная строка NAME.
Подскажите как сделать правильно, а также как избавиться от строки NAME....
Спасибо!