有人问有关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].
有人可以看到这种模式并向我解释福斯基普做什么吗?
答案 0 :(得分:1)
首先,谓词名称是 atoms ,但是Forskip
是变量。我假设您的电话打错了电话?
谓词似乎返回第二个列表中任何元素之后的第一个列表中的两个列表元素。在第一种情况下,3
之后的两个元素是4
和5
:
?- forskip([1,2,3,4,5],[3],L).
L=[4, 5].
在第二个示例调用中,c
之后是3
和6
,之后是6
之后是7
和z
:
?- 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)
).
但是应该注意,这两个示例调用不是规范。例如。在标记后仅剩一个元素的情况下应该怎么办?