我想寫一個Prolog程序,將按順序打印出英國皇室的男性接班人。到目前爲止,我嘗試:序言 - 遞歸下來的家庭樹
son(elizabeth, charles).
son(charles, william).
son(charles, henry).
son(elizabeth, andrew).
son(elizabeth, edward).
son(edward, severn).
successor(X, Y) :- son(X, Y).
successor(X, Y) :- son(X, C), successor(C, Y).
後繼功能並沒有完全做到我想要的東西:電流輸出是這樣的:
successor(elizabeth, Y).
Y = charles ;
Y = andrew ;
Y = edward ;
Y = william ;
Y = henry ;
Y = severn ;
false.
第一條規則讓所有的三個孩子立即打印出來,然後第二條規則打印出所有的後代。但是,第一個孩子的後代應該來第二直接子之前,像這樣:
successor(elizabeth, Y).
Y = charles ;
Y = william ; % william and henry should come before andrew
Y = henry ;
Y = andrew ;
Y = edward ;
Y = severn ;
false.
這是我的第一個Prolog程序,和我在如何表達權關係的損失。任何人都可以給我一個想法或指點資源,這將有助於我?
澄清:我希望它以正確的順序打印出來。我明白爲什麼給定的規則集會產生給定的輸出,我想知道如何創建一個以正確順序輸出它們的規則集。 – Kiv 2009-12-10 01:00:22