Prolog を使用して数字をリストに分割しようとして問題が発生しました。たとえば、 123456 は になり[1,2,3,4,5,6]
ます。
これを行う方法を教えてください。
利用可能なビルトインは 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'].
インタープリター用に開発した非常に古いコードもあります。標準の Prologs で実行するには、名前を:=
変更する必要があります。is
しかし、それからあなたは上記のビルトインから最もよく奉仕されます...
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.
ここで、番号を取得するために必要な追加の呼び出しを編集します。
?- number_codes(123456,X), maplist(plus(48),Y,X).
X = [49, 50, 51, 52, 53, 54],
Y = [1, 2, 3, 4, 5, 6].