15. 程序⽰示例
程序 reverse
!
read X;
Y := nil;
while X do {
Y := cons (hd X) Y;
X := tl X;
};
write Y
程序 succ
!
read X;
Y := cons nil X;
write Y
程序 pred
!
read X;
Y := tl X;
write Y
16. 模拟条件语句
程序 if E then C
!
程序 if E then C1 else C2
!
Z := E;
while Z do {
Z := E;
Z := false;
C
};
!
W := true;
while Z do {
Z := false;
W := false;
C1
};
while W do {
W := false;
C2
};
17. 引⽤用其他程序
程序 reverse
!
read X;
Y := nil;
while X do {
Y := cons (hd X) Y;
X := tl X;
};
write Y
程序 append
!
read X;
A := hd X;
Y := tl X;
B := reverse A;
while B do {
Y := cons (hd B) Y;
B := tl B;
};
write Y
展开 reverse 后的程序
!
read X;
A := hd X;
Y := tl X;
!
!
B := nil;
while A do {
B := cons (hd A) B;
A := tl A;
};
while B do {
Y := cons (hd B) Y;
B := tl B;
};
write Y
18. 模拟模式匹配
read X;
!
GO := true; Y := false;
while GO do {
rewrite [D, E] by
!
[((D11.D12).D2), ((E11.E12).E2)] ⇒ [(D11.(D12.D2)), (E11.(E12.E2))]
[ ((D11.D12).D2), (nil.E2) ]
⇒ GO := false;
[ ((D11.D12).D2), nil ]
⇒ GO := false;
!
};
!
write Y;