Data update
This commit is contained in:
parent
5150844a7d
commit
4bb20c9b71
7735 changed files with 38060 additions and 199180 deletions
|
|
@ -1,178 +0,0 @@
|
|||
class Church { // identity Church function by default
|
||||
proc this(f: shared Church): shared Church { return f; }
|
||||
}
|
||||
|
||||
// utility Church functions...
|
||||
class ComposeChurch : Church {
|
||||
const l, r: shared Church;
|
||||
override proc this(f: shared Church): shared Church {
|
||||
return l(r(f)); }
|
||||
}
|
||||
|
||||
proc composeChurch(chl: shared Church, chr: shared Church) : shared Church {
|
||||
return new shared ComposeChurch(chl, chr): shared Church;
|
||||
}
|
||||
|
||||
class ConstChurch : Church {
|
||||
const ch: shared Church;
|
||||
override proc this(f: shared Church): shared Church { return ch; }
|
||||
}
|
||||
|
||||
proc constChurch(ch: shared Church): shared Church {
|
||||
return new shared ConstChurch(ch): shared Church;
|
||||
}
|
||||
|
||||
// Church constants...
|
||||
const cIdentityChurch: shared Church = new shared Church();
|
||||
const cChurchZero = constChurch(cIdentityChurch);
|
||||
const cChurchOne = cIdentityChurch; // default is identity!
|
||||
|
||||
// Church functions...
|
||||
class SuccChurch: Church {
|
||||
const curr: shared Church;
|
||||
override proc this(f: shared Church): shared Church {
|
||||
return composeChurch(f, curr(f)); }
|
||||
}
|
||||
|
||||
proc succChurch(ch: shared Church): shared Church {
|
||||
return new shared SuccChurch(ch) : shared Church;
|
||||
}
|
||||
|
||||
class AddChurch: Church {
|
||||
const chf, chs: shared Church;
|
||||
override proc this(f: shared Church): shared Church {
|
||||
return composeChurch(chf(f), chs(f)); }
|
||||
}
|
||||
|
||||
proc addChurch(cha: shared Church, chb: shared Church): shared Church {
|
||||
return new shared AddChurch(cha, chb) : shared Church;
|
||||
}
|
||||
|
||||
class MultChurch: Church {
|
||||
const chf, chs: shared Church;
|
||||
override proc this(f: shared Church): shared Church {
|
||||
return composeChurch(chf, chs)(f); }
|
||||
}
|
||||
|
||||
proc multChurch(cha: shared Church, chb: shared Church): shared Church {
|
||||
return new shared MultChurch(cha, chb) : shared Church;
|
||||
}
|
||||
|
||||
class ExpChurch : Church {
|
||||
const b, e : shared Church;
|
||||
override proc this(f : shared Church): shared Church { return e(b)(f); }
|
||||
}
|
||||
|
||||
proc expChurch(chbs: shared Church, chexp: shared Church): shared Church {
|
||||
return new shared ExpChurch(chbs, chexp) : shared Church;
|
||||
}
|
||||
|
||||
class IsZeroChurch : Church {
|
||||
const c : shared Church;
|
||||
override proc this(f : shared Church): shared Church {
|
||||
return c(constChurch(cChurchZero))(cChurchOne)(f); }
|
||||
}
|
||||
|
||||
proc isZeroChurch(ch: shared Church): shared Church {
|
||||
return new shared IsZeroChurch(ch) : shared Church;
|
||||
}
|
||||
|
||||
class PredChurch : Church {
|
||||
const c : shared Church;
|
||||
class XFunc : Church {
|
||||
const cf, fnc: shared Church;
|
||||
class GFunc : Church {
|
||||
const fnc: shared Church;
|
||||
class HFunc : Church {
|
||||
const fnc, g: shared Church;
|
||||
override proc this(f : shared Church): shared Church {
|
||||
return f(g(fnc)); }
|
||||
}
|
||||
override proc this(f : shared Church): shared Church {
|
||||
return new shared HFunc(fnc, f): shared Church; }
|
||||
}
|
||||
override proc this(f : shared Church): shared Church {
|
||||
const prd = new shared GFunc(fnc): shared Church;
|
||||
return cf(prd)(constChurch(f))(cIdentityChurch); }
|
||||
}
|
||||
override proc this(f : shared Church): shared Church {
|
||||
return new shared XFunc(c, f) : shared Church; }
|
||||
}
|
||||
|
||||
proc predChurch(ch: shared Church): shared Church {
|
||||
return new shared PredChurch(ch) : shared Church;
|
||||
}
|
||||
|
||||
class SubChurch : Church {
|
||||
const a, b : shared Church;
|
||||
class PredFunc : Church {
|
||||
override proc this(f : shared Church): shared Church {
|
||||
return new shared PredChurch(f): shared Church;
|
||||
}
|
||||
}
|
||||
override proc this(f : shared Church): shared Church {
|
||||
const prdf = new shared PredFunc(): shared Church;
|
||||
return b(prdf)(a)(f); }
|
||||
}
|
||||
|
||||
proc subChurch(cha: shared Church, chb: shared Church): shared Church {
|
||||
return new shared SubChurch(cha, chb) : shared Church;
|
||||
}
|
||||
|
||||
class DivrChurch : Church {
|
||||
const v, d : shared Church;
|
||||
override proc this(f : shared Church): shared Church {
|
||||
const loopr = constChurch(succChurch(divr(v, d)));
|
||||
return v(loopr)(cChurchZero)(f); }
|
||||
}
|
||||
|
||||
proc divr(n: shared Church, d : shared Church): shared Church {
|
||||
return new shared DivrChurch(subChurch(n, d), d): shared Church;
|
||||
}
|
||||
|
||||
proc divChurch(chdvdnd: shared Church, chdvsr: shared Church): shared Church {
|
||||
return divr(succChurch(chdvdnd), chdvsr);
|
||||
}
|
||||
|
||||
// conversion functions...
|
||||
proc loopChurch(i: int, ch: shared Church) : shared Church { // tail call...
|
||||
return if (i <= 0) then ch else loopChurch(i - 1, succChurch(ch));
|
||||
}
|
||||
|
||||
proc churchFromInt(n: int): shared Church {
|
||||
return loopChurch(n, cChurchZero); // can't embed "worker" proc!
|
||||
}
|
||||
|
||||
class IntChurch : Church {
|
||||
const value: int;
|
||||
}
|
||||
|
||||
class IncChurch : Church {
|
||||
override proc this(f: shared Church): shared Church {
|
||||
const tst = f: IntChurch;
|
||||
if tst != nil {
|
||||
return new shared IntChurch(tst.value + 1): shared Church; }
|
||||
else return f; } // shouldn't happen!
|
||||
}
|
||||
|
||||
proc intFromChurch(ch: shared Church): int {
|
||||
const zero = new shared IntChurch(0): shared Church;
|
||||
const tst = ch(new shared IncChurch(): shared Church)(zero): IntChurch;
|
||||
if tst != nil { return tst.value; }
|
||||
else return -1; // should never happen!
|
||||
}
|
||||
|
||||
// testing...
|
||||
const ch3 = churchFromInt(3); const ch4 = succChurch(ch3);
|
||||
const ch11 = churchFromInt(11); const ch12 = succChurch(ch11);
|
||||
write(intFromChurch(addChurch(ch3, ch4)), ", ");
|
||||
write(intFromChurch(multChurch(ch3, ch4)), ", ");
|
||||
write(intFromChurch(expChurch(ch3, ch4)), ", ");
|
||||
write(intFromChurch(expChurch(ch4, ch3)), ", ");
|
||||
write(intFromChurch(isZeroChurch(cChurchZero)), ", ");
|
||||
write(intFromChurch(isZeroChurch(ch3)), ", ");
|
||||
write(intFromChurch(predChurch(ch4)), ", ");
|
||||
write(intFromChurch(predChurch(cChurchZero)), ", ");
|
||||
write(intFromChurch(subChurch(ch11, ch3)), ", ");
|
||||
write(intFromChurch(divChurch(ch11, ch3)), ", ");
|
||||
writeln(intFromChurch(divChurch(ch12, ch3)));
|
||||
|
|
@ -1,91 +1,86 @@
|
|||
(phixonline)-->
|
||||
<span style="color: #008080;">with</span> <span style="color: #008080;">javascript_semantics</span>
|
||||
with javascript_semantics
|
||||
|
||||
<span style="color: #008080;">type</span> <span style="color: #000000;">church</span><span style="color: #0000FF;">(</span><span style="color: #004080;">object</span> <span style="color: #000000;">c</span><span style="color: #0000FF;">)</span>
|
||||
<span style="color: #000080;font-style:italic;">-- eg {r_add,1,{a,b}}</span>
|
||||
<span style="color: #008080;">return</span> <span style="color: #004080;">sequence</span><span style="color: #0000FF;">(</span><span style="color: #000000;">c</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">and</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">c</span><span style="color: #0000FF;">)=</span><span style="color: #000000;">3</span>
|
||||
<span style="color: #008080;">and</span> <span style="color: #004080;">integer</span><span style="color: #0000FF;">(</span><span style="color: #000000;">c</span><span style="color: #0000FF;">[</span><span style="color: #000000;">1</span><span style="color: #0000FF;">])</span> <span style="color: #008080;">and</span> <span style="color: #004080;">integer</span><span style="color: #0000FF;">(</span><span style="color: #000000;">c</span><span style="color: #0000FF;">[</span><span style="color: #000000;">2</span><span style="color: #0000FF;">])</span>
|
||||
<span style="color: #008080;">and</span> <span style="color: #004080;">sequence</span><span style="color: #0000FF;">(</span><span style="color: #000000;">c</span><span style="color: #0000FF;">[</span><span style="color: #000000;">3</span><span style="color: #0000FF;">])</span> <span style="color: #008080;">and</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">c</span><span style="color: #0000FF;">[</span><span style="color: #000000;">3</span><span style="color: #0000FF;">])=</span><span style="color: #000000;">2</span>
|
||||
<span style="color: #008080;">end</span> <span style="color: #008080;">type</span>
|
||||
type church(object c)
|
||||
-- eg {r_add,1,{a,b}}
|
||||
return sequence(c) and length(c)=3
|
||||
and integer(c[1]) and integer(c[2])
|
||||
and sequence(c[3]) and length(c[3])=2
|
||||
end type
|
||||
|
||||
<span style="color: #008080;">function</span> <span style="color: #000000;">succ</span><span style="color: #0000FF;">(</span><span style="color: #000000;">church</span> <span style="color: #000000;">c</span><span style="color: #0000FF;">)</span>
|
||||
<span style="color: #000080;font-style:italic;">-- eg {r_add,1,{a,b}} => {r_add,2,{a,b}} aka a+b -> a+b+b</span>
|
||||
<span style="color: #000000;">c</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">deep_copy</span><span style="color: #0000FF;">(</span><span style="color: #000000;">c</span><span style="color: #0000FF;">)</span>
|
||||
<span style="color: #000000;">c</span><span style="color: #0000FF;">[</span><span style="color: #000000;">2</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">+=</span> <span style="color: #000000;">1</span>
|
||||
<span style="color: #008080;">return</span> <span style="color: #000000;">c</span>
|
||||
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
|
||||
function succ(church c)
|
||||
-- eg {add,1,{a,b}} => {add,2,{a,b}} aka a+b => a+b+b
|
||||
c = deep_copy(c)
|
||||
c[2] += 1
|
||||
return c
|
||||
end function
|
||||
|
||||
<span style="color: #000080;font-style:italic;">-- three normal integer-handling routines...</span>
|
||||
<span style="color: #008080;">function</span> <span style="color: #000000;">add</span><span style="color: #0000FF;">(</span><span style="color: #004080;">integer</span> <span style="color: #000000;">n</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">a</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">b</span><span style="color: #0000FF;">)</span>
|
||||
<span style="color: #008080;">for</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #000000;">n</span> <span style="color: #008080;">do</span>
|
||||
<span style="color: #000000;">a</span> <span style="color: #0000FF;">+=</span> <span style="color: #000000;">b</span>
|
||||
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
|
||||
<span style="color: #008080;">return</span> <span style="color: #000000;">a</span>
|
||||
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
|
||||
<span style="color: #008080;">constant</span> <span style="color: #000000;">r_add</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">routine_id</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"add"</span><span style="color: #0000FF;">)</span>
|
||||
-- three normal integer-handling routines...
|
||||
function add(integer n, a, b)
|
||||
for i=1 to n do
|
||||
a += b
|
||||
end for
|
||||
return a
|
||||
end function
|
||||
|
||||
<span style="color: #008080;">function</span> <span style="color: #000000;">mul</span><span style="color: #0000FF;">(</span><span style="color: #004080;">integer</span> <span style="color: #000000;">n</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">a</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">b</span><span style="color: #0000FF;">)</span>
|
||||
<span style="color: #008080;">for</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #000000;">n</span> <span style="color: #008080;">do</span>
|
||||
<span style="color: #000000;">a</span> <span style="color: #0000FF;">*=</span> <span style="color: #000000;">b</span>
|
||||
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
|
||||
<span style="color: #008080;">return</span> <span style="color: #000000;">a</span>
|
||||
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
|
||||
<span style="color: #008080;">constant</span> <span style="color: #000000;">r_mul</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">routine_id</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"mul"</span><span style="color: #0000FF;">)</span>
|
||||
function mul(integer n, a, b)
|
||||
for i=1 to n do
|
||||
a *= b
|
||||
end for
|
||||
return a
|
||||
end function
|
||||
|
||||
<span style="color: #008080;">function</span> <span style="color: #000000;">pow</span><span style="color: #0000FF;">(</span><span style="color: #004080;">integer</span> <span style="color: #000000;">n</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">a</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">b</span><span style="color: #0000FF;">)</span>
|
||||
<span style="color: #008080;">for</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #000000;">n</span> <span style="color: #008080;">do</span>
|
||||
<span style="color: #000000;">a</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">power</span><span style="color: #0000FF;">(</span><span style="color: #000000;">a</span><span style="color: #0000FF;">,</span><span style="color: #000000;">b</span><span style="color: #0000FF;">)</span>
|
||||
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
|
||||
<span style="color: #008080;">return</span> <span style="color: #000000;">a</span>
|
||||
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
|
||||
<span style="color: #008080;">constant</span> <span style="color: #000000;">r_pow</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">routine_id</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"pow"</span><span style="color: #0000FF;">)</span>
|
||||
function pow(integer n, a, b)
|
||||
for i=1 to n do
|
||||
a = power(a,b)
|
||||
end for
|
||||
return a
|
||||
end function
|
||||
|
||||
<span style="color: #000080;font-style:italic;">-- ...and three church constructors to match
|
||||
-- (no maths here, just pure static data)</span>
|
||||
<span style="color: #008080;">function</span> <span style="color: #000000;">addch</span><span style="color: #0000FF;">(</span><span style="color: #000000;">church</span> <span style="color: #000000;">c</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">d</span><span style="color: #0000FF;">)</span>
|
||||
<span style="color: #000000;">church</span> <span style="color: #000000;">res</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">r_add</span><span style="color: #0000FF;">,</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">c</span><span style="color: #0000FF;">,</span><span style="color: #000000;">d</span><span style="color: #0000FF;">}}</span>
|
||||
<span style="color: #008080;">return</span> <span style="color: #000000;">res</span>
|
||||
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
|
||||
-- ...and three church constructors to match
|
||||
-- (no maths here, just pure static data)
|
||||
function addch(church c, d)
|
||||
church res = {add,1,{c,d}}
|
||||
return res
|
||||
end function
|
||||
|
||||
<span style="color: #008080;">function</span> <span style="color: #000000;">mulch</span><span style="color: #0000FF;">(</span><span style="color: #000000;">church</span> <span style="color: #000000;">c</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">d</span><span style="color: #0000FF;">)</span>
|
||||
<span style="color: #000000;">church</span> <span style="color: #000000;">res</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">r_mul</span><span style="color: #0000FF;">,</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">c</span><span style="color: #0000FF;">,</span><span style="color: #000000;">d</span><span style="color: #0000FF;">}}</span>
|
||||
<span style="color: #008080;">return</span> <span style="color: #000000;">res</span>
|
||||
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
|
||||
function mulch(church c, d)
|
||||
church res = {mul,1,{c,d}}
|
||||
return res
|
||||
end function
|
||||
|
||||
<span style="color: #008080;">function</span> <span style="color: #000000;">powch</span><span style="color: #0000FF;">(</span><span style="color: #000000;">church</span> <span style="color: #000000;">c</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">d</span><span style="color: #0000FF;">)</span>
|
||||
<span style="color: #000000;">church</span> <span style="color: #000000;">res</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">r_pow</span><span style="color: #0000FF;">,</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">c</span><span style="color: #0000FF;">,</span><span style="color: #000000;">d</span><span style="color: #0000FF;">}}</span>
|
||||
<span style="color: #008080;">return</span> <span style="color: #000000;">res</span>
|
||||
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
|
||||
function powch(church c, d)
|
||||
church res = {pow,1,{c,d}}
|
||||
return res
|
||||
end function
|
||||
|
||||
<span style="color: #008080;">function</span> <span style="color: #000000;">tointch</span><span style="color: #0000FF;">(</span><span style="color: #000000;">church</span> <span style="color: #000000;">c</span><span style="color: #0000FF;">)</span>
|
||||
<span style="color: #000080;font-style:italic;">-- note this is where the bulk of any processing happens</span>
|
||||
<span style="color: #0000FF;">{</span><span style="color: #004080;">integer</span> <span style="color: #000000;">rid</span><span style="color: #0000FF;">,</span> <span style="color: #004080;">integer</span> <span style="color: #000000;">n</span><span style="color: #0000FF;">,</span> <span style="color: #004080;">object</span> <span style="color: #000000;">x</span><span style="color: #0000FF;">}</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">c</span>
|
||||
<span style="color: #000000;">x</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">deep_copy</span><span style="color: #0000FF;">(</span><span style="color: #000000;">x</span><span style="color: #0000FF;">)</span>
|
||||
<span style="color: #008080;">for</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">x</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">do</span>
|
||||
<span style="color: #008080;">if</span> <span style="color: #000000;">church</span><span style="color: #0000FF;">(</span><span style="color: #000000;">x</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">])</span> <span style="color: #008080;">then</span> <span style="color: #000000;">x</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">tointch</span><span style="color: #0000FF;">(</span><span style="color: #000000;">x</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">])</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
|
||||
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
|
||||
<span style="color: #000080;font-style:italic;">-- return call_func(rid,n&x)</span>
|
||||
<span style="color: #000000;">x</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">deep_copy</span><span style="color: #0000FF;">({</span><span style="color: #000000;">n</span><span style="color: #0000FF;">})&</span><span style="color: #7060A8;">deep_copy</span><span style="color: #0000FF;">(</span><span style="color: #000000;">x</span><span style="color: #0000FF;">)</span>
|
||||
<span style="color: #008080;">return</span> <span style="color: #7060A8;">call_func</span><span style="color: #0000FF;">(</span><span style="color: #000000;">rid</span><span style="color: #0000FF;">,</span><span style="color: #000000;">x</span><span style="color: #0000FF;">)</span>
|
||||
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
|
||||
function tointch(church c)
|
||||
-- note this is where the bulk of any processing happens
|
||||
{integer rid, integer n, object x} = c
|
||||
x = deep_copy(x)
|
||||
for i=1 to length(x) do
|
||||
if church(x[i]) then x[i] = tointch(x[i]) end if
|
||||
end for
|
||||
-- return call_func(rid,n&x)
|
||||
x = deep_copy({n})&deep_copy(x)
|
||||
return call_func(rid,x)
|
||||
end function
|
||||
|
||||
<span style="color: #008080;">constant</span> <span style="color: #000000;">church</span> <span style="color: #000000;">zero</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">r_add</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">0</span><span style="color: #0000FF;">,</span><span style="color: #000000;">1</span><span style="color: #0000FF;">}}</span>
|
||||
constant church zero = {add,0,{0,1}}
|
||||
|
||||
<span style="color: #008080;">function</span> <span style="color: #000000;">inttoch</span><span style="color: #0000FF;">(</span><span style="color: #004080;">integer</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">)</span>
|
||||
<span style="color: #008080;">if</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #000000;">0</span> <span style="color: #008080;">then</span>
|
||||
<span style="color: #008080;">return</span> <span style="color: #000000;">zero</span>
|
||||
<span style="color: #008080;">else</span>
|
||||
<span style="color: #008080;">return</span> <span style="color: #000000;">succ</span><span style="color: #0000FF;">(</span><span style="color: #000000;">inttoch</span><span style="color: #0000FF;">(</span><span style="color: #000000;">i</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">))</span>
|
||||
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
|
||||
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
|
||||
function inttoch(integer i)
|
||||
if i=0 then
|
||||
return zero
|
||||
else
|
||||
return succ(inttoch(i-1))
|
||||
end if
|
||||
end function
|
||||
|
||||
<span style="color: #000000;">church</span> <span style="color: #000000;">three</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">succ</span><span style="color: #0000FF;">(</span><span style="color: #000000;">succ</span><span style="color: #0000FF;">(</span><span style="color: #000000;">succ</span><span style="color: #0000FF;">(</span><span style="color: #000000;">zero</span><span style="color: #0000FF;">))),</span>
|
||||
<span style="color: #000000;">four</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">succ</span><span style="color: #0000FF;">(</span><span style="color: #000000;">three</span><span style="color: #0000FF;">)</span>
|
||||
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"three -> %d\n"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">tointch</span><span style="color: #0000FF;">(</span><span style="color: #000000;">three</span><span style="color: #0000FF;">))</span>
|
||||
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"four -> %d\n"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">tointch</span><span style="color: #0000FF;">(</span><span style="color: #000000;">four</span><span style="color: #0000FF;">))</span>
|
||||
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"three + four -> %d\n"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">tointch</span><span style="color: #0000FF;">(</span><span style="color: #000000;">addch</span><span style="color: #0000FF;">(</span><span style="color: #000000;">three</span><span style="color: #0000FF;">,</span><span style="color: #000000;">four</span><span style="color: #0000FF;">)))</span>
|
||||
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"three * four -> %d\n"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">tointch</span><span style="color: #0000FF;">(</span><span style="color: #000000;">mulch</span><span style="color: #0000FF;">(</span><span style="color: #000000;">three</span><span style="color: #0000FF;">,</span><span style="color: #000000;">four</span><span style="color: #0000FF;">)))</span>
|
||||
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"three ^ four -> %d\n"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">tointch</span><span style="color: #0000FF;">(</span><span style="color: #000000;">powch</span><span style="color: #0000FF;">(</span><span style="color: #000000;">three</span><span style="color: #0000FF;">,</span><span style="color: #000000;">four</span><span style="color: #0000FF;">)))</span>
|
||||
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"four ^ three -> %d\n"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">tointch</span><span style="color: #0000FF;">(</span><span style="color: #000000;">powch</span><span style="color: #0000FF;">(</span><span style="color: #000000;">four</span><span style="color: #0000FF;">,</span><span style="color: #000000;">three</span><span style="color: #0000FF;">)))</span>
|
||||
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"5 -> five -> %d\n"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">tointch</span><span style="color: #0000FF;">(</span><span style="color: #000000;">inttoch</span><span style="color: #0000FF;">(</span><span style="color: #000000;">5</span><span style="color: #0000FF;">)))</span>
|
||||
<!--
|
||||
church three = succ(succ(succ(zero))),
|
||||
four = succ(three)
|
||||
printf(1,"three -> %d\n",tointch(three))
|
||||
printf(1,"four -> %d\n",tointch(four))
|
||||
printf(1,"three + four -> %d\n",tointch(addch(three,four)))
|
||||
printf(1,"three * four -> %d\n",tointch(mulch(three,four)))
|
||||
printf(1,"three ^ four -> %d\n",tointch(powch(three,four)))
|
||||
printf(1,"four ^ three -> %d\n",tointch(powch(four,three)))
|
||||
printf(1,"5 -> five -> %d\n",tointch(inttoch(5)))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue