diff options
| -rw-r--r-- | README.adoc | 12 | ||||
| -rw-r--r-- | ell.c | 5 | 
2 files changed, 13 insertions, 4 deletions
| diff --git a/README.adoc b/README.adoc index 792429d..2473802 100644 --- a/README.adoc +++ b/README.adoc @@ -32,17 +32,17 @@ The parser, however, does a bunch of transformations:  As an example, consider the following snippet:   print (if { eq? @var foo } { -     quote 'Hello world\n' +     values 'Hello world\n'   } else { -     quote 'Error\n' +     values 'Error\n'   })  which gets expanded to the following:   ((print (if (quote ((eq? (set var) foo))) -             (quote ((quote 'Hello world\n'))) +             (quote ((values 'Hello world\n')))               else -             (quote ((quote 'Error\n')))))) +             (quote ((values 'Error\n'))))))  Observe that the whole program is enclosed in an implicit pair of `{}` and that  `quote` is a very powerful special form which can replace many others if needed. @@ -85,6 +85,10 @@ Retrieve or set a named variable.  The syntax sugar for retrieval is `@`.  Return a list made of given arguments.  The syntax sugar for lists is `[]`. +`values [<item>]...` + +Return an arbitrary number of values. +  `if <cond> <body> [elif <cond> <body>]... [else <body>]`  Conditional evaluation, strings evaluate to themselves. @@ -977,6 +977,10 @@ defn (fn_list) {  	return check (ctx, (*result = new_list (values)));  } +defn (fn_values) { +	return !args || check (ctx, (*result = new_clone_list (args))); +} +  defn (fn_if) {  	struct item *cond, *body, *keyword;  	for (cond = args; ; cond = keyword->next) { @@ -1280,6 +1284,7 @@ static bool  init_runtime_library (struct context *ctx) {  	if (!native_register (ctx, "set",    fn_set)  	 || !native_register (ctx, "list",   fn_list) +	 || !native_register (ctx, "values", fn_values)  	 || !native_register (ctx, "if",     fn_if)  	 || !native_register (ctx, "map",    fn_map)  	 || !native_register (ctx, "print",  fn_print) | 
