Задать вопрос

Хочу сравнить фрагмент кода на C и Haskell

Знатоки Haskell, покажите мне как следующий код, написанный на С, будет выглядеть на Haskell?

defect_N=0;

for(i=N-k+1; i<=N; i++) {
  defect_tmp=1;
 
  for(n=1; n<=steps; n++) 
    for(j=0; j<=N; j++) 
      defect_tmp-=P_tau_LH[n*(N+1)*(N+1)+i*(N+1)+j];
  
  if(defect_tmp>defect_N)
    defect_N=defect_tmp;
  
  printf("%d %lf\n",i,defect_tmp);
}

printf("defect of P_tau_LH=%lf=%e         defect_0=%lf, defect_N=%lf\n", max_double (defect_0,defect_N), max_double (defect_0,defect_N), defect_0, defect_N);
  • Вопрос задан
  • 4576 просмотров
Подписаться 5 Оценить Комментировать
Ответ пользователя shedward К ответам на вопрос (2)
shedward
@shedward
Ну вообще лучше бы вы формулы предоставили а не программу на С, но если я правильно понял метод расчета то это будет похожее на:

module Main where

import Text.Printf

idef i nn steps = 
	1 - sum [ n*(n+1)**2 + i*(n+1) + j | j <- [0..nn], n <- [0..steps]]

calcAndPrint i nn steps = do
	let res = idef i nn steps
	printf "%d %f" i res
	return res

defect k nn steps = 
	maximum [ calcAndPrint i nn steps | i <- [nn- k+1 .. nn]]

main = do
	let defect_0 = ...
	let defect_N = defect <k> <nn> <steps>
	printf "defect of P_tau_LH=%f=%e\n" defect_0


На хаскеле я писал довольно мало, поэтому может быть есть более лучший способ.
Ответ написан