madlisp/lib.php

64 lines
1.4 KiB
PHP
Raw Normal View History

2020-05-27 09:27:47 +00:00
<?php
require_once('classes.php');
2020-05-27 11:54:39 +00:00
function ml_get_env(): MLEnv
2020-05-27 09:27:47 +00:00
{
2020-05-27 11:54:39 +00:00
$env = new MLEnv();
2020-05-27 09:27:47 +00:00
// basic arithmetic
2020-05-27 11:54:39 +00:00
$env->set('+', function (...$args) {
return array_sum($args);
});
$env->set('-', function (...$args) {
$result = $args[0] ?? null;
for ($i = 1; $i < count($args); $i++) {
$result -= $args[$i];
}
return $result;
});
$env->set('*', function (...$args) {
$result = $args[0] ?? null;
for ($i = 1; $i < count($args); $i++) {
$result *= $args[$i];
}
return $result;
});
$env->set('/', function (...$args) {
$result = $args[0] ?? null;
for ($i = 1; $i < count($args); $i++) {
$result /= $args[$i];
}
return $result;
});
$env->set('%', function (...$args) {
$result = $args[0] ?? null;
for ($i = 1; $i < count($args); $i++) {
$result %= $args[$i];
}
return $result;
});
// comparison
$env->set('=', fn ($a, $b) => $a == $b);
$env->set('<', fn ($a, $b) => $a < $b);
$env->set('>', fn ($a, $b) => $a > $b);
$env->set('<=', fn ($a, $b) => $a <= $b);
$env->set('>=', fn ($a, $b) => $a >= $b);
$env->set('!=', fn ($a, $b) => $a != $b);
// types
$env->set('type?', function ($a) {
return gettype($a);
});
2020-05-27 09:27:47 +00:00
return $env;
}