PROLOG程序语义与练习

PROLOG程序语义与练习,prolog,logic,Prolog,Logic,首先,我对程序的语义有疑问,例如: length([],0). length([_|L],N):- length(L,N0), N is N0 + 1. 第一条指令是指基本情况,还是有其他含义 我必须编写一个prolog程序,给定一个数字,返回一个从0到给定数字的数字列表。 例如,当输入为5时,输出为[0,1,2,3,4,5] 我正在寻找这个问题的解决方案,但我不知道如何开始。SWI Prologs库中有一个谓词,它几乎完成了您需要做的事情。它被称为numlist/3。可以将其

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

length([],0).
length([_|L],N):-
    length(L,N0),
    N is N0 + 1.
第一条指令是指基本情况,还是有其他含义

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


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

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

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

numlist(左、右、北):-
_必须是(整数,L),
_必须是(整数,U),
L=
你可以完全去掉上半部分,丢掉一个参数(下半部分只有1)


如果你稍微玩弄一下,你应该能够弄明白。

是的,第一条规则是基本情况。您尝试了哪些方法来生成数字列表?
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).