来个haskell 的hasDivisorOf :: [Int] -> Int -> Bool
hasDivisorOf xs num = any (\x -> num `mod` x == 0) xsisPrime :: Int -> Bool
isPrime n = not $ [2..(n - 1)] `hasDivisorOf` nprimeList :: [Int]
primeList = filter isPrime [2..]
main = do
print $ sum $ takeWhile (< 200) primeList

解决方案 »

  1.   

    Scheme 也可以!
    (define (sum-num x test) (cond ((< x 0) 0)
           ((= x 0) 0)
       (else (if (test x)
         (+ x (sum-num (- x 1) test))
     (sum-num (- x 1) test)))))
    (define (is-prime x)
    (define (reminder a b) (if (< a b) a (reminder (- a b) b)))
    (define (prime-test r) (if (< r x)
       (if (= 0 (reminder x r)) #f
       (prime-test (+ r 1)))
    #t))
    (prime-test 2))(sum-num 200 is-prime
      

  2.   

    (define (sum-num x test) (cond ((< x 0) 0)
           ((= x 0) 0)
       (else (if (test x)
         (+ x (sum-num (- x 1) test))
     (sum-num (- x 1) test)))))
    (define (is-prime x)
    (define (reminder a b) (if (< a b) a (reminder (- a b) b)))
    (define (prime-test r) (if (< r x)
       (if (= 0 (reminder x r)) #f
       (prime-test (+ r 1)))
    #t))
    (prime-test 2))(sum-num 200 is-prime)