小编use*_*768的帖子

Prolog List Plateau

刚刚介绍了prolog,尝试通过一些简单的练习,但我一直在坚持这个.我正在尝试编写一个输出输入列表的所有子列表的程序,其中每个子列表的长度> 1,并且不能扩展到更大的子列表.它还将输出子列表列表中的起始位置.所以样本输出就是

| ?- plateau([a,a,b,2,2,2,a+1,a+1,s(1,2)], I, Len).
    I = 1,
    Len = 2 ? ;
    I = 4,
    Len = 3 ? ;
    I = 7,
    Len = 2 ? ;
    no
Run Code Online (Sandbox Code Playgroud)

我仍然对整个声明性事物感到困惑,并且在切换到命令式模式时遇到了很多麻烦.我想我希望我的程序可以做类似的事情

program([H|T],I,L):-
    T = [H1|T1] %split the tail
    ([H] = [H1] -> Count is Count+1, program(T,I,Count) 
     %if First element = second element, recurse with new values
    ; length(T,Spot), 
      %get the spot where you are in the list, so we know where sublist starts
      program(T,Spot,L) %run again, from tail, …
Run Code Online (Sandbox Code Playgroud)

list declarative prolog dcg prolog-dif

4
推荐指数
1
解决办法
697
查看次数

标签 统计

dcg ×1

declarative ×1

list ×1

prolog ×1

prolog-dif ×1