From 76038c7dbbecd97f4943dcca99deb2d095425fa5 Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Fri, 8 Aug 2014 07:50:07 -0700 Subject: Bugfix: ret operator does not generate functions that take any number of arguments. * eval.c (me_ret): Generate (op identity (progn @rest )) rather than of (op identity ). * txr.1: Update misleading equivalence. --- ChangeLog | 10 ++++++++++ eval.c | 4 +++- txr.1 | 5 ++++- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index bcc0b331..17f33500 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2014-08-08 Kaz Kylheku + + Bugfix: ret operator does not generate functions + that take any number of arguments. + + * eval.c (me_ret): Generate (op identity (progn @rest )) + rather than of (op identity ). + + * txr.1: Update misleading equivalence. + 2014-08-07 Kaz Kylheku Version 95. diff --git a/eval.c b/eval.c index c66ddbef..d9f1c51d 100644 --- a/eval.c +++ b/eval.c @@ -2539,7 +2539,9 @@ static val me_ido(val form, val menv) static val me_ret(val form, val menv) { - return cons(op_s, cons(identity_s, rest(form))); + return list(op_s, identity_s, cons(progn_s, + cons(list(var_s, rest_s, nao), + rest(form))), nao); } static val me_flet_labels(val form, val menv) diff --git a/txr.1 b/txr.1 index 0d9779d8..b178b42f 100644 --- a/txr.1 +++ b/txr.1 @@ -12504,7 +12504,10 @@ and returns the value specified by
. The following equivalence holds: - (ret x) <--> (op identity x) + (ret x) <--> (op identity (progn @rest x)) + +where the @rest parameter is mentioned for its side effect of making +op generate a function which accepts any number of arguments. The expression (ret @2) returns a function similar to (lambda (x y . z) y). -- cgit v1.2.3