
michael rice
makeVerifier :: (Int -> Int ->__ Int) -> Int -> (Int -> Bool)
makeVerifier f m = \n -> let d = digits n
________________________________________________________ i = [1..(length d)]
________________________________________________ in \n -> divides m (foldl (+) 0 (map2 f i d))
makeVerifier :: (Int -> Int ->__ Int) -> Int -> Int -> Bool makeVerifier f m n = divides m $ foldl (+) 0 $ map2 f i d where d = digits n i = [1..length d] ...looks way more like Haskell[1] to me, and is equivalent (modulo actually trying it out, and the strange fact that the second n is unused). From a scheme perspective, all Haskell functions only take one argument and are made into multiple-arg functions by stacking lambdas, hidden by syntactic sugar. The usual (define (foo a b) ...) would be written "foo (a,b) = ..." in Haskell. In other words, functions are curried by default. You might also want to use foldr or foldl' instead of foldl, there's some differences in behaviour between scheme and Haskell due to laziness: See http://www.haskell.org/haskellwiki/Fold as well as the referenced wiki page. Hope that helps. [1] There's some decent potential for point-free style there, but I don't feel like doing that right now -- (c) this sig last receiving data processing entity. Inspect headers for copyright history. All rights reserved. Copying, hiring, renting, performance and/or quoting of this signature prohibited.