Fractran: Difference between revisions

Content added Content deleted
m (→‎Reading the program: (specialized a type signature slightly to enable compilation))
m (→‎Haskell - Generation of primes: Simplified slightly by replacing findIndex with elemIndex)
Line 1,771: Line 1,771:
===Generation of primes===
===Generation of primes===
Additional import
Additional import
<lang Haskell>import Data.Maybe (mapMaybe)</lang>
<lang Haskell>import Data.Maybe (mapMaybe)
import Data.List (elemIndex)</lang>
<lang Haskell>primes = mapMaybe log2 $ fractran prog 2
<lang Haskell>primes :: [Int]
primes = mapMaybe log2 $ fractran prog 2
where
where
prog =
prog = [17 % 91, 78 % 85, 19 % 51, 23 % 38, 29 % 33
,77 % 29, 95 % 23, 77 % 19, 1 % 17, 11 % 13
[ 17 % 91
,13 % 11, 15 % 14, 15 % 2, 55 % 1]
, 78 % 85
, 19 % 51
log2 = fmap (+ 1) . findIndex (== 2) . takeWhile even . iterate (`div` 2)</lang>
, 23 % 38
, 29 % 33
, 77 % 29
, 95 % 23
, 77 % 19
, 1 % 17
, 11 % 13
, 13 % 11
, 15 % 14
, 15 % 2
, 55 % 1
]
log2 = fmap succ . elemIndex 2 . takeWhile even . iterate (`div` 2)</lang>


<pre>λ> take 20 primes
<pre>λ> take 20 primes