gpt4 book ai didi

Prolog,如何在 write() 中显示多个输出

转载 作者:行者123 更新时间:2023-12-04 16:55:28 25 4
gpt4 key购买 nike

go :-   match(Mn,Fn),
write('--Matching Result--'),
nl,
write(Mn),
write(' match with '),
write(Fn),
match(Mn1,Fn1).


person(may,female,25,blue).
person(rose,female,20,blue).
person(hock,male,30,blue).
person(ali,male,24,blue).
match(Mn,Fn):-person(Fn,'female',Fage,Fatt),
person(Mn,'male',Mage,Matt),
Mage>=Fage,
Fatt=Matt.

嗨,这是我的代码……但它只能显示 1 个输出……但是 match(X,Y) 中有 3 对匹配项。如何在我的 go 函数中显示它们。

谢谢

最佳答案

如果您强制回溯,您将获得所有匹配项,通常通过输入 ; (例如在 SWI Prolog 中)。但你也看到你得到了不必要的输出 true .这是因为 go 中的最后一个子句是 match(Mn1,Fn1) .此子句成功3次,绑定(bind)变量Mn1,Fn1但只有 true是输出,因为你没有 write()在那个条款之后。第四次match(Mn1,Fn1)失败,通过回溯你回到第一个子句match(Mn,Fn)匹配,匹配输出等。

你肯定不想有这种行为。您应该删除最后一个子句 match(Mn1,Fn1)go .现在按 ;你得到 3 场比赛没有任何输出 true介于两者之间。

但是您可能想要的是程序执行回溯。为此,您只需要通过添加 false 来强制回溯。作为最后一个子句。要获得正确的输出格式,请使用以下程序。最后一条go2.添加得到true最后。

go2 :- write('--Matching Result--'), nl,
match(Mn,Fn),
write(Mn), write(' match with '), write(Fn), nl,
fail.
go2.

这种技术称为故障驱动循环。

关于Prolog,如何在 write() 中显示多个输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7349408/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com