mirror of
https://github.com/extreme-tech-seminar/seven-more-languages-in-seven-weeks.git
synced 2024-11-14 19:19:35 +00:00
Lua
This commit is contained in:
parent
0d5af699f4
commit
b29ac07f30
4 changed files with 289 additions and 0 deletions
35
exercises/lua/day1.lua
Normal file
35
exercises/lua/day1.lua
Normal file
|
@ -0,0 +1,35 @@
|
|||
function ends_in_3(n)
|
||||
return n % 10 == 3
|
||||
end
|
||||
|
||||
function is_prime(n)
|
||||
if n == 1 then return false
|
||||
elseif n < 4 then return true
|
||||
elseif n % 2 == 0 then return false
|
||||
elseif n < 9 then return true
|
||||
elseif n % 3 == 0 then return false
|
||||
else
|
||||
local f = math.sqrt(n)
|
||||
function checkprime(x)
|
||||
return (n % x == 0) or (n % (x + 2) == 0)
|
||||
end
|
||||
local i = 5
|
||||
while math.floor(f) >= i do
|
||||
if checkprime(i) then return false end
|
||||
i = i + 6
|
||||
end
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
function first_primes_ending_in_3(n)
|
||||
local results = 0
|
||||
local i = 1
|
||||
while results < n do
|
||||
if ends_in_3(i) and is_prime(i) then
|
||||
print(i)
|
||||
results = results + 1
|
||||
end
|
||||
i = i + 1
|
||||
end
|
||||
end
|
BIN
slides/Picnic_Table_Stack.jpg
Normal file
BIN
slides/Picnic_Table_Stack.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 32 KiB |
BIN
slides/indianajones1.png
Normal file
BIN
slides/indianajones1.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 242 KiB |
254
slides/lua.org
Normal file
254
slides/lua.org
Normal file
|
@ -0,0 +1,254 @@
|
|||
#+TITLE: Seven More Languages in Seven Weeks
|
||||
#+BEAMER_HEADER: \subtitle{Lua}
|
||||
#+BEAMER_HEADER: \institute[INST]{Extreme Tech Seminar}
|
||||
#+AUTHOR: Correl Roush
|
||||
#+EMAIL: correl@gmail.com
|
||||
#+DATE: January 13, 2016
|
||||
#+OPTIONS: H:2 toc:nil ^:nil
|
||||
#+STARTUP: beamer indent
|
||||
#+COLUMNS: %45ITEM %10BEAMER_env(Env) %10BEAMER_act(Act) %4BEAMER_col(Col) %8BEAMER_opt(Opt)
|
||||
#+PROPERTY: BEAMER_col_ALL 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 0.0 :ETC
|
||||
#+LaTeX_CLASS: beamer
|
||||
#+LaTeX_CLASS_OPTIONS: [presentation,aspectratio=169]
|
||||
#+LaTeX_HEADER: \usemintedstyle{solarizeddark}
|
||||
|
||||
* Introduction
|
||||
** Introduction
|
||||
*** Lua :BMCOL:
|
||||
:PROPERTIES:
|
||||
:BEAMER_col: 0.5
|
||||
:END:
|
||||
#+BEGIN_CENTER
|
||||
#+LATEX: \fontspec{Antonio-Bold}\color{trek@lightblue}
|
||||
#+LATEX: \fontsize{80}{80}\selectfont
|
||||
LUA
|
||||
#+END_CENTER
|
||||
#+BEGIN_CENTER
|
||||
#+LATEX: \fontspec{Antonio-Bold}\color{trek@midblue}
|
||||
A powerful, fast, lightweight, embeddable scripting language
|
||||
#+END_CENTER
|
||||
*** Indiana Jones :BMCOL:
|
||||
:PROPERTIES:
|
||||
:BEAMER_col: 0.5
|
||||
:END:
|
||||
#+ATTR_LATEX: :width \textwidth
|
||||
[[file:indianajones1.png]]
|
||||
* Day 1
|
||||
** Day 1: The Call to Adventure
|
||||
- Installing Lua
|
||||
- Exploring with the REPL
|
||||
- Syntax
|
||||
- Types
|
||||
- Functions
|
||||
** Syntax
|
||||
#+BEGIN_CENTER
|
||||
/Whitespace doesn't matter/
|
||||
#+END_CENTER
|
||||
** Types
|
||||
- Lua is /dynamically/ typed
|
||||
- No integers (all numbers are 64-bit floats)
|
||||
- =nil= is its own type
|
||||
** Functions
|
||||
- Functions are /first-class values/
|
||||
- Arguments are flexible
|
||||
- Support arbitrary numbers of arguments
|
||||
- Support arbitrary numbers of results
|
||||
- Lua does /tail call optimization/
|
||||
** Variables
|
||||
#+BEGIN_CENTER
|
||||
Lua variables are /global by default/
|
||||
#+END_CENTER
|
||||
** Excercises
|
||||
#+BEGIN_CENTER
|
||||
#+LATEX: \fontspec{Antonio-Bold}\color{trek@lightblue}
|
||||
#+LATEX: \fontsize{80}{80}\selectfont
|
||||
Exercises
|
||||
#+END_CENTER
|
||||
|
||||
*** Notes :B_note:
|
||||
:PROPERTIES:
|
||||
:BEAMER_env: note
|
||||
:END:
|
||||
- [[http://lua-users.org/wiki/][Lua Users Wiki]]
|
||||
- [[http://www.lua.org/pil/contents.html][Programming in Lua (First Edition)]]
|
||||
- [[http://www.lua.org/manual/5.1/][Lua 5.1 Reference Manual]]
|
||||
- [[http://www.lua.org/manual/5.1/manual.html#2.4.4][The difference between a while and repeat loop]]
|
||||
|
||||
* Day 2
|
||||
|
||||
** Day 2: Tables All the Way Down
|
||||
#+BEGIN_CENTER
|
||||
#+ATTR_LATEX: :width 0.75\textwidth
|
||||
[[file:Picnic_Table_Stack.jpg]]
|
||||
#+END_CENTER
|
||||
|
||||
** Tables as Dictionaries
|
||||
#+BEGIN_SRC lua
|
||||
book = {
|
||||
title = "Grail Diary",
|
||||
author = "Henry Jones",
|
||||
pages = 100
|
||||
}
|
||||
|
||||
book.stars = 5
|
||||
book.author = "Henry Jones, Sr."
|
||||
#+END_SRC
|
||||
** Tables as Arrays
|
||||
- Lua counts array indices starting at *1*
|
||||
#+BEGIN_SRC lua
|
||||
medals = {
|
||||
"gold",
|
||||
"silver",
|
||||
"bronze"
|
||||
}
|
||||
|
||||
medals[4] = "lead"
|
||||
#+END_SRC
|
||||
** Metatables
|
||||
*** Left :BMCOL:
|
||||
:PROPERTIES:
|
||||
:BEAMER_col: 0.5
|
||||
:END:
|
||||
#+BEGIN_SRC lua
|
||||
function table_to_string(t)
|
||||
local result = {}
|
||||
|
||||
for k, v in pairs(t) do
|
||||
result[#result + 1] = k .. ": " .. v
|
||||
end
|
||||
|
||||
return table.concat(result, "\n")
|
||||
end
|
||||
|
||||
greek_numbers = {
|
||||
ena = "one",
|
||||
dyo = "two",
|
||||
tria = "three"
|
||||
}
|
||||
mt = {
|
||||
__tostring = table_to_string
|
||||
}
|
||||
setmetatable(greek_numbers, mt)
|
||||
|
||||
#+END_SRC
|
||||
*** Right :BMCOL:
|
||||
:PROPERTIES:
|
||||
:BEAMER_col: 0.5
|
||||
:END:
|
||||
#+BEGIN_EXAMPLE
|
||||
> =greek_numbers
|
||||
ena: one
|
||||
tria: three
|
||||
dyo: two
|
||||
#+END_EXAMPLE
|
||||
** OOP
|
||||
*** Left :BMCOL:
|
||||
:PROPERTIES:
|
||||
:BEAMER_col: 0.5
|
||||
:END:
|
||||
#+BEGIN_SRC lua
|
||||
Villain = {
|
||||
health = 100,
|
||||
new = function(self, name)
|
||||
local obj = {
|
||||
name = name,
|
||||
health = self.health
|
||||
}
|
||||
setmetatable(obj, self)
|
||||
self.__index = self
|
||||
return obj
|
||||
end,
|
||||
take_hit = function(self)
|
||||
self.health = self.health - 10
|
||||
end
|
||||
}
|
||||
#+END_SRC
|
||||
*** Right :BMCOL:
|
||||
:PROPERTIES:
|
||||
:BEAMER_col: 0.5
|
||||
:END:
|
||||
#+BEGIN_SRC lua
|
||||
SuperVillain = Villain.new(Villain)
|
||||
|
||||
function SuperVillain.take_hit(self)
|
||||
-- Haha, armor!
|
||||
self.health = self.health - 5
|
||||
end
|
||||
|
||||
SuperVillain:new("Toht")
|
||||
#+END_SRC
|
||||
** Coroutines
|
||||
#+BEGIN_QUOTE
|
||||
You may be wondering how Lua handles multithreading.
|
||||
|
||||
It doesn't.
|
||||
#+END_QUOTE
|
||||
** Coroutines
|
||||
*** Generator :B_example:
|
||||
:PROPERTIES:
|
||||
:BEAMER_env: example
|
||||
:END:
|
||||
#+BEGIN_SRC lua
|
||||
function fibonacci()
|
||||
local m = 1
|
||||
local n = 1
|
||||
|
||||
while true do
|
||||
coroutine.yield(m)
|
||||
m, n = n, m + n
|
||||
end
|
||||
end
|
||||
|
||||
generator = coroutine.create(fibonacci)
|
||||
succeeded, value = coroutine.resume(generator)
|
||||
-- value = 1
|
||||
#+END_SRC
|
||||
** Multitasking
|
||||
#+BEGIN_CENTER
|
||||
#+LATEX: \fontspec{Antonio-Bold}\color{trek@lightorange}
|
||||
#+LATEX: \huge
|
||||
Example: Building a Scheduler
|
||||
#+END_CENTER
|
||||
** Excercises
|
||||
#+BEGIN_CENTER
|
||||
#+LATEX: \fontspec{Antonio-Bold}\color{trek@lightblue}
|
||||
#+LATEX: \fontsize{80}{80}\selectfont
|
||||
Exercises
|
||||
#+END_CENTER
|
||||
* Day 3
|
||||
|
||||
** Day 3: Lua and the World
|
||||
#+BEGIN_CENTER
|
||||
#+LATEX: \fontspec{Antonio-Bold}\color{trek@lightorange}
|
||||
#+LATEX: \huge
|
||||
Example: Making Music
|
||||
#+END_CENTER
|
||||
** Excercises
|
||||
#+BEGIN_CENTER
|
||||
#+LATEX: \fontspec{Antonio-Bold}\color{trek@lightblue}
|
||||
#+LATEX: \fontsize{80}{80}\selectfont
|
||||
Exercises
|
||||
#+END_CENTER
|
||||
* Wrapping Up
|
||||
|
||||
** Wrapping Up
|
||||
#+BEGIN_QUOTE
|
||||
A lot of programmers see the surface of Lua’s clean syntax and assume
|
||||
it’s just another everyday scripting language. I certainly had that
|
||||
feeling at first glance. But I hope that as you’ve taken a deeper look
|
||||
at its tables and coroutines, you’ve enjoyed their beauty and
|
||||
simplicity.
|
||||
#+END_QUOTE
|
||||
** Wrapping Up: Strengths
|
||||
- Approachable
|
||||
- Portable
|
||||
- Easily included in other projects
|
||||
** Wrapping Up: Weaknesses
|
||||
- Batteries not included
|
||||
- Inefficient string handling
|
||||
- Quirky
|
||||
** Final Thoughts
|
||||
#+BEGIN_QUOTE
|
||||
Lua’s prototype-based object approach proves that you don’t need
|
||||
classes to build a great object system.
|
||||
#+END_QUOTE
|
Loading…
Reference in a new issue