将数字拆分为Prolog中的数字列表

5 split numbers list prolog

我一直在尝试使用Prolog将数字拆分成列表,例如123456变为[1,2,3,4,5,6].

你能帮我解决一下这个怎么办吗?

Cap*_*liC 7

内置的可用ISO标准:

?- number_codes(123456,X),format('~s',[X]).
123456
X = [49, 50, 51, 52, 53, 54].

?- number_chars(123456,X),format('~s',[X]).
123456
X = ['1', '2', '3', '4', '5', '6'].
Run Code Online (Sandbox Code Playgroud)

我也为我的翻译开发了一些非常古老的代码.:=必须重命名is为使用标准Prolog运行.但是你最好从上面建造的...

itoa(N, S) :-
    N < 0, !,
    NN := 0 - N,
    iptoa(NN, SR, _),
    reverse(SR, SN),
    append("-", SN, S).
itoa(N, S) :-
    iptoa(N, SR, _),
    reverse(SR, S).

iptoa(V, [C], 1) :-
    V < 10, !,
    C := V + 48.
iptoa(V, [C|S], Y) :-
    M := V / 10,
    iptoa(M, S, X),
    Y := X * 10,
    C := V - M * 10 + 48.
Run Code Online (Sandbox Code Playgroud)

在此编辑获取数字所需的额外通话:

?- number_codes(123456,X), maplist(plus(48),Y,X).
X = [49, 50, 51, 52, 53, 54],
Y = [1, 2, 3, 4, 5, 6].
Run Code Online (Sandbox Code Playgroud)