删除头部序言

时间:2016-02-04 13:30:17

标签: prolog unification

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

我有上面的代码,我想跳过分配H.我得到一个逗号列表。

1 个答案:

答案 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代替_