}, 'nil?' => function ($a) { return _nil_Q($a); }, 'true?' => function ($a) { return _true_Q($a); }, 'false?' => function ($a) { return _false_Q($a); }, 'symbol' => function () { return call_user_func_array('_symbol', func_get_args()); }, 'symbol?' => function ($a) { return _symbol_Q($a); }, 'keyword' => function () { return call_user_func_array('_keyword', func_get_args()); }, 'keyword?' => function ($a) { return _keyword_Q($a); }, 'string?' => function ($a) { return _string_Q($a); }, 'pr-str' => function () { return call_user_func_array('pr_str', func_get_args()); }, 'str' => function () { return call_user_func_array('str', func_get_args()); }, 'prn' => function () { return call_user_func_array('prn', func_get_args()); }, 'println' => function () { return call_user_func_array('println', func_get_args()); }, 'readline' => function ($a) { return mal_readline($a); }, 'read-string' => function ($a) { return read_str($a); }, 'slurp' => function ($a) { return file_get_contents($a); }, '<' => function ($a, $b) {
function seq($src) { if (_list_Q($src)) { if (count($src) == 0) { return NULL; } return $src; } elseif (_vector_Q($src)) { if (count($src) == 0) { return NULL; } $tmp = $src->getArrayCopy(); $s = new ListClass(); $s->exchangeArray($tmp); return $s; } elseif (_string_Q($src)) { if (strlen($src) == 0) { return NULL; } $tmp = str_split($src); $s = new ListClass(); $s->exchangeArray($tmp); return $s; } elseif (_nil_Q($src)) { return NULL; } else { throw new Exception("seq: called on non-sequence"); } return $s; }