Ваши вопросы не относятся к функциональным языкам программирования, таким как Haskell. Ваш первый вопрос, я думаю, «как я всегда делаю А здесь, когда я тоже хочу сделать Б?». Ваш второй вопрос похож: «Как мне сделать А потом Б?». Эти вопросы имеют смысл для императивных языков (таких как ОО-языки), где ваша программа по существу сообщает компьютеру , как действовать. В функциональных языках, однако, вы говорите что вы хотите вычислить, но это полностью зависит от компилятора , как это делается (возьмите это с щепоткой соли, но это общая идея ).
Например, ваш второй вопрос имеет
number = number * 5
number = number * 2
На императивном языке это гласит: «обновить ячейку памяти с именем« число »с ее текущим содержимым, умноженным на 5; , затем обновить ячейку памяти с именем« число », с ее текущим содержимым, умноженным на 2».
В функциональном языке программирования эти операторы являются либо ошибкой (вы пытаетесь определить скалярную величину "число" в терминах самого себя), либо являются логическими выражениями ("число равно числу * 5?").
Лучший совет, который я могу предложить, чтобы прояснить вашу путаницу, заключается в следующем: забудьте все об идее обновления переменных в функциональном языке программирования, потому что вы не можете этого сделать. Вместо этого всегда думайте о том, какое значение вы хотите получить. Например, вот функция длины списка:
length [] = 0 -- The empty list has zero items.
length (x:xs) = 1 + length xs -- The non-empty list (x:xs) has one more item than xs.
Надеюсь, это поможет.