if und Schleifen
local punkte = 78
if punkte >= 90 then
print("sehr gut")
elseif punkte >= 75 then
print("gut")
else
print("weiter üben")
end
for i = 1, 3 do io.write(i, " ") end -- 1 bis 3
print()
for i = 10, 1, -4 do io.write(i, " ") end -- Schrittweite -4
print()
for i = 0, 1, 0.25 do io.write(i, " ") end
print()
local n = 3
while n > 0 do io.write(n, " "); n = n - 1 end
print()
local k = 0
repeat k = k + 1 until k >= 3 -- läuft mindestens einmal
print(k)
for i = 1, 10 do
if i % 2 == 0 then goto weiter end -- Lua kennt kein continue, goto ersetzt es
if i > 7 then break end
io.write(i, " ")
::weiter::
end
print()gut 1 2 3 10 6 2 0 0.25 0.5 0.75 1 3 2 1 3 1 3 5 7
Funktionen
local function gruss(name, anrede)
anrede = anrede or "Hallo" -- Standardwert
return anrede .. ", " .. name .. "!"
end
local function minmax(...)
local liste = {...} -- ... sammelt beliebig viele Argumente
table.sort(liste)
return liste[1], liste[#liste], #liste -- mehrere Rückgabewerte
end
local function summe(...)
local s = 0
for _, v in ipairs({...}) do s = s + v end
return s
end
print(gruss("Mia"))
print(gruss("Tom", "Hi"))
local lo, hi, anzahl = minmax(5, 2, 9, 1)
print(lo, hi, anzahl)
print(summe(1, 2, 3, 4))
print(select("#", 1, nil, 3), select(2, "a", "b", "c"))
print((minmax(3, 1, 2))) -- Klammern: nur der erste Wert
print(table.unpack({10, 20, 30}))Hallo, Mia! Hi, Tom! 1 9 4 10 3 b c 1 10 20 30
Funktionen sind Werte: Closures
local function zaehler(start)
local n = start or 0
return function() n = n + 1; return n end -- merkt sich n
end
local a, b = zaehler(), zaehler(100)
print(a(), a(), a(), b(), b())
local function anwenden(liste, f)
local ergebnis = {}
for i, v in ipairs(liste) do ergebnis[i] = f(v) end
return ergebnis
end
print(table.concat(anwenden({1, 2, 3}, function(x) return x * x end), ","))
local mathe = {
plus = function(a, b) return a + b end,
mal = function(a, b) return a * b end,
}
print(mathe.plus(2, 3), mathe["mal"](4, 5))
local function fakultaet(n) return n <= 1 and 1 or n * fakultaet(n - 1) end
print(fakultaet(10), fakultaet(20))
local function endrekursiv(n, acc) -- Endrekursion: kein Stapelüberlauf
if n == 0 then return acc end
return endrekursiv(n - 1, acc + n)
end
print(endrekursiv(100000, 0))1 2 3 101 102 1,4,9 5 20 3628800 2432902008176640000 5000050000
Merke
if/elseif/else/end,while,repeat/until, numerischesfor i = von, bis, schritt- Kein
continue:gotooder verschachtelteif - Funktionen: mehrere Rückgabewerte,
...für variable Argumente,select - Funktionen sind Werte: Closures merken sich lokale Variablen
Aufgabe
Schreibe eine Funktion, die eine Liste von Zahlen bekommt und Summe und Durchschnitt zurückgibt.