Skip to content

Commit 6309b4e

Browse files
committed
[docs/lang0] nat-even-odd.scm -- by wrap and Y -- instead of direct recursion
1 parent a142dfd commit 6309b4e

File tree

3 files changed

+16
-16
lines changed

3 files changed

+16
-16
lines changed

TODO.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
[docs/lang0] remove `(fix)`
2-
[docs/lang0] remove `(fixpoint)`
1+
[docs/lang0] remove `(fix)` & `(fixpoint)`
32
[docs/lang0] 用中文重新整理 lambda encoding 相关的知识,形成一本书。
43
[docs/lang0] 用中文重新整理 lambda encoding 和 self type 相关的知识。
54
[lang0] 支持直接递归函数与相互递归函数,不能判断等价的地方就不判断。

docs/lang0/examples/nat-even-odd.scm

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,25 @@
11
(import "./boolean.scm" true false if and or not)
22
(import "./nat-church.scm" zero add1 sub1 zero?)
33
(import "./nat-church.scm" one two three four)
4+
(import "./fix.scm" Y)
45

5-
(define (even? n)
6-
(if (zero? n) true
7-
(if (zero? (sub1 n)) false
8-
(even? (sub1 (sub1 n))))))
6+
(define even?-wrap
7+
(lambda (even?)
8+
(lambda (n)
9+
(if (zero? n) true
10+
(if (zero? (sub1 n)) false
11+
(even? (sub1 (sub1 n))))))))
912

10-
(define (odd? n)
11-
(if (zero? n) false
12-
(if (zero? (sub1 n)) true
13-
(odd? (sub1 (sub1 n))))))
13+
(define even? (Y even?-wrap))
1414

15-
even?
16-
odd?
15+
(define odd?-wrap
16+
(lambda (odd?)
17+
(lambda (n)
18+
(if (zero? n) false
19+
(if (zero? (sub1 n)) true
20+
(odd? (sub1 (sub1 n))))))))
1721

18-
(assert-equal even? even?)
19-
(assert-equal odd? odd?)
22+
(define odd? (Y odd?-wrap))
2023

2124
(assert-equal
2225
(even? zero)

docs/lang0/examples/nat-even-odd.scm.out

Lines changed: 0 additions & 2 deletions
This file was deleted.

0 commit comments

Comments
 (0)