(let* ((set ((fileVal "Set") -))(DoF ((fileVal "Do") 'DoF))(add (set 'add))) (lambda (lm) ((set 'elements) (DoF lm (lambda (i cs) ((set 'union) (DoF i (lambda (j cs) (add (/ (+ j 1) (+ i 1)) cs)) (set 'empty)) cs)) (set 'empty))))) ; Alternate implementation (let* ((set ((fileVal "Set") -))(Do ((fileVal "Do") 'Do))(add (set 'add))) (lambda (lm) (let ((Fs (set 'empty))) (Do lm (lambda (i) (Do i (lambda (j) (set! Fs (add (/ (+ j 1) (+ i 1)) Fs)))))) ((set 'elements) Fs)))) ((fileVal "Farey") 7) ; => (1/7 1/6 1/5 1/4 2/7 1/3 2/5 3/7 1/2 4/7 3/5 2/3 5/7 3/4 4/5 5/6 6/7)