gpt4 book ai didi

numbers - 如何手动检查Prolog中的值是否为数字?

转载 作者:行者123 更新时间:2023-12-04 19:50:35 29 4
gpt4 key购买 nike

如何在 Prolog 中检查给定值是否为数字而不使用像 number 这样的内置谓词?

假设我有一个列表 [a, 1, 2, 3] .我需要一种方法来检查此列表中的每个元素是否都是数字。唯一困扰我的问题是如何在不使用 number 的情况下自行进行检查。谓词。

我试图弄清楚这一点的原因是我有一个大学作业,其中特别指出不要使用任何内置谓词。

最佳答案

您需要一些内置谓词来解决这个问题 - 除非您显式枚举所有数字(这不切实际,因为它们有无穷多个)。

1

最直接的应该是:

maplist(number, L).

或者,递归
allnumbers([]).
allnumbers([N|Ns]) :-
number(N),
allnumbers(Ns).

2

在评论中,您说“该值是作为一个原子给出的”。这可能意味着您得到 [a, '1', '2'] 或 '[a, 1, 2]`。我假设第一个。同样,您需要一个内置谓词来分析名称。依靠 ISO-Prolog 的错误我们写:
numberatom(Atom) :-
atom_chars(Atom, Chs),
catch(number_chars(_, Chs), error(syntax_error(_),_), false).

使用 numberatom/1代替 number/1 , 所以写个递归规则还是用 maplist/2
3

你可能想写一个文法而不是 catch...目标。最近有很多这样的定义,你可以看看 this question .

4

如果整个“值”以原子形式给出,您将再次需要 atom_chars/2或者您可能需要一些特定于实现的解决方案,例如 atom_to_term/3然后应用上述解决方案之一。

关于numbers - 如何手动检查Prolog中的值是否为数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13261744/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com