Prolog从列表开始

时间:2011-04-22 03:19:57

标签: prolog

我只是在学习prolog,我想开始解决一个基本问题,所以我至少可以知道其余部分的一般构造。

例如,

  

patt(true,l) - 始终有效并离开l

     

patt(next(char),l) - 如果char是第一个并且留下l的剩余部分

,则有效

谓词patt:匹配列表的部分并留下剩余部分或失败。 l = list

什么是Windows上的SWI-Prolog和体面的IDE ..我刚下载它并且看起来非常直接..我还抓住了BProlog并调查了其他几个..

1 个答案:

答案 0 :(得分:1)

一个更清晰的问题陈述会很好:很难从你的问题中说出来,但听起来我想要匹配列表的前缀并找回所有不属于前缀的元素。我就是这样做的:

match_prefix( []     , []     , []     ).
match_prefix( []     , [Y|Ys] , [Y|Ys] ).
match_prefix( [H|Xs] , [H|Ys] , Tail   ) :-
  match_prefix( Xs , Ys , Tail ).
  • 如果第一个参数(所需前缀)是一个空列表,第二个参数(要检查前缀的列表)是一个空列表,那么第三个参数(列表的非前缀尾部)被检查)是一个空列表。
  • 否则......如果第一个参数是一个空列表,但第二个参数是一个非空列表,我们已经用尽了所需的前缀,所以我们将第三个参数(结果)与第二个参数统一起来(清单)。
  • 否则......如果前两个参数是非空列表并且他们的头部统一起来,我们就会脱掉头部,然后逐渐减少尾部。

应该这样做(但我不能说我已经测试了它,因为我目前没有可以使用的序幕)。