কোনো কিছুকে নিজের সাপেক্ষে সংজ্ঞায়িত করার ক্ষমতাকে রিকার্সন বলা হয়। 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)