mirror of
https://github.com/peklaiho/madlisp.git
synced 2024-10-18 13:02:04 +00:00
print null as empty string, enable functions eval and print
This commit is contained in:
parent
b0f22a19fe
commit
69918f3300
@ -10,25 +10,16 @@ function ml_get_lisp(): array
|
|||||||
|
|
||||||
$lisp = new MadLisp\Lisp($tokenizer, $reader, $eval, $printer);
|
$lisp = new MadLisp\Lisp($tokenizer, $reader, $eval, $printer);
|
||||||
|
|
||||||
// environment
|
// Environment
|
||||||
|
|
||||||
$env = new MadLisp\Env();
|
$env = new MadLisp\Env();
|
||||||
|
|
||||||
|
// Register core functions
|
||||||
|
$lisp->register($env);
|
||||||
|
|
||||||
|
// Register libraries
|
||||||
(new MadLisp\Lib\Math())->register($env);
|
(new MadLisp\Lib\Math())->register($env);
|
||||||
(new MadLisp\Lib\Compare())->register($env);
|
(new MadLisp\Lib\Compare())->register($env);
|
||||||
(new MadLisp\Lib\Types())->register($env);
|
(new MadLisp\Lib\Types())->register($env);
|
||||||
|
|
||||||
/*
|
|
||||||
$env->set('eval', function (...$args) use ($eval, $env) {
|
|
||||||
$results = $eval->eval($args, $env);
|
|
||||||
return $results[count($results) - 1];
|
|
||||||
});
|
|
||||||
|
|
||||||
$env->set('print', function (...$args) use ($printer) {
|
|
||||||
$printer->print($args);
|
|
||||||
return null;
|
|
||||||
});
|
|
||||||
*/
|
|
||||||
|
|
||||||
return [$lisp, $env];
|
return [$lisp, $env];
|
||||||
}
|
}
|
||||||
|
20
src/Lisp.php
20
src/Lisp.php
@ -26,4 +26,24 @@ class Lisp
|
|||||||
|
|
||||||
$this->printer->print($results);
|
$this->printer->print($results);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function register(Env $env): void
|
||||||
|
{
|
||||||
|
$env->set('eval', new CoreFunc('eval', 'Evaluate arguments.', 1, -1,
|
||||||
|
function (...$args) use ($env) {
|
||||||
|
$results = $this->eval->eval($args, $env);
|
||||||
|
|
||||||
|
// Return last evaluated value
|
||||||
|
return $results[count($results) - 1];
|
||||||
|
}
|
||||||
|
));
|
||||||
|
|
||||||
|
$env->set('print', new CoreFunc('print', 'Print arguments.', 1, -1,
|
||||||
|
function (...$args) {
|
||||||
|
$this->printer->print($args);
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -28,7 +28,7 @@ class Printer
|
|||||||
} elseif ($a === false) {
|
} elseif ($a === false) {
|
||||||
return 'false';
|
return 'false';
|
||||||
} elseif ($a === null) {
|
} elseif ($a === null) {
|
||||||
return 'null';
|
return '';
|
||||||
} elseif (is_string($a)) {
|
} elseif (is_string($a)) {
|
||||||
return '"' . $a . '"';
|
return '"' . $a . '"';
|
||||||
} else {
|
} else {
|
||||||
|
Loading…
Reference in New Issue
Block a user