6.6.9.6 List Modification

The following procedures modify an existing list, either by changing elements of the list, or by changing the list structure itself.

Scheme Procedure: list-set! list k val
C Function: scm_list_set_x (list, k, val)

Set the kth element of list to val.

Scheme Procedure: list-cdr-set! list k val
C Function: scm_list_cdr_set_x (list, k, val)

Set the kth cdr of list to val.

Scheme Procedure: delq item lst
C Function: scm_delq (item, lst)

Return a newly-created copy of lst with elements eq? to item removed. This procedure mirrors memq: delq compares elements of lst against item with eq?.

Scheme Procedure: delv item lst
C Function: scm_delv (item, lst)

Return a newly-created copy of lst with elements eqv? to item removed. This procedure mirrors memv: delv compares elements of lst against item with eqv?.

Scheme Procedure: delete item lst
C Function: scm_delete (item, lst)

Return a newly-created copy of lst with elements equal? to item removed. This procedure mirrors member: delete compares elements of lst against item with equal?.

See also SRFI-1 which has an extended delete (Deleting), and also an lset-difference which can delete multiple items in one call (Set Operations on Lists).

Scheme Procedure: delq! item lst
Scheme Procedure: delv! item lst
Scheme Procedure: delete! item lst
C Function: scm_delq_x (item, lst)
C Function: scm_delv_x (item, lst)
C Function: scm_delete_x (item, lst)

These procedures are destructive versions of delq, delv and delete: they modify the pointers in the existing lst rather than creating a new list. Caveat evaluator: Like other destructive list functions, these functions cannot modify the binding of lst, and so cannot be used to delete the first element of lst destructively.

Scheme Procedure: delq1! item lst
C Function: scm_delq1_x (item, lst)

Like delq!, but only deletes the first occurrence of item from lst. Tests for equality using eq?. See also delv1! and delete1!.

Scheme Procedure: delv1! item lst
C Function: scm_delv1_x (item, lst)

Like delv!, but only deletes the first occurrence of item from lst. Tests for equality using eqv?. See also delq1! and delete1!.

Scheme Procedure: delete1! item lst
C Function: scm_delete1_x (item, lst)

Like delete!, but only deletes the first occurrence of item from lst. Tests for equality using equal?. See also delq1! and delv1!.

Scheme Procedure: filter pred lst
Scheme Procedure: filter! pred lst

Return a list containing all elements from lst which satisfy the predicate pred. The elements in the result list have the same order as in lst. The order in which pred is applied to the list elements is not specified.

filter does not change lst, but the result may share a tail with it. filter! may modify lst to construct its return.