【问题标题】:PROLOG program semantic and exercisePROLOG程序语义和练习
【发布时间】:2019-02-12 12:54:50
【问题描述】:

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

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

第一条指令表示基本情况,还是有其他含义?

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

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

【问题讨论】:

  • 是的,第一条规则是基本情况。您尝试过什么来生成数字列表?

标签: prolog logic


【解决方案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).

你可以完全摆脱这个的上半部分,并且失去一个论点(你的 Lower 只是 1)。

如果你稍微玩一下这个,你应该能够弄清楚。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多