Sieve of Eratosthenes: Difference between revisions

LFE version
m (Fix bug in recent edit.)
(LFE version)
Line 11,338:
<pre>[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]</pre>
 
=={{header|LFE}}==
<syntaxhighlight lang="lisp">
(defmodule eratosthenes
(export (sieve 1)))
 
(defun sieve (limit)
(sieve limit (lists:seq 2 limit)))
 
(defun sieve
((limit (= l (cons p _))) (when (> (* p p) limit))
l)
((limit (cons p xs))
(cons p (sieve limit (remove-multiples p (* p p) xs)))))
 
 
(defun remove-multiples (p q l)
(lists:reverse (remove-multiples p q l '())))
 
(defun remove-multiples
((_ _ '() s) s)
((p q (cons q x_s) s)
(remove-multiples p q x_s s))
((p q (= r (cons a _)) s) (when (> a q))
(remove-multiples p (+ q p) r s))
((p q (cons a a_s) s)
(remove-multiples p q a_s (cons a s))))
</syntaxhighlight>
{{Out}}
<pre>
lfe> (slurp "sieve.lfe")
#(ok eratosthenes)
lfe> (sieve 100)
(2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97)
</pre>
=={{header|Liberty BASIC}}==
<syntaxhighlight lang="lb"> 'Notice that arrays are globally visible to functions.
357

edits