Как Вы читаете файл, указанный в качестве параметра к функции при выполнении GHCI

Этот не только вычисляет n!, это также O (n!). Это может иметь проблемы, если Вы хотите вычислить что-либо "большое" все же.

long f(long n)
{
    long r=1;
    for (long i=1; i<n; i++)
        r=r*i;
    return r;
}

long factorial(long n)
{
    // iterative implementation should be efficient
    long result;
    for (long i=0; i<f(n); i++)
        result=result+1;
    return result;
}
6
задан Chris Stryczynski 31 August 2019 в 14:28
поделиться

2 ответа

Это будет проще, если вы переделаете свой main , чтобы он открывался сам файл.

import System.Environment
import System.IO

main :: IO ()
main = do
    args <- getArgs
    case args of
      [] -> doStuff stdin
      file:_ ->
        withFile file ReadMode doStuff

doStuff :: Handle -> IO ()
doStuff = …
*Main> System.Environment.withArgs ["main.txt"] main

Не используйте EOF для стандартного ввода, находясь внутри GHCi. Если вы это сделаете, все дальнейшие попытки чтения из stdin потерпят неудачу:

Prelude> getLine
*** Exception: <stdin>: hGetLine: illegal operation (handle is closed)
Prelude> getContents
*** Exception: <stdin>: hGetContents: illegal operation (handle is closed)
6
ответ дан 10 December 2019 в 00:39
поделиться

Вы МОЖЕТЕ ввести: main в GHCi для вызова параметров командной строки. Боюсь, вы, вероятно, просто захотите этим воспользоваться.

4
ответ дан 10 December 2019 в 00:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: