Comment detail

整数の漢数字表記 (Nested Flatten)
みなさんおひさしぶりです。
数値処理無しで動いています。
差分リストっぽいところは、DCG使ってます。
最後にガード'也'を外すところが格好悪いです。
しかし、prologらしいさって一体なんでしょうね。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
:-encoding('utf8').

tr(I,R):-atom_chars(I,I1),tr(I1,_,_,R0),delete(R0,'也',R1),atom_chars(R,R1).

tr([],B2,B1,[]):-trb1(B1),trb2(B2).
tr([I|Is],B2,B1,R):-
        tr(Is,B2s,[B1c|B1],Rs),
        succB2(B1c,B2s,B2),
        trnr(B1c,B2s,Rs,I,R,Rs).

succB2('千')-->!,[_].
succB2(_)-->[].

b2(B,Rs)-->{member(B,Rs)},[].
b2(B,_)-->[B].

trnr(_,_,_,'0')-->!,[].
trnr(' ',[B2|_],R,I)-->trns(I),[],b2(B2,R).
trnr(B1,[B2|_],R,I)-->trns(I),[B1],b2(B2,R).

trns(1)-->!,[].
trns(I)-->trn(I).

                        trn('1')-->[].
trn('2')-->['二'].      trn('3')-->['三'].
trn('4')-->['四'].      trn('5')-->['五'].
trn('6')-->['六'].      trn('7')-->['七'].
trn('8')-->['八'].      trn('9')-->['九'].

trb1(L):-L=[' ','十','百','千'|L].

trb2(['也','万','億','兆']).

:-tr('1732050807568877',X),writeln(X).

Index

Feed

Other

Link

Pathtraq

loading...