检查列表是否仅由数字组成 - 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 测试。
我需要编写一个谓词,如果给定列表仅包含 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 测试。