yourself you type lists learn intercalate example loops haskell recursion tail-recursion

loops - you - syntax record haskell



bucle a través de dos variables en Haskell (3)

¿Cuál es la manera de Haskell de hacer esto?

for (int i = 0 ; i < 1000 ; i++) for (int j = 0 ; j < 1000 ; j++) ret = foo(i , j ) #I need the return value.

Más antecedentes: estoy resolviendo el problema 27 de euler, y tengo:

value a b = let l = length $ takeWhile (isPrime) $ map (/n->n^2 + a * n + b) [0..] in (l, a ,b)

El siguiente paso es obtener una lista de tuplas recorriendo todo lo posible a y b y luego hacer el siguiente proceso:

foldl (/(max,v) (n,a,b)-> if n > max then (n , a * b) else (max ,v) ) (0,0) tuple_list

pero no tengo idea de cómo recorrer dos variables ... Gracias.


También puede hacerlo bien con Control.Applicative

module Main where import Control.Applicative main :: IO () main = mapM_ putStrLn (foo <$> [0..3] <*> [0..3]) foo :: Int -> Int -> String foo a b = "foo " ++ show a ++ " " ++ show b

Ejecución de ejemplo:

C:/programming>ghc --make Main.hs [1 of 1] Compiling Main ( Main.hs, Main.o ) Linking Main.exe ... C:/programming>main foo 0 0 foo 0 1 foo 0 2 foo 0 3 foo 1 0 foo 1 1 foo 1 2 foo 1 3 foo 2 0 foo 2 1 foo 2 2 foo 2 3 foo 3 0 foo 3 1 foo 3 2 foo 3 3


Además de la respuesta de dons, puedes usar la lista de mónadas:

do i <- [0 .. 999] j <- [0 .. 999] return (foo i j)


Use una lista anidada de comprensión. Aquí ''foo'' es ''(,)'' '':

[ (i,j) | i <- [0 .. 999], j <- [0 .. 999] ]

O dispuesto para hacer el anidamiento más claro:

[ foo i j | i <- [0 .. 999] , j <- [0 .. 999] ]