142 lines
1.5 KiB
Plaintext
142 lines
1.5 KiB
Plaintext
define [-- ?x] {}
|
|
|
|
define [form ?x ?y] {
|
|
define ?x ?y
|
|
}
|
|
|
|
define [rule ?x ?y] {
|
|
define ?x ?y
|
|
}
|
|
|
|
define [?x -> ?y] {
|
|
define ?x ?y
|
|
}
|
|
|
|
[(?x) = (?x)] -> {
|
|
true
|
|
}
|
|
|
|
[(?x) = (?y)] -> {
|
|
false
|
|
}
|
|
|
|
[false or false] -> {
|
|
false
|
|
}
|
|
|
|
[true or false] -> {
|
|
true
|
|
}
|
|
|
|
[false or true] -> {
|
|
true
|
|
}
|
|
|
|
[true or true] -> {
|
|
true
|
|
}
|
|
|
|
[quote ?x] -> {
|
|
quote ?x
|
|
}
|
|
|
|
[unquote (quote ?x)] -> {
|
|
?x
|
|
}
|
|
|
|
form [
|
|
if ?condition
|
|
?true
|
|
else
|
|
?false
|
|
]
|
|
{
|
|
if/else ?condition {
|
|
quote ?true
|
|
} {
|
|
quote ?false
|
|
}
|
|
}
|
|
|
|
form [
|
|
if ?condition
|
|
?branch
|
|
]
|
|
{
|
|
if/q ?condition {
|
|
quote ?branch
|
|
}
|
|
}
|
|
|
|
rule [
|
|
if/q (true)
|
|
?branch
|
|
]
|
|
{
|
|
unquote ?branch
|
|
}
|
|
|
|
rule [
|
|
if/q (false)
|
|
?branch
|
|
]
|
|
{}
|
|
|
|
rule [
|
|
if/else (true)
|
|
?true
|
|
?false
|
|
]
|
|
{
|
|
unquote ?true
|
|
}
|
|
|
|
rule [
|
|
if/else (false)
|
|
?true
|
|
?false
|
|
]
|
|
{
|
|
unquote ?false
|
|
}
|
|
|
|
|
|
[factorial (?x)] -> {
|
|
if ((?x) = (1)) {
|
|
1
|
|
}
|
|
else {
|
|
?x * factorial (?x - 1)
|
|
}
|
|
}
|
|
|
|
[fibonacci (?number)] -> {
|
|
if((?number) = (0) or (?number) = (1)) {
|
|
?number
|
|
}
|
|
else {
|
|
fibonacci (?number - 1) + fibonacci (?number - 2)
|
|
}
|
|
}
|
|
|
|
[range (?low) (?high)] -> {
|
|
if((?low) = (?high + 1)) {
|
|
nil
|
|
}
|
|
else {
|
|
?low : range (?low + 1) (?high)
|
|
}
|
|
}
|
|
|
|
[fold (?operation) (?initial) (nil)] -> {
|
|
?initial
|
|
}
|
|
|
|
[fold (?operation) (?initial) (?head : ?tail)] -> {
|
|
?operation ?head (fold (?operation) (?initial) ?tail)
|
|
}
|
|
|
|
[sum ?list] -> {
|
|
fold (add) (0) ?list
|
|
}
|