首页 > 解决方案 > 如果输入没有被删除,如何创建一个无限列表?

问题描述

我编写了一个函数式函数,根据输入的列表告诉用户列表是否已排序。但是,如果用户输入变量而不是列表作为输入,我想输出一个无限列表。我该怎么办?这是当前代码

ordered([]).
ordered([_]).
ordered([X,Y|Ys]) :- X =< Y , ordered( [Y|Ys] ).

这是一些输入

? ordered([1,2,3]).
true
? ordered([1,5,2]).
false

我也希望变量像这样创建无限列表

? ordered(L).
L = [];
L = [_1322] ;
L = [_1322, _1323] ;
L = [_1322, _1323, _1324] ;
L = [_1322, _1323, _1324, _1325].

该列表应增加,直到用户退出,如图所示。

标签: prolog

解决方案


该列表应增加,直到用户退出,如图所示。

解决方案:

ordered([]).
ordered([_]).
ordered([X,Y|Ys]) :- X #=< Y , ordered( [Y|Ys] ). 

编辑

SWI Prolog 文档

算术表达式 X 小于或等于 Y。在对整数进行推理时,将 (=<)/2 替换为 #=</2 以获得更一般的关系。参见声明性整数算术(第 A.9.3 节)。


推荐阅读