lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]



On 21 Feb 2011, at 18:37, Dirk Laurie wrote:
   (a) NaN is to numbers what nil is to Lua values: not-a-number vs
not-a-value. It makes intuitive sense that it should be logically
       different from numbers.

OK, but why this implies NaN should evaluate to false? Apparently, Lua authors regret that nil evaluates to false [1]: "Not introducing booleans from the start had a few unfortunate side-effects. One is that we now have two false values: nil and false.". Lately, I've become a little more inclined to agree with them in this particular aspect because I seems to me it brings more confusion than actual benefits.

   (b) The implementation, as Tony has shown, requires a minimal
       change to the Lua source code.

Most times, the implementation is the easiest part. A harder part is to reason about all the subtle implications of these apparently innocent changes.

   (c) It would allow elegant error-checking code like
x=assert(x-f(x)/df(x), "NaN in Newton iteration, maybe a multiple zero?")


If you want to check for NaN or nil, why not doing it explicitly:

function assertnumber(value, ....)
	if type(value) ~= "number" or value ~= value then
		error(...)
	end
	return value, ....
end


[1] http://www.tecgraf.puc-rio.br/~lhf/ftp/doc/hopl.pdf

--
Renato Maia
Computer Scientist
Tecgraf/PUC-Rio
__________________________
http://www.inf.puc-rio.br/~maia/