gpt4 book ai didi

list - Prolog将整数转换为数字列表

转载 作者:行者123 更新时间:2023-12-01 10:01:05 25 4
gpt4 key购买 nike

我想写一个谓词,一个整数和一个数字列表,如果 Digits 以正确的顺序包含整数的数字,则成功,即:

?-digit_lists( Num, [1,2,3,4] ).
[Num == 1234].

这是我到目前为止所拥有的:
my_digits( 0, [] ).
my_digits(N,[A|As]) :- N1 is floor(N/10), A is N mod 10, my_digits(N1, As).

最佳答案

如前所述,请考虑使用有限域约束:

:- use_module(library(clpfd)).

number_digits(Number, 0, [Number]) :- Number in 0..9.
number_digits(Number, N, [Digit|Digits]) :-
Digit in 0..9,
N #= N1 + 1,
Number #= Digit*10^N + Number1,
Number1 #>= 0,
N #> 0,
number_digits(Number1, N1, Digits).

这个谓词可以在所有方向上使用。实例化任一参数的示例:
?- number_digits(215, _, Ds).
Ds = [2, 1, 5] ;
false.

?- number_digits(N, _, [4,3,2,1]).
N = 4321 ;
false.

还有两个更一般的查询:
?- number_digits(N, _, [A,B]).
N in 10..99,
_G2018+B#=N,
_G2018 in 10..90,
A*10#=_G2018,
A in 0..9,
B in 0..9 ;
false.

?- number_digits(N, _, Ds).
Ds = [N],
N in 0..9 ;
Ds = [_G843, _G846],
N in 0..99,
_G870+_G846#=N,
_G870 in 0..90,
_G843*10#=_G870,
_G843 in 0..9,
_G846 in 0..9 ;
etc.

关于list - Prolog将整数转换为数字列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16047339/

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