chemoelectric

list-merge! (stabilized)

Mar 15th, 2026
233
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scheme 0.83 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.               (set-cdr! last lst1)
  22.               (loop (cdr lst1) lst2 (cdr last)))
  23.              (else
  24.               (set-cdr! last lst2)
  25.               (loop lst1 (cdr lst2) (cdr last))))))))))
  26.  
Advertisement
Add Comment
Please, Sign In to add comment