2016-04-21 2 views
-1

я получил небольшую проблему, я новичок в Haskell и я не понимаю, почему список пуст после добавления 20.Haskell, список не сохранит переменные?

*Main> list 
[] 
*Main> add_element 
[20] 
*Main> list 
[] 
*Main> 

моего кода:

list = [] 

add_element = list++[20] 
+5

В Haskell все неизменно. 'add_element' возвращает список _new_ с' 20' в конце. Он не может и не может изменить «list». – chi

+2

См. Также мой ответ на [GHCI Haskell, не помнящий привязки в командной строке] (http://stackoverflow.com/q/35304656/237428). –

ответ

8

В переменных Haskell неизменяемы. В вашем случае:

list = [] 

Вы определили пустой список.

add_element = list ++ [20] 

add_element символ не является функцией, которая мутирует list. На самом деле это новый список, построенный путем объединения пустого списка (list) с одиночным списком [20].

Определение верхнего уровня list никогда не будет ничем иным, кроме [].

4

Значение в Haskell неизменны. Ваш код просто определяет значение пустого списка для list, которое никогда не изменится.

add_element - это значение, представляющее list с целым значением 20, прилагаемым к концу. Это не так, это не может изменить значение list.

Посмотрите на некоторые цифры intro Haskell guides, чтобы понять, что означает непреложность.

+3

Я бы сказал, что функция представляет собой значение со стрелкой типа 'a -> b'. По этому определению 'add_element' не является функцией. –

+0

Спасибо за добавление ссылки на учебник! –

+2

В Haskell нет такой функции, как «функция с нулем arity», а «значение» и «функция» не являются взаимоисключающими: например, значения lambdas * являются *. См. Также: [«Все является функцией» в Haskell?] (Http://conal.net/blog/posts/everything-is-a-function-in-haskell) (спойлер: нет). –

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