Η ικανότητα ενός πράγματος να ορίζεται με βάση τον εαυτό του ονομάζεται αναδρομή. Στη Gleam, η αναδρομή συναντάται πιο συχνά στις αναδρομικές συναρτήσεις, δηλαδή σε συναρτήσεις που καλούν τον εαυτό τους.
Μια αναδρομική συνάρτηση πρέπει να έχει τουλάχιστον μία βασική περίπτωση και τουλάχιστον μία αναδρομική περίπτωση. Μια βασική περίπτωση επιστρέφει μια τιμή χωρίς να καλέσει ξανά τη συνάρτηση. Μια αναδρομική περίπτωση καλεί ξανά τη συνάρτηση, τροποποιώντας την είσοδο ώστε κάποια στιγμή να ταιριάξει με τη βασική περίπτωση.
pub fn factorial(x: Int) -> Int {
case x {
// Base case
1 -> 1
// Recursive case
_ -> x * factorial(x - 1)
}
}
Η Gleam δεν έχει ειδική σύνταξη για βρόχους, οπότε κάθε βρόχος υλοποιείται με αναδρομή.
pub fn list_length(list: List(String)) -> Int {
case list {
[] -> 0
[_, ..rest] -> 1 + list_length(rest)
}
}
Η Gleam υποστηρίζει επίσης αναδρομικούς προσαρμοσμένους τύπους. Σε έναν αναδρομικό προσαρμοσμένο τύπο, μία ή περισσότερες από τις παραλλαγές του αναφέρονται στον ίδιο τον τύπο μέσα στα δεδομένα που περιέχουν.
pub type RussianDoll {
Child // Base case
Mother(RussianDoll) // Recursive case
}
let very_big_doll = Mother(Mother(Mother(Child)))
let small_doll = Mother(Child)