the*_*omc 1 recursion list prolog
我正在学习Prolog,特别是我专注于列表.
给定一个数n
,从返回号码列表0
来n
.
例如,给定2
输出将是[0,1,2]
这是我的代码:
num2list(0,[0]).
num2list(X,[H|T]) :-
H is X,
N is X-1,
num2list(N,T).
Run Code Online (Sandbox Code Playgroud)
输出num2list(2,X)
是X=[2,1,0].
也许解决方案是愚蠢的,但我找不到办法.我试图对我的代码进行一些修改,但我只是得到了错误.
这个程序是我的,我不想使用像"in"之类的标准谓词,因为我不知道,我想做一个纯粹的递归.
那么这是一个简单的方法呢?
我在书中看到这样做,我希望保持这种方式.
您需要一个升序列表,但谓词定义是按降序构造它.这个问题不止一个明智的解决方案,包括使用事实上的标准谓词,如between/3
.接近你正在尝试的解决方案是使用另一个参数:
num2list(N, List) :-
num2list(0, N, List).
num2list(N, N, [N]).
num2list(N0, N, [N0| List]) :-
N0 < N,
N1 is N0 + 1,
num2list(N1, N, List).
Run Code Online (Sandbox Code Playgroud)
示例电话:
?- num2list(2, L).
L = [0, 1, 2] ;
false.
Run Code Online (Sandbox Code Playgroud)
这个特定解决方案的一个问题是虚假选择点,您可以在示例调用上注意到这一点.此问题也存在于您的代码中.通过使用cut或if-then-else结构,可以使用较少声明性的解决方案轻松解决它.
归档时间: |
|
查看次数: |
168 次 |
最近记录: |