删除头序言
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
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