chemoelectric

list-merge! (fine touches)

Mar 15th, 2026
272
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scheme 0.90 KB | Source Code | 0 0
  1. (define (list-merge! less? lst1 lst2)
  2.   (cond
  3.     ((null? lst1) lst2)
  4.     ((null? lst2) lst1)
  5.     (else
  6.      (let ((less12? (less? (car lst1) (car lst2))))
  7.        (let ((lst1 (if less12? (cdr lst1) lst1))
  8.              (lst2 (if less12? lst2 (cdr lst2)))
  9.              (result (if less12? lst1 lst2)))
  10.          (let loop ((lst1 lst1)
  11.                     (lst2 lst2)
  12.                     (last result))
  13.            (cond
  14.              ((null? lst1)
  15.               (set-cdr! last lst2)
  16.               result)
  17.              ((null? lst2)
  18.               (set-cdr! last lst1)
  19.               result)
  20.              ((less? (car lst1) (car lst2))
  21.               (let ((last% lst1))
  22.                 (set-cdr! last last%)
  23.                 (loop (cdr lst1) lst2 last%)))
  24.              (else
  25.               (let ((last% lst2))
  26.                 (set-cdr! last last%)
  27.                 (loop lst1 (cdr lst2) last%))))))))))
Advertisement
Add Comment
Please, Sign In to add comment