I want to append to lists without using append
Paul Backus
snarwin at gmail.com
Mon Apr 4 14:26:53 UTC 2022
On Monday, 4 April 2022 at 12:57:28 UTC, V3nom wrote:
> define the lists:
>
> (define liste (cons 10(cons 20(cons 30(cons 40 ' ())))))
> (define liste2 (cons 20(cons 30(cons 10(cons 40 ' ())))))
>
>
> define the "function":
>
> (define (listapp list1 list2)(
> if (null? (cdr list1))
> (cons (car list1) (listapp list2 (cdr list1)))
> (if (null? (cdr list2))
> (cons (car list2) (cdr list2))
> (cons (car list1) (listapp (cdr list1) list2))
> )))
>
> append them:
>
> (listapp liste liste2)
>
> What do i do wrong? i think this should work but it is giving
> me an error message like:mcdr: contract violation expected:
> mpair? given: ()
In this line:
if (null? (cdr list1))
...it is possible for list1 itself to be null. If that happens,
the call to cdr will fail with an error. Before calling car or
cdr on a list, you must first check to see if the list is null.
Your code contains several other instances of the same error.
I'll let you find them on your own. :)
More information about the Digitalmars-d-learn
mailing list