2016-07-26 3 views
0

Я новичок в программировании и 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 

Есть ошибки в моем коде или я пытаюсь использовать программу неправильно?

+2

Вы пытаетесь предоставить строку? Затем вам нужно использовать 'lastButOne 'abcdef" '. На данный момент вы предоставляете список переменных '[a, b, c, d, e, f]', но ни один из них не был определен нигде. – Lee

+2

Что вы думаете: «Переменная не в области: a'» означает? – jwodder

+1

Выражаю другой способ: помните, что '' abcdef ''является сахаром для' [' a ',' b ',' c ',' d ',' e ',' f '] '- вам нужны одинарные кавычки, чтобы назвать 'Char's. 'a' отклоняется неопределенным выражением или« переменной », но' 'a'' предопределено как имя буквы. – Michael

ответ

4

Проблема не тип, то, что ни одна из переменных a, b, c, d, e и f не существует. Вы не можете использовать переменные, которые не существуют.

+0

Я вижу сейчас. Я не знал, что программа будет интерпретировать a, b, c ... как переменные, а не только символы. –

+4

@ Zermelo's_Choice Если вам нужны символы, окружайте их '' 's. Или просто используйте строковый литерал синтаксис ('' abcdef "', который является ярлыком для '['a', 'b', 'c', 'd', 'e', ​​'f']'). – sepp2k

Смежные вопросы