to |Y|(f) script x to funcall(y) script to funcall(arg) y's funcall(y)'s funcall(arg) end funcall end script f's funcall(result) end funcall end script x's funcall(x) end |Y| script to funcall(f) script to funcall(n) if n = 0 then return 1 n * (f's funcall(n - 1)) end funcall end script end funcall end script set fact to |Y|(result) script to funcall(f) script to funcall(n) if n = 0 then return 0 if n = 1 then return 1 (f's funcall(n - 2)) + (f's funcall(n - 1)) end funcall end script end funcall end script set fib to |Y|(result) set facts to {} repeat with i from 0 to 11 set end of facts to fact's funcall(i) end repeat set fibs to {} repeat with i from 0 to 20 set end of fibs to fib's funcall(i) end repeat {facts:facts, fibs:fibs} (* {facts:{1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880, 3628800, 39916800}, fibs:{0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765}} *)