【问题标题】:Prolog recursion code returning false, add in variables as input to recursive list parseProlog递归代码返回false,添加变量作为递归列表解析的输入
【发布时间】:2020-11-20 04:36:24
【问题描述】:

我正在编写序言来打印列表的每个元素,只要计数器大于 0。

printLN([],_).
printLN(_,-1).
printLN([[x,y] | T], N) :-
    write(x), write(y), nl,
    N2 is N-1,
    printLN(T, N2).

这应该打印 3 对。

printLN([[1,2],[3,4],[5,6]], 2).

这应该打印 3 对。

printLN([[1,2],[3,4],[5,6]], 8).

这应该打印第一对。

printLN([[1,2],[3,4],[5,6]], 0).

不过,我一直在说假话。有人知道为什么会这样吗?

同样,我该如何执行:

getPartialList(N) :-
    getList(LIST), printLN(LIST, N).

其中 getList 返回一个对列表,例如:

getList([[1,2],[3,4],[5,6]]).
    

【问题讨论】:

    标签: prolog


    【解决方案1】:

    不过,我一直在说假话。有人知道为什么会这样吗?

    两个错误: a) write(x) 应该写成 write(X) 其中 X 是一个逻辑变量(大写)。 b) 即使 N 0。

    printLN([],_).
    printLN(_, -1) :- !.
    printLN([[X,Y] | T], N) :-
        N > 0,
        write(X), write(Y), nl,
        N2 is N-1,
        printLN(T, N2).
    

    【讨论】:

    • 如果您也可以将N > 0 放入代码中,那就太好了;-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多