diff --git a/dyon_experiments/scomb/.gitignore b/dyon_experiments/scomb/.gitignore new file mode 100644 index 00000000..7960bbc4 --- /dev/null +++ b/dyon_experiments/scomb/.gitignore @@ -0,0 +1,3 @@ +/target/ +Cargo.lock + diff --git a/dyon_experiments/scomb/Cargo.toml b/dyon_experiments/scomb/Cargo.toml new file mode 100644 index 00000000..f79eb603 --- /dev/null +++ b/dyon_experiments/scomb/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "scomb" +version = "0.1.0" +authors = ["Sven Nilsen "] + +[[bin]] +name = "scomb" + +[dependencies] +dyon = "0.24.5" diff --git a/dyon_experiments/scomb/src/main.dyon b/dyon_experiments/scomb/src/main.dyon new file mode 100644 index 00000000..6aeeeba7 --- /dev/null +++ b/dyon_experiments/scomb/src/main.dyon @@ -0,0 +1,58 @@ +fn main() { + /* + // λf.((λx.x x)(λx.f (x x))) + y := \(f) = { + x := \(x) = \x(x) + \(x) = { + f := grab f + \f(\x(x)) + } + } + a := \y(\(f) = \(ind) = { + println(ind) + if ind > 0 { + f := grab f + y := grab '2 y + println(f) + println(\f(y)) + } + 3 + }) + b := \a(y) + // println(b) + println(\b(1)) + */ + + h := \(x, ind) = { + // println(ind) + if ind == 1 { + 1 + } else { + collatz := if (ind % 2) == 0 {ind / 2} else {3 * ind + 1} + ind + \x(collatz) + } + } + + h := \(self, n) = { + if n == 0 {0} else if n == 1 {1} else {\self(n-1) + \self(n-2)} + } + + sc := \(sc, f) = \(n) = { + sc := grab sc + f := grab f + \f(\sc(sc, f), n) + } + + // First you create the combinator. + // println(a) + + // Then you pass the combinator to itself. + b := \sc(sc, h) + // println(b) + + // Then you pass the value you want to compute. + for i [1, 10) { + println(\b(i)) + } + println(\b(20)) +} diff --git a/dyon_experiments/scomb/src/main.rs b/dyon_experiments/scomb/src/main.rs new file mode 100644 index 00000000..bac22330 --- /dev/null +++ b/dyon_experiments/scomb/src/main.rs @@ -0,0 +1,7 @@ +extern crate dyon; + +use dyon::{error, run}; + +fn main() { + error(run("src/main.dyon")); +}