PasteRack.org
Paste # 6075
2025-04-02 04:32:18

Fork as a new paste.

Paste viewed 74 times.


Embed:

  1. #lang racket
  2. (require racket/control)
  3.  
  4. (define (yield x) (shift k (list 'yield x k)))
  5. (define (amb . xs) (shift k (list 'amb xs k)))
  6.  
  7. (define (do g)
  8.   (define (loop v)
  9.     (match v
  10.       [(list 'amb xs k) (map (lambda (x) (loop (k x))) xs)]
  11.       [(list 'yield x k) (loop (k (* x 2)))]
  12.       [(list 'done x) x]))
  13.   (loop (reset (list 'done (g)))))
  14.  
  15. (define (suits) (amb 'heart 'diamond 'spade 'club))
  16. (define (numbers) (amb 1 2 3 4 5 6 7 8 9 10 'jack 'queen 'king 'ace))
  17. (define (something) (list (suits) (numbers)))
  18.  
  19. (do something)

=>