Advertisement
Guest User

Untitled

a guest
May 1st, 2019
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.09 KB | None | 0 0
  1. (in-package #:cl-user)
  2.  
  3. (defpackage #:group
  4. (:use #:cl)
  5. (:export :group :test))
  6.  
  7. (in-package #:group)
  8.  
  9.  
  10. (defun group (x y)
  11. (if (numberp y)
  12. (if (numberp x)
  13. (error "I need at least one list argument!")
  14. (group y x))
  15. (let ((n x)
  16. (source y))
  17. (check-type n (integer 1))
  18. (labels ((inner (down up)
  19. (if (null down)
  20. (nreverse up)
  21. (inner (nthcdr n down)
  22. (push (subseq down 0 n) up)))))
  23. (let ((len (length source)))
  24. (if (= 0 (mod len n))
  25. (inner source nil)
  26. (error "Wrong length ~S of source list for groups of size ~S"
  27. len n)))))))
  28.  
  29. (defun test ()
  30. (let ((res (list (equal (group 2 '(1 2)) '((1 2)))
  31. (equal (group '(1 2) 2) '((1 2)))
  32. (GROUP '(1 2) (+ 1 1)))))
  33. (if (every #'identity res)
  34. (format t "Group does pass tests. Results: ~S" res)
  35. (error "Group does not pass tests. Results: ~S" res))))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement