Учебники

Вяз — петля

Вяз это функциональный язык программирования. Elm использует концепцию рекурсии как альтернативу традиционным циклическим конструкциям.

В этой главе обсуждается концепция рекурсии.

Рекурсия

Некоторые языки программирования позволяют самому себе вызывать модуль или функцию. Этот метод известен как рекурсия.

иллюстрация

В этой программе мы увидим, как использовать рекурсию для отображения hello пять раз.

Шаг 1 — Создайте файл Loop.elm

Создайте модуль Loop и определите функцию sayHello . Функция sayHello принимает целочисленное значение в качестве входных данных и возвращает строковое значение.

module Loop exposing(..)
//function signature
sayHello:Int ->String
//function implementation
sayHello n =
   case n of
   1 -> "Hello:1 "
   _ -> "Hello:" ++ toString (n) ++ " " ++ sayHello(n-1)

Функция sayHello проверяет, был ли передан параметр 1. Если параметр равен 1, то функция вернется, в противном случае она создаст строку Hello и вызовет ту же функцию.

Шаг 2 — вызвать sayHello из REPL

Откройте elm REPL из текущей папки проекта (расположение файла Loop.elm).

//import the module Loop
> import Loop exposing(..)
//invoke the sayHello function with parameter value as 5
> sayHello 5
"Hello:5 Hello:4 Hello:3 Hello:2 Hello:1 Hello:0 " : String
>

Модуль Loop

иллюстрация

В следующем примере печатается сумма из n чисел с использованием рекурсии.

> sumOfNos n =\
| if n==0 then 0 \
| else (n) + sumOfNos (n-1)
<function> : number -> number1

В elm REPL мы создали функцию sumOfNos, которая принимает входное число и суммирует все числа от 0 до этого числа.

Например, если мы передадим input как 5, он будет суммировать 1 + 2 + 3 + 4 + 5, что составляет 15 .

> ssumOfNos 5
15 : number

Вывод программы показан выше.