modal/prelude2.modal

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
}