diff --git a/src/c/list.d b/src/c/list.d index 650246779..c0ca74e89 100644 --- a/src/c/list.d +++ b/src/c/list.d @@ -1053,6 +1053,22 @@ ecl_remove_eq(cl_object x, cl_object l) return head; } +cl_object +ecl_delete_eq(cl_object x, cl_object l) +{ + cl_object head = l; + cl_object *p = &head; + while (!ECL_ATOM(l)) { + if (ECL_CONS_CAR(l) == x) { + *p = l = ECL_CONS_CDR(l); + } else { + p = &ECL_CONS_CDR(l); + l = *p; + } + } + return head; +} + /* Added for use by the compiler, instead of open coding them. Beppe */ cl_object ecl_assq(cl_object x, cl_object l) diff --git a/src/h/external.h b/src/h/external.h index 74e54736b..1e2c38651 100755 --- a/src/h/external.h +++ b/src/h/external.h @@ -917,6 +917,7 @@ extern ECL_API cl_object ecl_assql(cl_object x, cl_object l); extern ECL_API cl_object ecl_assoc(cl_object x, cl_object l); extern ECL_API cl_object ecl_assqlp(cl_object x, cl_object l); extern ECL_API cl_object ecl_remove_eq(cl_object x, cl_object l); +extern ECL_API cl_object ecl_delete_eq(cl_object x, cl_object l); #define si_cons_car cl_car #define si_cons_cdr cl_cdr