check(Departure, Destination, [(D, S)|T1], [H|T2] ):-
check(Departure, Destination, T1, T2),
((Destination = D, H = D); H = '').
我有上面的代码,我想跳过分配H.我得到一个逗号列表。
答案 0 :(得分:3)
你的问题是,第四个参数总是"添加"列表中的项目。如果你想"跳过"在这种情况下,该项完全可以避免将H
添加到该参数的头部。
即:
check(Departure, Destination, [(D, S)|T1], NT2 ):-
check(Departure, Destination, T1, T2),
((Destination = D, NT2=[D|T2]); NT2=T2).
该子句指出,当D
的递归调用产生相同的目的地时,第四个参数应该在T2
附加check/4
({{1}的左侧部分在那种情况下,;
。否则,第四个参数应该是递归步骤在NT2=[D|T2]
中留下的内容,因此在这种情况下T2
。
另请注意,NT2=T2
是代码中的单例。如果您真的不想在该程序中使用S,请使用S
代替_