1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Duvida Haskell, urgente please!

Discussão em 'Programação' iniciada por AVG, 9 de Junho de 2007. (Respostas: 1; Visualizações: 1623)

  1. AVG

    AVG

    Ajudem-me que não sei o que está mal aqui.

    fazer o maximo divisor comum de uma lista

    código:


    mdc :: Int-> Int -> Int
    mdc _ 1 = 1
    mdc 1 _ = 1
    mdc x y
    |x > y = mdc (x-y) y
    |y > x = mdc (y-x) x
    |x==y = x

    mdcl :: [Int]-> [Int]
    mdcl []=[]
    mdcl l = mdcl ([mdc (tira(take 1 l)) (tira(take 1 (drop 1 l)))]++ drop 2 l)

    gcdl :: [Int] -> Int
    gcdl l = tira l

    tira :: [Int] -> Int
    tira []=0
    tira [x]=x
     
  2. Rui_Carlos

    Rui_Carlos 1st Folding then Sex

    Código:
    mdcl :: [Int]-> [Int]
    mdcl []=[]
    mdcl [x]=[x]
    mdcl l = mdcl ([mdc (tira(take 1 l)) (tira(take 1 (drop 1 l)))]++ drop 2 l) 
    EDIT: já agora, podes simplificar isso...

    Código:
    mdc :: Int -> Int -> Int
    mdc _ 1 = 1
    mdc 1 _ = 1
    mdc x y |x > y = mdc (x-y) y
            |y > x = mdc (y-x) x
            |x==y = x
    
    mdcl :: [Int] -> [Int]
    mdcl []=[]
    mdcl [x]=[x]
    mdcl (x : y : s) = mdcl ([mdc x y] ++ s) 
     
    Última edição: 10 de Junho de 2007

Partilhar esta Página