diff --git a/src/sexpr.c b/src/sexpr.c index 7a695cba..f3ca2050 100644 --- a/src/sexpr.c +++ b/src/sexpr.c @@ -23,6 +23,15 @@ SexprRef cdr(SexprRef sexpr) { assert(sexpr_is_pair(sexpr)); return sexpr->data.cons.cdr; } +SexprRef append(SexprRef xs, SexprRef ys) { + assert(sexpr_is_null(xs) || sexpr_is_pair(xs)); + if (sexpr_is_null(xs)) { + return ys; + } else { + xs->data.cons.cdr = append(cdr(xs), ys); + return xs; + } +} bool sexpr_is_null(SexprRef sexpr) { return sexpr == NULL; diff --git a/src/sexpr.h b/src/sexpr.h index 0261cbf4..27a5191c 100644 --- a/src/sexpr.h +++ b/src/sexpr.h @@ -29,6 +29,7 @@ struct Sexpr { SexprRef cons(SexprRef car, SexprRef cdr); SexprRef car(SexprRef sexpr); SexprRef cdr(SexprRef sexpr); +SexprRef append(SexprRef xs, SexprRef ys); bool sexpr_is_null(SexprRef sexpr); bool sexpr_is_pair(SexprRef sexpr);