# Programming In Lua Exercises  wiki

These are community contributed solutions to some of the PiL3 exercises.

## Chapter 3

### Exercise 3.4

```-- Recursive solution; the basic idea is to keep factoring out x until
-- we reach a 0 level polynomial:
--
--   3x^3 + 2x^2 + x + 3
-- = (3x^2 + 2x + 1) * x + 3
-- = (((3x + 2) * x) + 1) * x + 3
-- = ((((3 * x) + 2) * x) + 1) * x + 3
--
-- N.b. this algorithm requires that there be no gaps in the series of
-- coefficients. If there is no exponent for a particular power then the
-- coefficients list must contain a 0.

function poly (coefficients, x)
size = #coefficients
if size < 0 then
print ("Error: algorithm requires positive coefficients")
elseif size == 0 then
return 0
else
c = coefficients[size]
coefficients[size] = nil
return c + x * poly(coefficients, x)
end
end

print (poly({4,3,0,1}, 10))	-- gives 4301
```

### Exercise 3.5

```-- The key is on p.22: lua returns false for comparisons between different
-- types, so only a boolean (or a nil) will return true when compared to true
-- or to false.

function test (candidate)
print (candidate == true or candidate == false)
end

candidates = {5, 0, "hello", {2,3,4}, true, false}

-- gives false, false, false, false, true, true
for k, v in pairs(candidates) do
print (test(v))
end

```

## Chapter 8

### Exercise 8.4

Can you find any value for f such that the call pcall(pcall,f) returns false as its first result?

Using the debug library ([source]):

```local f = function()
local h = function()
if c then debug.sethook(nil,"r") end
c = not c
error()
end
debug.sethook(h,"r")
end
pcall(pcall,f)
```

Another idea is to have the extra "true" added by the inner pcall overflow the call stack ([source]).

RecentChanges · preferences
edit · history
Last edited March 6, 2013 7:00 pm GMT (diff)