《Lua程式設計 第4版 》 第5章練習答案

2021-08-28 14:04:56 字數 2128 閱讀 5244

monday sunday sunday

一樣,都指向該錶。

a.a.a.a=3,執行的是該錶的索引 a 賦值為3,之後的a.a.a.a將會引發異常,因現a.a=3,而非表。

在方括號裡寫索引值

tab=

for i,j in pairs(tab) do

io.write(">",i,">>",j,"\n")

end

function ans_s(t,x)

local sp=t[1]

for i=2,#t do

sp=sp+t[i]*x^(i-1)

endreturn sp

end

function ans(t,x)

local sp=t[1]

local dp=x

for i=2,#t do

sp=sp+dp*t[i]

dp=dp*x

endreturn sp

end

對比ipairs和pairs迭代器迴圈次數

function ispair(t)

local x,y

for i in pairs(t) do

x=iend

for i in ipairs(t) do

y=iend

if x~=y then

return false

else

return true

endend

function movetable(t1,t2,n)

table.move(t1,1,#t1,n,t2)

return t2

end

簡單二分優化實現表字串元素連線函式

function tabconcat(tab)

local len,con=0,0

len=#tab

repeat

if len%2==1 then

len=len-1

con=1

else

con=0

endfor i=1,len/2,1 do

tab[i]=tab[2*i-1]..tab[2*i]

endif con==1 then

tab[len/2+1]=tab[len+1]

len=len/2+1

else

len=len/2

enduntil len==1

return tab[1]

end

與標準庫table.concat函式進行對比測試。

function test(tm)

print(">> ",tm," * a concat")

tab1={}

for i=1,tm do

tab1[i]="a"

endtime=os.clock()

str1=tabconcat(tab1)

print(os.clock()-time,#str1)

tab2={}

for i=1,tm do

tab2[i]="a"

endtime=os.clock()

str2=table.concat(tab2)

print(os.clock()-time,#str2)

endtest(1000000)

test(10000000)

test(100000000)

測試結果:

>>      1000000  * a concat

0.384 1000000

0.191 1000000

>> 10000000 * a concat

4.168 10000000

1.981 10000000

>> 100000000 * a concat

43.36 100000000

19.721 100000000

時間大約是標準庫的二倍。

《Lua程式設計 第4版 》 第7章練習答案

function exercise7 1and2 filename1,filename2 local inputf,outputf if filename1 and filename2 then inputf io.open filename1,r local filetest io.open fi...

《Lua程式設計 第4版 》 第9章練習答案

lua的閉包真的很強大!function derivative f,delta delta delta or 1e 5 return function x return f x delta f x delta endendfunction integral f,delta delta delta o...

Lua程式設計第4版第6章課後練習答案

6.1 略 6.2 用lselect 2,函式 6.3function f63 local t table.pack t t.n nil t.n t.n 1return table.unpack t end print f63 2 3,4 5 6.4 說下思路 pair每乙個元素,把每個元素都隨機從...