fork download
  1. ;; (import (chicken string))
  2. (define (product . lists)
  3. (define (prod xs ys)
  4. (foldl (lambda (acc x) (foldl (lambda (acc y) (cons (cons x y) acc)) acc ys)) '() xs))
  5. (define (f acc lists)
  6. (if (null? lists)
  7. acc
  8. (g (prod (car lists) acc) (cdr lists))))
  9. (define (g acc lists)
  10. (if (null? lists)
  11. (reverse acc)
  12. (f (prod (reverse (car lists)) acc) (cdr lists))))
  13. (f '(()) (reverse lists)))
  14. (define (repeat x n)
  15. (define (aux acc n)
  16. (if (<= n 0)
  17. acc
  18. (aux (cons x acc) (- n 1))))
  19. (aux '() n))
  20. (define (f s n)
  21. (apply product (repeat (string-chop s 1) n)))
  22. (print (f "ABC" 0))
  23. (print (f "ABC" 1))
  24. (print (f "ABC" 2))
  25. (print (f "ABC" 3))
  26.  
Success #stdin #stdout 0.01s 7828KB
stdin
Standard input is empty
stdout
(())
((A) (B) (C))
((A A) (A B) (A C) (B A) (B B) (B C) (C A) (C B) (C C))
((A A A) (A A B) (A A C) (A B A) (A B B) (A B C) (A C A) (A C B) (A C C) (B A A) (B A B) (B A C) (B B A) (B B B) (B B C) (B C A) (B C B) (B C C) (C A A) (C A B) (C A C) (C B A) (C B B) (C B C) (C C A) (C C B) (C C C))