Я новичок в программировании и Haskell, поэтому приношу свои извинения, если это элементарно.Ошибка при запуске кода Haskell
У меня возникли проблемы с запуском программы ниже, но я не уверен, что это программная ошибка или я не знаю, как использовать ghci
.
Я написал программу, которая ведет себя любит last
, но вместо этого возвращает вместо этого второй элемент в списке.
Мой код
main :: IO()
main = return()
lastButOne::[a]->a
lastButOne xs = if length xs == 2
then head xs
else lastButOne (tail xs)
Программа компилируется нормально, но я не могу найти способ, чтобы запустить его, не давая мне ошибку.
В учебнике приведен пример выполнения программы, которая эмулирует drop
, выполнив следующие действия в ghci
ghci> :load myDrop.hs
Ok, modules loaded: Main.
ghci> myDrop 3 "asdfg"
"fg"
Однако, когда я загрузить мой lastButOne.hs
и попытаться дать вход программы я получаю следующую
Prelude> :load lastButOne.hs
[1 of 1] Compiling Main (lastButOne.hs, interpreted)
Ok, modules loaded: Main.
*Main> lastButOne [a,b,c,d,e,f]
<interactive>:2:13: error: Variable not in scope: a
<interactive>:2:15: error: Variable not in scope: b
<interactive>:2:17: error: Variable not in scope: c
<interactive>:2:19: error: Variable not in scope: d
<interactive>:2:21: error: Variable not in scope: e
<interactive>:2:23: error: Variable not in scope: f
Но когда я проверяю тип lastButOne, похоже, что я даю ему правильный тип ввода, а именно список:
lastButOne :: [a] -> a
Есть ошибки в моем коде или я пытаюсь использовать программу неправильно?
Вы пытаетесь предоставить строку? Затем вам нужно использовать 'lastButOne 'abcdef" '. На данный момент вы предоставляете список переменных '[a, b, c, d, e, f]', но ни один из них не был определен нигде. – Lee
Что вы думаете: «Переменная не в области: a'» означает? – jwodder
Выражаю другой способ: помните, что '' abcdef ''является сахаром для' [' a ',' b ',' c ',' d ',' e ',' f '] '- вам нужны одинарные кавычки, чтобы назвать 'Char's. 'a' отклоняется неопределенным выражением или« переменной », но' 'a'' предопределено как имя буквы. – Michael