转载自:https://mp.weixin.qq.com/s/Drd-HeLIRTZY25rsrbLsXA
英文数字单词
在财务文档(如支票)上,有时必须用全文字写数字。示例:175必须写成one-seven-five。编写谓词full_words / 1以全字显示(非负)整数。
程序文件名: p7_05.pl
% full_words(N) :- print the number N in full words (English)
% (non-negative integer) (+)
full_words(0) :-
!,
write(zero),
nl.
full_words(N) :-
integer(N),
N > 0,
full_words1(N),
nl.
full_words1(0) :- !.
full_words1(N) :-
N > 0,
Q is N // 10,
R is N mod 10,
full_words1(Q),
numberword(R,RW),
hyphen(Q),
write(RW).
hyphen(0) :- !.
hyphen(Q) :-
Q > 0,
write('-').
numberword(0,zero).
numberword(1,one).
numberword(2,two).
numberword(3,three).
numberword(4,four).
numberword(5,five).
numberword(6,six).
numberword(7,seven).
numberword(8,eight).
numberword(9,nine).
测试:
?- consult('p7_05.pl').
true.
?- full_words(65309).
six-five-three-zero-nine
true.
?-
一筐鸡蛋的问题:
1个1个拿,正好拿完。
2个2个拿,还剩1个。
3个3个拿,正好拿完。
4个4个拿,还剩1个。
5个5个拿,还差1个。
6个6个拿,还剩3个。
7个7个拿,正好拿完。
8个8个拿,还剩1个。
9个9个拿,正好拿完。
问筐里最少有多少鸡蛋?
:- use_module(library(clpfd)).
num(X,S0,S1):-
X in S0..S1, %给定变量X的范围
Y2 #= X mod 2,Y2 #= 1,
Y3 #= X mod 3,Y3 #= 0,
Y4 #= X mod 4,Y4 #= 1,
Y5 #= X mod 5,Y5 #= 4,
Y6 #= X mod 6,Y6 #= 3,
Y7 #= X mod 7,Y7 #= 0,
Y8 #= X mod 8,Y8 #= 1,
Y9 #= X mod 9,Y9 #= 0,
label([X]), %参看数独篇
write(X).
?- num(X,0,10000).
1449
X = 1449 ;
3969
X = 3969 ;
6489
X = 6489 ;
9009
X = 9009.