summaryrefslogtreecommitdiff
path: root/testdata/primes.lc
blob: 268d7e7b0910b96c13aaf83931c7cf654dd4b714 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
{-# LANGUAGE NoImplicitPrelude #-}
import Internals

--infixr 9 .
infixr 0 $

f $ x = f x

id x = x

foldr _ e [] = e
foldr f e (x: xs) = f x $ foldr f e xs
{-
foldr x1 x2 x3 = case x3 of
    [] -> x2
    x: xs -> x1 x $ foldr x1 x2 xs
-}

filter p = foldr (\x xs -> if p x then x: xs else xs) []

True && a = a
False && _ = False

and = foldr (&&) True

map f = foldr (\x xs -> f x: xs) []

mod = primModInt
iSqrt a = primRound (primSqrtFloat (primIntToFloat a))
(+) = primAddInt
(-) = primSubInt

a <= b = case primCompareInt a b of
    GT -> False
    _ -> True

not False = True
not True = False

a /= b = not $ a == b

takeWhile p (x: xs) | p x = x: takeWhile p xs
takeWhile _ _ = []

from n = n: from (n + 1)

primes :: [Int]
primes = 2:3: filter (\n -> and $ map (\p -> n `mod` p /= 0) (takeWhile (\x -> x <= iSqrt n) primes)) (from 5)

(x: _) !! 0 = x
(_ : xs) !! n = xs !! (n-1)

main = primes !! 3000