Принятие решений по списку прологов

#list #prolog

Вопрос:

я новичок в программировании пролога. Пожалуйста, помогите мне принять решение в списке. где, когда переменная anaklakilaki существует, выход suami равен 1/2, а не 1/4.

вот мой код

вот правила суами, когда у него нет анаклакилаки, его выходное значение равно 1/2

 hitungwaris([],[]).

%Suami tidak punya anak
hitungwaris([suami|L],[Suami|BL]) :-
            Suami is 1/2,
            hitungwaris(L,BL).
 

и когда у суами есть анаклакилаки, его ценности составляют 1/4

 %rules suami jika  punya anak
hitungwaris([suami|L],[Suami|BL]) :- 
            Suami is 1/4,
            hitungwaris(L,BL).
 

это правила анаклакилаки, я хочу, чтобы при этом исключении выход суами был 1/4

 %rules anak laki-laki kandung jika hanya seorang
hitungwaris([anaklakilaki|L],[AnakLaki|BL]) :-
            AnakLaki is 2/3,
            hitungwaris(L,BL).
 

вот мой вопрос, который я задаю

 ?-hitungwaris([suami,anaklakilaki],X).
 

здесь вывод

 X = [0.5, 0.6666666666666666]
X = [0.25, 0.6666666666666666]
 

я хочу, чтобы выход был только один-это второй выход, X = [0,25, 0,666666666666666666] вот так
Пожалуйста, помогите мне выполнить решение в списке
Спасибо

Ответ №1:

Тебе нужен только ответ

 X = [0.25, 0.6666666666666666].
 

Однако у вас есть два правила, которые применяются в данном suami случае:

 % Husband has no children

hitungwaris([suami|L],[Suami|BL]) :-
            Suami is 1/2,
            hitungwaris(L,BL).

% Husband if you have children

hitungwaris([suami|L],[Suami|BL]) :- 
            Suami is 1/4,
            hitungwaris(L,BL).
 

или эквивалентно

 hitungwaris([suami|L],[Suami|BL]) :- 
            (Suami is 1/2 ; Suami is 1/4),
            hitungwaris(L,BL).
 

таким образом, Пролог будет применять сначала один, а затем другой, когда suami он встречается в списке, что приведет к двум ответам.

Поскольку вам просто нужен один из них, в вашей спецификации проблемы чего-то не хватает.