print("i", "j", "i & j")
for i = 0,1 do
for j=0,1 do
print(i, j, i & j)
end
end
上面的代碼在 Lua 中運行良好。它給出以下輸出。
i j i & j
0 0 0
0 1 0
1 0 0
1 1 1
但是下面的代碼不起作用。基本上我想根據一些用戶輸入生成真值表。加載功能似乎有問題。可能它與函式加載處理的變數型別有關。任何人都可以建議嗎?我們可以撰寫 Lua 函式來實作相同的功能嗎?這是不起作用的代碼。
str="i & j"
print("i", "j", "i & j")
for i = 0,1 do
for j=0,1 do
print(i,j,load(str))
end
end
uj5u.com熱心網友回復:
這是一個應該使用最多近六十個值的嘗試:
-- Lua >= 5.3
local concat = table.concat
local str = "((i | j) ~ k) & l" -- io.read() ?
local sep = " "
local values = {} -- 0 or 1
-- i, j, k, etc.
local names = setmetatable({},
{__index = function(t,k)
t[k] = 0
values[#values 1] = k
return 0
end}
)
local aux = {} -- Values to be printed
load("return " .. str,nil,"t",names)() -- Initialization
local n = #values
print(concat(values,sep) .. sep .. str) -- Variables
for i = 0,(1<<n)-1 do -- 2^n evaluations
local k = i
for j = n,1,-1 do
names[values[j]] = k % 2
aux[j] = k % 2
k = k >> 1
end
print(concat(aux,sep) .. sep .. load("return " .. str,nil,"t",names)())
end
i j k l ((i | j) ~ k) & l
0 0 0 0 0
0 0 0 1 0
0 0 1 0 0
0 0 1 1 1
0 1 0 0 0
0 1 0 1 1
0 1 1 0 0
0 1 1 1 0
1 0 0 0 0
1 0 0 1 1
1 0 1 0 0
1 0 1 1 0
1 1 0 0 0
1 1 0 1 1
1 1 1 0 0
1 1 1 1 0
uj5u.com熱心網友回復:
使用小技巧:
local str="i * j" -- or i & j for v5.3 lua
print("i", "j", str)
for i = 0,1 do
for j=0,1 do
local s = str:gsub("i",i):gsub("j",j)
print(i,j, (loadstring or load)("return "..s)() )
end
end
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/438097.html
上一篇:更改R中tibble列元素中的值
