【问题标题】:Prolog list consecutive pairsProlog 列出连续对
【发布时间】:2016-07-19 04:55:34
【问题描述】:

如果我有一个列表 [1,2,3,4,5],我怎样才能获得连续的对并对它们执行操作?例如,我想获取 (1,2) 并对它们执行 doSomething。在下一次迭代中,我想得到 (2,3),依此类推。这是我目前所拥有的:

listpairs([H1,H2|T]):-doSomething(H1,H2), listpairs([H2,H3|T]).

我可以进行第一次迭代,但是在比较 H2 和 H3 时我被卡住了。

【问题讨论】:

    标签: list loops prolog iteration


    【解决方案1】:

    首先,如果你有[1,2,3,4,5],那么[H1,H2|T] 设置H1 = 1H2 = 2T = [3,4,5]。 H1 和 H2 是您要处理的两个数字。 [H2|T] = [2,3,4,5] 列出了您可以继续计算的列表。 (毕竟它是从 2,3 开始的,所以递归它会给你下两个你想要的数字。)

    所以你的递归案例应该是:

    listpairs([H1,H2|T]) :- doSomething(H1,H2), listpairs([H2|T]).
    

    即:取出 H1 和 H2,对它们做一些事情,然后放回 H2 并递归。

    其次,你需要一个只剩下一个元素的基本情况:

    listpairs([H]).
    

    如果你省略了这个,如果列表有例如,你将永远无法达到基本情况。 5 个元素,因为我们总是把 1 放回去。 (即,您递归的列表永远不会为空。)

    【讨论】:

      【解决方案2】:

      您可以使用这种惯用的方法,而不是显式的“循环”:

      forall(append(_,[X,Y|_],List), doSomething(X,Y)).
      

      【讨论】:

        猜你喜欢
        • 2015-01-18
        • 1970-01-01
        • 2021-12-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-25
        相关资源
        最近更新 更多