我收到了以下问题:
任何整数列表都可以(唯一地)被分成“奇偶运行”,其中每个运行是原始列表中连续偶数或奇数的(最大)序列。例如,列表
List = [8,0,4,3,7,2,-1,9,9]
可以被分为[8, 0, 4]、[3, 7]、[2]和[-1, 9, 9]。
编写一个谓词paruns(List, RunList),将数字列表转换为相应的奇偶运行列表。例如:
?- paruns([8,0,4,3,7,2,-1,9,9], RunList).
RunList = [[8, 0, 4], [3, 7], [2], [-1, 9, 9]]
以下是我尝试的代码,对于上面的示例情况似乎可以工作,感谢一个建议。但是当我运行paruns([8,0,4], RunList)
时,它会打印出RunList = [[8,0,4],[]]
。任何建议将不胜感激 :)
paruns([],[]).
paruns([Head | Tail], [E, O | S]) :-
even([Head | Tail], E, Last),
odd(Last, O, Last1),
paruns(Last1, S).
even([Head | Tail], [], [Head | Tail]) :-
Head mod 2 =:= 1.
even([Head | Tail], [Head | L], Last) :-
Head mod 2 =:= 0,
even(Tail, L, Last).
even([],[],[]).
odd([Head | Tail], [], [Head, Tail]) :-
Head mod 2 =:= 0.
odd([Head | Tail], [Head | L], Last) :-
Head mod 2 =:= 1,
odd(Tail, L, Last).
odd([],[],[]).