Используя cut, ERROR: Out of local stack

Вот мой код, просто сфокусируйтесь на 3 последних правилах:

father(costac,anne). 
mother(mary,mike). 
husband(costac,mary). 
sex_male(costac). 
sex_male(mike). 
sex_female(mary). 
sex_female(anne). 


mother(X,Y):-
        father(Z,Y),
        wife(X,Z).
father(X,Y):-
        mother(Z,Y),
        husband(X,Z).
husband(X,Y):-
        wife(Y,X).
wife(X,Y):-
        husband(Y,X).
husband(X,Y):-
        father(X,Z),
        mother(Y,Z).
wife(X,Y):-
        father(Y,Z),
        mother(X,Z).
brother(X,Y):-
        father(Z,Y),
        father(Z,X),
        sex_male(X),
        \+ X = Y.
brother(X,Y):-
        mother(Z,Y),
        mother(Z,X),
        sex_male(X),
        \+ X = Y.

sister(X,Y):-
        father(Z,X),
        sex_female(X),
        father(Z,Y),
        \+ X = Y.
sister(X,Y):-
        mother(Z,X),
        sex_female(X),
        mother(Z,Y),
        \+ X = Y.

find_rel(Ans):-
        write('Please give first name: '), read(X),
        find(X,Ans).
find(X,Ans):-
        write('Would you like to give second name? -yes/no-'), nl, read(Ask), find_ans(Ask,X,Ans).
find_ans(yes,X,Ans):-
        write('Please give second name: '), read(Y),nl,
        (father(X,Y),!, Ans = father(X,Y));
        (mother(X,Y), !,Ans = mother(X,Y));
        (husband(X,Y), !,Ans = husband(X,Y));
        (wife(X,Y), !,Ans = wife(X,Y));
        (brother(X,Y), !,Ans = brother(X,Y));
        (sister(X,Y), Ans = sister(X,Y)).
/*find_ans(no,X,Ans):-....*/

Меня не волнуют другие ответы, только ответ на этот вопрос:

?-find_rel(Ans).

Давая имена costac & anne, я получаю то, что хочу, потому что это первая строка моего правила. Все остальное, что я пробую, терпит неудачу и выдает ОШИБКУ заголовка! Я пытался использовать вырезать, но ничего не получалось. Когда я прослеживаю, например, я даю Мэри и Майка, я вижу, что даже если он идет к шагу (mother(X,Y), !,Ans = mother(X,Y)); и производить mother(mary,anne) игнорирует это и переходит к следующим двум и продолжает эту вещь:

   Call: (10) father(mary, mike) ? creep
   Call: (11) mother(_G1479, mike) ? creep
   Exit: (11) mother(mary, mike) ? creep
   Call: (11) husband(mary, mary) ? creep
   Call: (12) wife(mary, mary) ? creep
   Call: (13) husband(mary, mary) ? creep
   Call: (14) wife(mary, mary) ? creep
   Call: (15) husband(mary, mary) ? creep
   Call: (16) wife(mary, mary) ? creep
   Call: (17) husband(mary, mary) ? creep
   Call: (18) wife(mary, mary) ? creep
   Call: (19) husband(mary, mary) ? creep
   Call: (20) wife(mary, mary) ? creep
   Call: (21) husband(mary, mary) ? 

0 ответов

Другие вопросы по тегам