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