检查列表是否仅由数字组成 - Prolog

Check if list is made up by numbers only - Prolog

我需要编写一个谓词,如果给定列表仅包含 Prolog 中的数字,则 returns 为真。示例:

?- isDigit(['1', '2', '3']).
true

这是我到目前为止编写的代码:

isDigit(X) :-  digit(X).
isDigit([X | Xs]) :- digit(X), isDigit(Xs).

digit(1).
digit(2).
digit(3).
digit(4).
digit(5).
digit(6).
digit(7).
digit(8).
digit(9).
digit(0).

它 returns 每次都是错误的,我不明白为什么。

谢谢

我发现您的代码有两个问题。第一:

isDigit(X) :-  digit(X).

在你的例子中,isDigit/1 的参数是一个列表,你想请求这个列表的元素。要处理列表的唯一元素,请这样写:

isDigit([X]) :-  digit(X).

其二:1'1'不一样。试试这个作为查询:

?- isDigit([1, 2, 3]).

使用 SWISH 测试。