PROLOG程序的语义和练习

时间:2019-02-12 12:54:51

标签: prolog logic

首先,我对程序的语义有所怀疑,例如:

length([],0).
length([_|L],N):-
    length(L,N0),
    N is N0 + 1.

第一个指令意味着基本情况,或者还有其他含义?

我必须编写一个prolog程序,给定一个数字,它返回一个从0到给定数字的数字列表。 例如,当输入为5时,输出为[0,1,2,3,4,5]。

我正在寻找解决此问题的方法,但我不知道如何开始。

1 个答案:

答案 0 :(得分:1)

SWI-Prologs库中有一个谓词,它几乎可以完成您需要做的事情。它称为numlist/3。您可以将其与上下边界一起使用:

?- numlist(1, 5, L).
L = [1, 2, 3, 4, 5].

还有here the implementation

numlist(L, U, Ns) :-
    must_be(integer, L),
    must_be(integer, U),
    L =< U,
    numlist_(L, U, Ns).

numlist_(U, U, List) :-
    !,
    List = [U].
numlist_(L, U, [L|Ns]) :-
    L2 is L+1,
    numlist_(L2, U, Ns).

您可以完全摆脱上半部分的内容,而失去一个参数(您的“下限”仅为1)。

如果您对此有所了解,应该可以弄清楚。