【问题标题】:Having a List as an element in the list Prolog将列表作为列表 Prolog 中的元素
【发布时间】:2019-03-22 00:47:15
【问题描述】:

给定一个列表 (List1),我尝试对列表中的每个数字求平方并在一个新列表 (List2) 中返回答案,其中 List2 中的每个元素都采用 (Xi, Ji) 形式。

?- square([1,2,3,], L).
L = [[1,1],[2,4],[3,9]].

这是我的代码:

square([], []).
square([N|Tail], [SqrdN|SqrdTail]) :-
    SqrdN is [N|N*N],
    square(Tail, SqrdTail).

这给了我一个类型错误:预期为 '[]',找到了 `[1|1*1]'(复合)(“x”必须包含一个字符)。

我怎样才能做到这一点?

【问题讨论】:

    标签: list recursion prolog


    【解决方案1】:

    您将输出表示([Item, SquaredItem] 的列表)与平方的计算混合在一起,并且您的输出项也不是两个项目的正确列表。

    使用库 clpfd:

    :- use_module(library(clpfd)).
    square([], []).
    square([N|Tail], [[N, SqrdN]|SqrdTail]) :-
        SqrdN #= N*N,
        square(Tail, SqrdTail).
    

    或没有 clpfd:

    square([], []).
    square([N|Tail], [[N, SqrdN]|SqrdTail]) :-
        SqrdN is N*N,
        square(Tail, SqrdTail).
    

    【讨论】:

      猜你喜欢
      • 2015-02-05
      • 1970-01-01
      • 1970-01-01
      • 2016-07-18
      • 2011-05-23
      • 2011-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多