删除头序言

Removing head prolog

check(Departure, Destination, [(D, S)|T1], [H|T2] ):-
    check(Departure, Destination, T1, T2),
    ((Destination = D, H = D); H = '').

我有上面的代码,我想跳过分配 H。当我这样做时,我得到一个逗号列表。

你的问题是第四个参数总是"adds"列表中的一个项目。如果你想 "skip" 该项目完全可以避免在这种情况下将 H 添加到该参数的头部。

即:

check(Departure, Destination, [(D, S)|T1], NT2 ):-
    check(Departure, Destination, T1, T2),
    ((Destination = D, NT2=[D|T2]); NT2=T2).

该子句指出,当对 check/4 的递归调用产生相同的目的地(T2 的左侧部分时,第四个参数应在开头附加 D =15=] ),因此在这种情况下为 NT2=[D|T2] 。否则,第四个参数应该正是递归步骤在 T2 中留下的内容,因此在这种情况下为 NT2=T2

另请注意,S 在您的代码中是一个单例。如果您真的不想在该过程中使用 S,请使用 _ 而不是 S