我需要一些帮助来了解下面的函数在做什么?
func([], R, _, R).
func([_,_|F], [H|S], Pre, [Pre|B]) :-
func(F, S, H, B).
答案 0 :(得分:1)
此谓词作为辅助谓词可能最有用。它可用于删除列表的中间元素。请注意,只有具有奇数个元素的列表才具有中间元素。
如果我斜视,我可以在参数名称中看到一个“ F”和一个“ S”。那可以代表"Fast" and "Slow"吗?没有进一步的信息很难告诉。对于“ H air”和“ T ortuous”,这两个参数也可以分别命名为“ H”和“ T”,但这太混乱了,因为“ H “和“ T”通常代表“头”和“尾巴”,例如“野兔在咬自己的故事”。
但是首先,您需要添加使用此辅助谓词的实际谓词。我将其称为“有趣”,因为它比“ funk”少一个字母,并且每个人都喜欢玩得开心。 “ R”代表“结果”或“休息”,因为您在工作后可能需要休息一下才能获得结果。
fun([X|Xs], R) :-
func(Xs, Xs, X, R).
func([], R, _, R).
func([_,_|F], [H|S], Pre, [Pre|B]) :-
func(F, S, H, B).
现在您可以删除中间元素,或执行其他与此相关的事情:
?- fun([a,b,c], R).
R = [a, c].
?- fun([a], R).
R = [].
?- fun(L, [a,b]), numbervars(L).
L = [a, A, b] ;
false.
?- fun(L, [a|X]), numbervars(L-X).
L = [a, A, B],
X = [B] ;
L = [a, A, B, C, D],
X = [A, C, D] ;
L = [a, A, B, C, D, E, F],
X = [A, B, D, E, F] .
几乎忘了:看看this question,它似乎与您的问题有关。