This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
#include <stdlib.h>
|
||||
#include <time.h>
|
||||
#include <string.h>
|
||||
|
||||
#define LISP_IMPLEMENTATION
|
||||
#include "lisp.h"
|
||||
#include "lisp_lib.h"
|
||||
|
||||
Lisp integer_range(Lisp args, LispError* e, LispContext ctx)
|
||||
{
|
||||
// first argument
|
||||
LispInt start = lisp_int(lisp_car(args));
|
||||
args = lisp_cdr(args);
|
||||
// second argument
|
||||
LispInt end = lisp_int(lisp_car(args));
|
||||
|
||||
if (end < start)
|
||||
{
|
||||
*e = LISP_ERROR_OUT_OF_BOUNDS;
|
||||
return lisp_null();
|
||||
}
|
||||
|
||||
LispInt n = end - start;
|
||||
Lisp numbers = lisp_make_vector(n, ctx);
|
||||
|
||||
for (LispInt i = 0; i < n; ++i)
|
||||
lisp_vector_set(numbers, i, lisp_make_int(start + i));
|
||||
|
||||
return numbers;
|
||||
}
|
||||
|
||||
int main(int argc, const char* argv[])
|
||||
{
|
||||
LispContext ctx = lisp_init();
|
||||
lisp_lib_load(ctx);
|
||||
|
||||
// wrap in Lisp object
|
||||
Lisp func = lisp_make_func(integer_range);
|
||||
|
||||
// add to enviornment with symbol INTEGER-RANGE
|
||||
Lisp env = lisp_env(ctx);
|
||||
lisp_env_define(env, lisp_make_symbol("INTEGER-RANGE", ctx), func, ctx);
|
||||
Lisp pi = lisp_make_real(3.141592);
|
||||
lisp_env_define(env, lisp_make_symbol("PI", ctx), pi, ctx);
|
||||
|
||||
LispError e;
|
||||
Lisp result = lisp_eval(lisp_read("(INTEGER-RANGE 5 15)", &e, ctx), &e, ctx);
|
||||
lisp_printf(stdout, result);
|
||||
|
||||
if (e != LISP_ERROR_NONE) fprintf(stderr, "error: %s\n", lisp_error_string(e));
|
||||
|
||||
lisp_shutdown(ctx);
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user