diff options
| author | Mistivia <i@mistivia.com> | 2025-06-22 18:10:32 +0800 |
|---|---|---|
| committer | Mistivia <i@mistivia.com> | 2025-06-22 18:10:32 +0800 |
| commit | dacb6b16b205661189c51cb7ce25efab96e8682b (patch) | |
| tree | 0acd0c2fc6dfc4a1b690bc8a50bc36bce1b62bdd /src/interp.c | |
| parent | 665fb6be7eef3703c8e543645d09f329b9a466c5 (diff) | |
use nreverse
Diffstat (limited to 'src/interp.c')
| -rw-r--r-- | src/interp.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/src/interp.c b/src/interp.c index a8c9ad7..befd28d 100644 --- a/src/interp.c +++ b/src/interp.c @@ -566,6 +566,20 @@ SExpRef lisp_reverse(Interp *interp, SExpRef lst) { return ret; } +SExpRef lisp_nreverse(Interp *interp, SExpRef lst) { + SExpRef prev = NIL; + SExpRef cur = lst; + SExpRef next_node; + + while (!NILP(cur)) { + next_node = CDR(cur); + REF(cur)->pair.cdr = prev; + prev = cur; + cur = next_node; + } + return prev; +} + SExpRef lisp_eval_args(Interp *interp, SExpRef args) { SExpRef ret = interp->nil; SExpRef cur = args; @@ -583,7 +597,7 @@ SExpRef lisp_eval_args(Interp *interp, SExpRef args) { ret = CONS(evalres, ret); cur = CDR(cur); } - ret = lisp_reverse(interp, ret); + ret = lisp_nreverse(interp, ret); end: Interp_gc(interp, ret); return ret; |
