diff options
author | Přemysl Janouch <p.janouch@gmail.com> | 2017-05-26 01:36:43 +0200 |
---|---|---|
committer | Přemysl Janouch <p.janouch@gmail.com> | 2017-05-26 01:47:56 +0200 |
commit | ec7a0dc95f68f0a3b3a79d292596da26e3b8f467 (patch) | |
tree | 92e5d66bd97b66d0020f4e665b26c5e4ecf5302b | |
parent | 735dfd026abaeee93c4e9b90db73661076ccafa3 (diff) | |
download | ell-ec7a0dc95f68f0a3b3a79d292596da26e3b8f467.tar.gz ell-ec7a0dc95f68f0a3b3a79d292596da26e3b8f467.tar.xz ell-ec7a0dc95f68f0a3b3a79d292596da26e3b8f467.zip |
Add "values"
This oneliner is way too important to be left out.
-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) |