fork(3) download
  1. ; minimum impossible sum
  2.  
  3. (define sort #f)
  4. (define merge #f)
  5. (let ()
  6. (define dosort
  7. (lambda (pred? ls n)
  8. (if (= n 1)
  9. (list (car ls))
  10. (let ((i (quotient n 2)))
  11. (domerge pred?
  12. (dosort pred? ls i)
  13. (dosort pred? (list-tail ls i) (- n i)))))))
  14. (define domerge
  15. (lambda (pred? l1 l2)
  16. (cond
  17. ((null? l1) l2)
  18. ((null? l2) l1)
  19. ((pred? (car l2) (car l1))
  20. (cons (car l2) (domerge pred? l1 (cdr l2))))
  21. (else (cons (car l1) (domerge pred? (cdr l1) l2))))))
  22. (set! sort
  23. (lambda (pred? l)
  24. (if (null? l) l (dosort pred? l (length l)))))
  25. (set! merge
  26. (lambda (pred? l1 l2)
  27. (domerge pred? l1 l2))))
  28.  
  29. (define (min-impossible-sum xs)
  30. (let loop ((xs (sort < xs)) (x 1))
  31. (if (or (null? xs) (< x (car xs))) x
  32. (loop (cdr xs) (+ x (car xs))))))
  33.  
  34. (display (min-impossible-sum '(4 13 2 3 1)))
Success #stdin #stdout 0.01s 7272KB
stdin
Standard input is empty
stdout
11