Некоторые проблемы при использовании WinGHCi - PullRequest
2 голосов
/ 19 сентября 2010

С WinGHCi, как можно реализовать следующий код?

soma :: Int -> Int
soma 1 = aluno 1
soma n = aluno n + soma (n-1)

В настоящее время я пишу многострочный код, используя

:{
...
:}

, но это, похоже, не решает проблему,в этом случае.Кроме того, почему не работает что-то вроде

soma x y = x + y

, когда я работаю в WinGHCi?Я могу сделать это только в том случае, если я использую ключевое слово let

let soma x y = x + y -- valid Haskell code

, хотя в большинстве литературы кажется, что люди не используют его (я предполагаю, что это потому, что они компилируют код?).

Спасибо

Ответы [ 2 ]

3 голосов
/ 19 сентября 2010

Обычный рабочий процесс для программирования на haskell - поместить определение функции в файл, а затем загрузить этот файл с помощью ghci для проверки функции.

Чтобы определить функции (или переменные) в ghci, вам необходимо использовать let, как если бы вы были внутри do -блока, то есть let f x = x+1.Чтобы определить функции с помощью сигнатур типов или нескольких случаев, разделите строки с помощью ; следующим образом:

let soma :: Int -> Int; soma 1 = aluno 1; soma n = aluno n + soma (n-1)

Вы можете использовать :{ }, чтобы написать это в несколько строк, но вам все равно понадобится; в конце каждой строки.

2 голосов
/ 19 сентября 2010

GHCi работает в монаде IO (я думаю), поэтому вы должны использовать ключевое слово let, чтобы оно понимало, что вы имеете в виду.

И почему бы вам просто не написать код в файл с именем 'soma.hs', а затем загрузить его в ghci с помощью:

:l soma.hs

Это должно сработать так же хорошо.

...