function table.includeIndex(t,index)
for k,v in pairs(t) do
if k == index then
return true
end
end
return false
end
function table.delete_at(t,index)
if table.includeIndex(t,index) then
table.remove(t,index)
end
end
function table.delete(t,value)
if table.include(t,value) then
table.delete_at(t,table.index(t,value))
return value
end
end
function table.index(t,item)
for k,v in pairs(t) do
if type(t[k]) == 'table' then
if table.equal(t[k],item) then
return k
end
else
if t[k] == item then
return k
end
end
end
return "none"
end
function table.dup(t)
local w = {}
for k,v in pairs(t) do
w[k] = v
end
return w
end
function table.include(t,value)
for k,v in pairs(t) do
if t[k] == value then
return true
end
end
return false
end
function tab(tab)
return setmetatable(tab,{__index=table})
end
function table.empty(t)
for k,v in pairs(t) do
if v ~= nil then
return false
end
end
return true
end
function table.reject(original,items)
local t = table.dup(original)
for k,v in pairs(items) do
table.delete(t,v)
end
return t
end
---------------------------------------------------
function table.testrejectedArray(t,rejected,index)
tab(rejected)
if index == nil then
index = 1
end
if rejected:empty() then -- The line I'm talking about.
print('yey')
return true
else
if rejected:include(t[index]) then
t:testrejectedArray(rejected:reject({t[index]}),index + 1)
else
if index < #t + 1 then
t:testrejectedArray(rejected,index + 1)
else
print('haha')
return false
end
end
end
end
a = tab{1,2,3}
seq = tab{3,1,2}
w = seq:testrejectedArray(a)
print(w)
All thing before '---' needs only if you want to run it. Should I post like that?
The function 'testrejectedArray' return nil, but should to return true/false value.
When I run the code it prints 'yey', so if block is runing, but how is it possible to not return something if "return true" is next line?
The point is that if we substitute 'rejected:empty()' to 'true' then the function 'testrejectedArray' will return true So the function return false? But if we substitute 'rejected:empty()' to 'false' it's don't prints 'yey'
So 'rejected:empty()' return true, but for a reason it won't return me anything.
table.includeIndexcould be written simply asreturn t[k]~=nilandtable.emptyasreturn next(t)~=nil. No need for thepairsloop in either case. - lhf