Presentation is loading. Please wait.

Presentation is loading. Please wait.

Lua for TerraME: A Short Introduction Pedro Ribeiro de Andrade Tiago G. S. Carneiro Gilberto Câmara Münster, 2014.

Similar presentations


Presentation on theme: "Lua for TerraME: A Short Introduction Pedro Ribeiro de Andrade Tiago G. S. Carneiro Gilberto Câmara Münster, 2014."— Presentation transcript:

1 Lua for TerraME: A Short Introduction Pedro Ribeiro de Andrade Tiago G. S. Carneiro Gilberto Câmara Münster, 2014

2 TerraME uses Lua programming language  http://www.lua.org/manual/5.2/

3 What is Lua?  Yet another scripting language  Simple and flexible  “Simple things simple, complex things possible”  Small, Efficient, Portable  Whole library written in ANSI C, compiles the same source code in all platforms  The tarball for Lua 5.1.4 takes 860K uncompressed. The source contains around 17000 lines of C. Under Linux, the interpreter takes 153K and the library, 203K.  Several benchmarks show Lua as the fastest language in the realm of interpreted scripting languages.  Free and distributed under MIT license

4 Few keywords & Clean syntax  The following keywords are reserved and cannot be used as names  The following strings denote other tokens:

5 Lua and the Web Where is Lua?  Inside Brazil  Petrobras, the Brazilian Oil Company  Embratel (the main telecommunication company in Brazil)  many other companies  Outside Brazil  Lua is used in hundreds of projects, both commercial and academic  CGILua still in restricted use  until recently all documentation was in Portuguese Lua is the language of choice for computer games [Ierusalimschy et al, 1996] source: the Lua team

6

7

8

9 Variables and Values  Case sensitive  semicolon may optionally follow any statement a = 1 B = a*2 print(a) print(b) print(A) print(B)

10 Comments  double hyphen (--) until the end of the line.  block comments start with --[[ and run until --]] print("hello") -- my comment -- print("hello") --[[ print(10) -- no action (comment) print(20) -- no action (comment) --]]

11 Types  nil  boolean  number  string  table  function print(type(3))

12 nil  Everything that does not exist print(c) c = 10 print(type(c)) c = nil print(type(c)) print(type("a string!!")) print(type(print))

13  false/true  nil and false are evaluated as false, everything else is true  zero and the empty string are true  operators and, or, and not (and) (or) print(true) print(true and false) print(true and (false or true)) print(false or (true and false) or (true and true)) boolean

14 number  the only type for numeric values  double-precision floating-point number  arithmetic operators: +, –, *, /  exponent (^) and modulus (%)  boolean operators (, =, ~=, and ==) A = 4.8 + 2.2 B = 4e+3 a = A ^ 2 b = A % 7.2 print(A) print(B) print(a) print(b) print(a > b) print(b ~= 2)

15 Parentheses  Always optional (except in the case of function call)  When in doubt, use parentheses a+-i (a+(-i)) < ((b/2)+1) 5+x^2*8 5+((x^2)*8) a (a < y) and (y <= z) –x^y^z –(x^(y^z))

16 string  single or double quotes  operator.. print("hello") print('hello') x = 2 print ("x = "..x) print ("x = “,x)

17 for statement  A statement to repeat other statements, with the following syntax: for var = exp1, exp2, exp3 do something end  That loop will execute something for each value of var from exp1 to exp2, using exp3 as the step to increment var. This third expression is optional (default is 1). for i = 1, 10 do print(i) end for i = 1, 10, 2 do print(i) end

18 if statement  An if statement tests condition and executes its then-part or its else-part (optional) accordingly a = 6; b = 5 if a < 0 then print("a < 0") end if a = b") end -- if a < b then print("a < b") elseif a < b + 5 then print("b <= a < b+5") else print("a > b+5") end

19 table  The only structured data type  Can implement arrays -- Defining a table x = {7, 3, 2, 6, 4, 3, 9} -- Referencing elements of a table print(x[1]) x[1] = x[2] + x[3] print(x[1]) -- Length of a table print(#x) -- Traversing a table – FIRST WAY for i = 1, #x do print(i.." "..x[i]) end -- Traversing a table – SECOND WAY for k, v in pairs( x ) do print ("key:"..k,"Value: "..v) end

20 table  Tables can be indexed not only with numbers, but also with strings or any other value of the language, except nil -- Defining a table loc = { cover = "forest", distRoad = 0.3, distUrban = 2 } -- Referencing elements of a table print(loc["cover"]) print(loc.cover) loc.distRoad = loc.distRoad^2 loc.distTotal = loc.distRoad + loc.distUrban print(loc.distTotal) loc.deforestationPot = 1/loc.distTotal print(loc.deforestationPot)

21 Tables within tables -- Defining a table loc = { cover = "forest", dist = {road = 0.3, urban = 2} } -- Referencing elements of a table print(loc.dist.road) loc.dist.total = loc.dist.road + loc.dist.urban print(loc.dist.total) -- Traversing a table – SECOND WAY for k, v in pairs( x ) do print ("key: "..k,"Value: "..v) end

22 function  A function is a named codes snippet that can carry out a specific task (commonly called procedure) or compute and return values.  A function is a first-class value in Lua.  Can be assigned to a variable (even a table)  Can be passed as parameter to other function  Can be the returning value of other function myprint = print print = nil myprint(2) print = myprint

23 Standard libraries within TerraME  Basic (print, type, tostring, tonumber, …)  String (string.find, string.gsub, string.format, …)  Table (table.insert, table.remove, table.sort, …)  Math (math.random, math.sin, math.exp, …)  IO (io.open, io.read, io.close, …)  OS (os.clock, os.execute, …)  Debug (debug.getinfo, debug.getlocal, …) print(8*9, 9/8) -- 72 1.125 print(math.pi) -- 3.1415926535898 a = math.sin(math.pi/6) + math.cos(math.pi/3) -- angle in radians print(a) -- 1 print(os.time()) print(string.find("pattern", "tt")) – 3 4

24 Lua math library  Most important math functions:

25 Definition of a function -- Syntax 1 function add(a, b) return a + b end print(add(2, 3)) -- Syntax 2 add = function(a, b) return a + b end print(add(2, 3))

26 Parameters of a function function f(a, b) print(a, b) return a and b -- “and” returns the second argument when the first not false end CALLPARAMETERSRESULT f(false,3)a = false, b = 3false f(3)a = 3, b = nilnil f(3, 4)a = 3, b = 44 f(3, 0, 5)a = 3, b = 0 (5 is discarded) 0

27 High-order Functions  Functions can also be parameters to other functions. This kind of function is what we call a higher-order function. function forEach(tab, func) for position, value in pairs(tab) do func(value, position) end x = {7, 3, 2, 6, 4} forEach(x, function(element) print(element) end) forEach(x, function(value, position) print(position, value) end)

28 Tables with functions  Table may have their own functions. loc = { cover = "forest", distRoad = 0.3, distUrban = 0.2, deforestPot = function(myloc) return 1/(myloc.distRoad + myloc.distUrban) end } print(loc.deforestPot(loc)) -- 2 print(loc:deforestPot()) -- 2

29 Tables with functions  We can declare a “class” in Lua by creating a function that takes a table constructor as argument. function MyLocation(locdata) locdata.covertype = "forest" locdata.deforPot = function(self) return 1/(self.distRoad + self.distUrban) end return locdata end loc = MyLocation({distRoad = 0.3, distUrban = 0.2}) loc = MyLocation{distRoad = 0.3, distUrban = 0.2} print(loc.covertype) print(loc:deforPot())

30 Some tips to organize your code – Make it look professional !  Indent your code for readability  Comment your code! You may need understand/explain it 1 year later.  Give neaningfull names to variables: YES: soilWater, landCover NO: x1, x2, r3, ss  Avoid magic numbers! Use UPPERCASE constant names in head of your code: STEP = 1, SIMULATION_STEP = 1, EMPTY_SEED_BANK = -11  Follow TerraME naming convention

31 TerraME naming convention  TerraME adopts American English  neighbor instead of neighbour  Names of types have the upper CamelCase style, starting with a capital letter, followed by other words starting with capitalized letters  Agent, Trajectory, CellularSpace, SocialNetwork.  Functions and variable names have the lower CamelCase style, with names starting with lowercase letters followed by other words starting with capitalized letters  load, database, forEachCell, dbType


Download ppt "Lua for TerraME: A Short Introduction Pedro Ribeiro de Andrade Tiago G. S. Carneiro Gilberto Câmara Münster, 2014."

Similar presentations


Ads by Google