Split a number into a list of digits in Prolog

前端 未结 2 816
不知归路
不知归路 2021-01-18 11:20

I\'ve been having trouble trying to split numbers into lists using Prolog, e.g. 123456 becomes [1,2,3,4,5,6].

Can you please help me work out how to do

2条回答
  •  情话喂你
    2021-01-18 11:49

    the builtins available are ISO standard:

    ?- 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'].
    

    I also have some very old code I developed for my interpreter. := must be renamed is to run with standard Prologs. But then you are best served from above builtins...

    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.
    

    edit here the additional call required to get numbers:

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

提交回复
热议问题