【发布时间】:2020-03-12 07:29:32
【问题描述】:
我正在尝试处理这个 Prolog 规则,你传入一个电影列表的输入,它会返回一个涉及该特定电影的明星列表。
谓词:
starsin(captain_america,chris_evan).
starsin(avengers,chris_evan).
starsin(ant_man,chris_evan).
starsin(captain_marvel,chris_evan).
starsin(iron_man,chris_evan).
starsin(avengers,tom_holland).
starsin(captain_marvel,tom_holland).
starsin(captain_america,tom_holland).
starsin(iron_man,robert).
starsin(avengers,robert).
starsin(captain_america,robert).
我尝试使用一组规则,但不知何故我无法找到递归使用它的方法:
link([Head],Set) :-
setof(Star1,starsin(Head,Star1),Set).
输入和输出:
link([ironman],Set).
Set=[chris_evan,robert]
不知何故,我想在列表中传递多个元素,但我需要使用递归。
有没有我能做到的?
【问题讨论】:
-
如果您有不止一部电影会怎样?您的
link谓词是否给出了所有电影中的一组人,还是他们只需要出现在其中一个电影中? -
所以我想要的是输入是电影列表,输出将是出现在给定电影中的明星列表,例如输入:[ Captain_america, avengers, ant_man ] 输出将是[chris_evan]