写一个跳过谓词

时间:2019-03-21 18:34:04

标签: prolog

有人问有关Prolog的问题,但我什至不知道他能代表别人向我解释什么意思?

?- Forskip([1,2,3,4,5],[3],L).
L=[4, 5].
?- Forskip([c,3,6,hello,6,7,z],[6,c,a],L).
L=[3, 6, 7, z]. 

有人可以看到这种模式并向我解释福斯基普做什么吗?

1 个答案:

答案 0 :(得分:1)

首先,谓词名称是 atoms ,但是Forskip是变量。我假设您的电话打错了电话?

谓词似乎返回第二个列表中任何元素之后的第一个列表中的两个列表元素。在第一种情况下,3之后的两个元素是45

?- forskip([1,2,3,4,5],[3],L).
L=[4, 5].

在第二个示例调用中,c之后是36,之后是6之后是7z

?- forskip([c,3,6,hello,6,7,z],[6,c,a],L).
L=[3, 6, 7, z].

可以复制上面结果的forskip/3谓词的实现是:

forskip([], _, []).
forskip([Element| Elements], Markers, Results) :-
    (   member(Element, Markers) ->
        Elements = [Element1, Element2| RestElements],
        Results = [Element1, Element2| RestResults],
        forskip(RestElements, Markers, RestResults)
    ;   forskip(Elements, Markers, Results)
    ).

但是应该注意,这两个示例调用不是规范。例如。在标记后仅剩一个元素的情况下应该怎么办?