1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187
|
print("=== Basic Function Definition and Call ===")
function add(a, b) return a + b end
local sum = add(10, 20) print("add(10, 20) =", sum)
local multiply = function(a, b) return a * b end
local product = multiply(5, 6) print("multiply(5, 6) =", product)
print("\n=== Anonymous Functions ===")
local numbers = {1, 2, 3, 4, 5}
table.sort(numbers, function(a, b) return a > b end)
print("Sorted in descending order:") for _, num in ipairs(numbers) do print(num) end
print("\n=== Closures ===")
function create_counter(initial) local count = initial or 0 return function() count = count + 1 return count end end
local counter1 = create_counter() local counter2 = create_counter(100)
print("counter1:", counter1()) print("counter1:", counter1()) print("counter2:", counter2()) print("counter1:", counter1()) print("counter2:", counter2())
function create_multiplier(factor) return function(num) return num * factor end end
local double = create_multiplier(2) local triple = create_multiplier(3)
print("double(5) =", double(5)) print("triple(5) =", triple(5))
print("\n=== Variadic Functions ===")
function average(...) local sum = 0 local count = 0 for _, num in ipairs({...}) do sum = sum + num count = count + 1 end if count == 0 then return 0 end return sum / count end
print("average(1, 2, 3, 4, 5) =", average(1, 2, 3, 4, 5)) print("average(10, 20) =", average(10, 20)) print("average() =", average())
print("\n=== Functions Returning Multiple Values ===")
function get_min_max(...) local args = {...} if #args == 0 then return nil, nil end local min_val = args[1] local max_val = args[1] for i = 2, #args do if args[i] < min_val then min_val = args[i] end if args[i] > max_val then max_val = args[i] end end return min_val, max_val end
local min, max = get_min_max(5, 2, 9, 1, 7) print("min and max of {5, 2, 9, 1, 7}:", min, max)
print("\n=== Tail Call Optimization ===")
function factorial_tail(n, acc) acc = acc or 1 if n <= 1 then return acc end return factorial_tail(n - 1, n * acc) end
print("factorial_tail(5) =", factorial_tail(5))
print("\n=== Functions as Table Members ===")
local math_operations = { add = function(a, b) return a + b end, subtract = function(a, b) return a - b end, multiply = function(a, b) return a * b end, divide = function(a, b) if b == 0 then return nil, "Division by zero" end return a / b end }
print("math_operations.add(10, 5) =", math_operations.add(10, 5)) print("math_operations.subtract(10, 5) =", math_operations.subtract(10, 5)) print("math_operations.multiply(10, 5) =", math_operations.multiply(10, 5))
local result, error_msg = math_operations.divide(10, 0) if result then print("math_operations.divide(10, 0) =", result) else print("Error:", error_msg) end
print("\n=== Lexical Scoping ===")
local outer_var = "outside"
function outer_function() local inner_var = "inside" function inner_function() print("inner_var:", inner_var) print("outer_var:", outer_var) end return inner_function end
local inner = outer_function() inner()
|