katsu #1836(2007/08/04 16:49 GMT) [ Prolog ] Rating1/1=1.00
みなさんおひさしぶりです。 数値処理無しで動いています。 差分リストっぽいところは、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).
Rating1/1=1.00-0+
[ reply ]
katsu
#1836()
[
Prolog
]
Rating1/1=1.00
:-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).Rating1/1=1.00-0+
[ reply ]