Задать вопрос
Ответы пользователя по тегу Haskell
  • Хочу сравнить фрагмент кода на C и Haskell

    tvolf
    @tvolf
    Если брать, что называется, перевод «в лоб», то выглядеть он будет не очень красиво, наверное (особенно, в моем исполнении, так как сразу скажу, что я не знаток Хаскеля — просто интересующийся =)
    Попробовал накидать что-то в первом приближении (это просто сырой набросок, который нужно дорабатывать до рабочего варианта при необходимости). Получилось нечто такое:

    N = 
    start = 
    k = 
    defect0 = 
    
    calcDefectTemp defectStart i = 
        let getInnerPairs steps N = [(i, j) | i <- [1..steps], j <- [0..N]] in
        let f acc (n, j) = acc - (P_tau_LH !! (n*(N+1)*..... ))  in
        foldl f defectStart (getInnerPairs steps N)
    
    calcDefectN defectTemps = maximum (0 : defectTemps)
    
    main = do 
        let lst = map (\i -> (i, calcDefectTemp 1.0 i)) [N-k+1..N]
        mapM (\(idx, def) -> print $ show idx ++ " " ++ show def) lst
        let defectN = calcDefectN $ map (\(idx, def) -> def) lst     
        print $ "defect of P_tau_LH=" ++ (show $ maximum [defect0, defectN]) ++ ...
        return ()
    


    Вообще, насколько я понимаю, для функциональных языков часто нужно отталкиваться от входных условий для формирования правильного алгоритма решения задачи, так как «буквальная реализация» императивного кода дает не лучшие результаты (мягко говоря =).
    Ответ написан