0

我刚学了一周的 prolog,我必须编写一个 prolog 程序来计算一个元素出现在列表 L 中偶数位置的次数。

我试图找出从上午 12:00 到现在(过去 16 小时凌晨 4:00)的问题,但失败了。

1.到目前为止我尝试过的就像

count(_,[],0).
count(E,[E|L],C):-!,count(E,L,C1),C is C1+1.
count(E,[A|L],C):-atom(A),count(E,L,C),!.
count(E,[A|L],C):-count(E,A,C1),count(E,L,C2),C is C1+C2.

它只是可以计算整个列表在元素中的出现是一个列表。

2.第二个是取出列表中的第二个出现元素

我到目前为止所尝试的就像但是失败了

takeout(A,[A|B],B). 
takeout(A,[B|C],[B|D]) :- takeout(A,C,D). 
takeoutSecond(A,[B|C],[B|D]):- takeoutSecond(A,C,D). 
takeoutSecond(A,[A|B],[A|C]):- takeout(A,B,C). 

3.如果takeoutsecondlast没有reverse,你能给我一些提示吗?我会很感激的!

你能给我一些提示吗,我尽我所能。

我现在不会回复,因为我熬夜了,我为此道歉。感谢您阅读我的问题。

4

1 回答 1

1

您错过了 Prolog 模式匹配的一个非常简单的用法:即,匹配第二个元素只需忽略第一个元素

match_second(E, [_,E|Rest], Rest).

您可以将其用作您的作业的“积木”,但它非常简单,您最好将它整合到您的工作中。在谓词的头部使用该模式。

于 2012-10-29T09:53:15.947 回答