2:- module(string2digit,[string2digit/2,string2score/2]). 3
4:- use_module(library(lists),[member/2,append/3]). 5
9
10string2digit(X,Y):- 11 atom(X),
12 member(Sep,['-','~']),
13 atomic_list_concat([Tens,Ones],Sep,X),
14 string2digit(Tens,TensNum), TensNum < 91, TensNum > 19,
15 string2digit(Ones,OnesNum), OnesNum < 10, !,
16 Y is TensNum+OnesNum.
17
18string2digit(X,Y):- 19 atom(X),
20 member(Sep,['-','~']),
21 atomic_list_concat([Ones,Cens],Sep,X),
22 string2digit(Ones,OnesNum),
23 string2digit(Cens,CensNum), OnesNum < CensNum, !,
24 Y is OnesNum*CensNum.
25
26string2digit(X,Y):- 27 atom(X),
28 s2d(X,Y), !.
29
30string2digit(X,Y):- 31 name(X,Codes1),
32 append(Codes0,[44,A,B,C,44,D,E,F],Codes1),
33 append(Codes0,[A,B,C,D,E,F],Codes2),
34 name(Y,Codes2),
35 number(Y), !.
36
37string2digit(X,Y):- 38 name(X,Codes1),
39 append(Codes0,[44,A,B,C],Codes1),
40 append(Codes0,[A,B,C],Codes2),
41 name(Y,Codes2),
42 number(Y), !.
43
44string2digit(X,Y):- 45 name(X,Codes),
46 name(Y,Codes),
47 number(Y), !.
48
49
53
54string2score(X,Y):-
55 name(X,[N1|Codes]),
56 N1 > 47, N1 < 58,
57 append(_,[45,N2|_],Codes),
58 N2 > 47, N2 < 58, !, Y=X.
59
60
64
65s2d(zero,0).
66s2d(one,1).
67s2d(two,2).
68s2d(three,3).
69s2d(four,4).
70s2d(five,5).
71s2d(six,6).
72s2d(seven,7).
73s2d(eight,8).
74s2d(nine,9).
75s2d(ten,10).
76s2d(eleven,11).
77s2d(twelve,12).
78s2d(thirteen,13).
79s2d(fourteen,14).
80s2d(fifteen,15).
81s2d(sixteen,16).
82s2d(seventeen,17).
83s2d(eighteen,18).
84s2d(nineteen,19).
85s2d(twenty,20).
86s2d(thirty,30).
87s2d(forty,40).
88s2d(fifty,50).
89s2d(sixty,60).
90s2d(seventy,70).
91s2d(eighty,80).
92s2d(ninety,90).
93s2d(hundred,100).
94s2d(thousand,1000).
95s2d(million,1000000).
96s2d(billion,1000000000).
97s2d(trillion,1000000000000)