prolog中演员的分离程度

时间:2016-05-02 14:57:01

标签: prolog

我有一个庞大的演员数据库,例如

actor('adam_zweibel','the_story_of_us',1999,20).
actor('alan_zweibel','north',1994,10).
actor('alan_zweibel','the_story_of_us',1999,21).
actor('darrell_zwerling','...and_justice_for_all',1979,32).
actor('darrell_zwerling','capricorn_one',1978,21).
actor('darrell_zwerling','chinatown',1974,6).
actor('darrell_zwerling','doc_savage:_the_man_of_bronze',1975,6).
actor('darrell_zwerling','high_anxiety',1978,15).
actor('darrell_zwerling','joe_versus_the_volcano',1990,15).
actor('darrell_zwerling','the_main_event',1979,45).
actor('darrell_zwerling','la_mortadella',1971,0).
actor('darrell_zwerling','the_secret_life_of_an_american_wife',1968,0).
actor('darrell_zwerling','wild_at_heart',1990,40).
actor('michael_zwiener','big_bully',1996,15).

我需要实现类似这样的东西

?- within_degree('johnny_winter', 'matthew_witherly', 3, X).
X = [sgt_peppers_lonely_hearts_club_band, keith_carradine, crisscross, paul_calderon, bait] ;
X = [sgt_peppers_lonely_hearts_club_band, morgan_farley, heaven_can_wait, larry_block, bait] ;
X = [sgt_peppers_lonely_hearts_club_band, 'steve_martin_(i)', bowfinger, jamie_kennedy, bait] ;
X = [sgt_peppers_lonely_hearts_club_band, 'steve_martin_(i)', my_blue_heaven, larry_block, bait].

建立一个演员树,有两个结局Actor1,Actor2。 我不知道如何开始,有人可以帮助我,或者想出如何处理这项任务。感谢

1 个答案:

答案 0 :(得分:2)

这是一个接近任务的想法。

首先只是担心检测它们是否已连接:

  • 如果Actor1和Actor2在同一部电影中,则它们按度数1连接
  • 或者如果Actor1按照度数N-1连接到Actor3并且Actor3通过等级1连接到Actor2,则它们按度数N连接

尝试编写一个连接的谓词(+ Actor1,+ Actor2,+ Degree)来实现它。如果两个actor按度数连接,则该谓词将返回true,如果不是,则返回false。

下一步是添加您想要的结果列表,即

  • Actor1和Actor2通过[M]列表连接在1度。
  • Actor1和Actor2通过附加的列表连接到度数N:从Actor1到Actor3,Actor3的步骤列表以及从Actor3到Actor2的步骤列表