用Prolog显示结果

问题描述 投票:0回答:1
if twol then twolegs.
if twoh then twohands
if tenf then tenfingers.
if twof then twofeets.
if smallh then smallhair.
if fourlegs and nohands and nofingers and fourfeets and doghair then dog.
if twolegs and twohands and tenfingers and twofeets and smallhair then person.
if fourlegs and nohands and nofingers and fourfeets and doghair then dog.
if twolegs and twohands and tenfingers and twofeets and smallhair then person.


    % forward chaining
    forward :-
     new_derived_fact(P),!,
     write('solution: '),writeln(P),
     assert(derived_fact(P)),
     forward ;
     writeln('No more facts').
    new_derived_fact(P) :-
     if Cond then P,
     \+ fact(P),
     \+ derived_fact(P),
     truth(Cond).
    truth(P) :-
     fact(P) ;
     derived_fact(P).
    truth(P1 and P2) :-
     truth(P1),
     truth(P2).
    truth(P1 or P2) :-
     truth(P1) ;
     truth(P2).

    %database
    solution(person, address, id, house).
    solution(dog, dogaddress, dogid, doghouse)

我有这段使用前向链的prolog代码,如何从数据库中显示 "地址,id,房子 "这样的 "人 "的结果?

我有这段使用前向链的prolog代码,如何从数据库中显示 "地址,id,房子 "这样的结果 "person"?

prolog forward
1个回答
0
投票

编辑数据库

 %database
    solution(person, addressx, idp1, house).
    solution(person, addressy, idp2, house).
    solution(person, addressz, idp3, house).
    solution(dog, dogaddressx, dogid1, doghouse).
    solution(dog, dogaddressy, dogid2, doghouse).
© www.soinside.com 2019 - 2024. All rights reserved.