Generator/Exponential: Difference between revisions
Content added Content deleted
m (→Using struct to store state: comment) |
|||
Line 583: | Line 583: | ||
29: 1089 |
29: 1089 |
||
</pre> |
</pre> |
||
=={{header|Common Lisp}}== |
|||
<lang lisp>(defun take (seq &optional (n 1)) |
|||
(values-list (loop repeat n collect (funcall seq)))) |
|||
(defun power-seq (n) |
|||
(let ((x 0)) |
|||
(lambda () (prog1 (expt (incf x) n))))) |
|||
(defun filter-seq (s1 s2) ;; remove s2 from s1 |
|||
(let ((x1 (take s1)) (x2 (take s2))) |
|||
(lambda () |
|||
(tagbody g |
|||
(if (= x1 x2) |
|||
(progn (setf x1 (take s1) x2 (take s2)) (go g))) |
|||
(if (> x1 x2) |
|||
(progn (setf x2 (take s2)) (go g)))) |
|||
(prog1 x1 (setf x1 (take s1)))))) |
|||
(let ((2not3 (filter-seq (power-seq 2) (power-seq 3)))) |
|||
(take 2not3 20) ;; drop 20 |
|||
(princ (multiple-value-list (take 2not3 10))))</lang> |
|||
=={{header|D}}== |
=={{header|D}}== |