倉庫數值型for應該指的是for i=n,m,1的形式,也就是i從n開始按步長1逐漸遞增,直到大於m結束迴圈
function
fromto
(n,m)
n=n-
1return
function()
n=n+
1if n<=m then
return n
endendend
無狀態迭代器
#!/usr/bin/lua
local
function
iter
(m,n)
--注意m和n的順序
n=n+
1if n<=m then
return n
endendfunction
fromto
(n,m)
return iter,m,n-
1--m不可變狀態,n控制變數
endfor i in
fromto(3
,11)do
print
(i)--body
end
增加乙個步進的引數
#!/usr/bin/lua
--數值型for應該指的是for i=n,m,k的形式,也就是i從n開始按步長k逐漸遞增,直到大於m結束迴圈
function
fromto
(n,m,k)
k=k or
1 n=n-k
return
function()
n=n+k
if n<=m then
return n
endendend
for i in
fromto(2
,6,0.5)do
print
(i)--body
end
無狀態迭代器
#!/usr/bin/lua
local
function
iter
(t,n)
--注意m和n的順序
n=n+t[2]
if n<=t[1]
then
return n
endendfunction
fromto
(n,m,k)
return iter,
,n-k --m不可變狀態,n控制變數
endfor i in
fromto(3
,11,0.5)do
print
(i)--body
end
#!/usr/bin/lua
--所有重複的單詞只輸出一次,將單詞作為鍵,單詞出現的次數作為鍵值
function
uniquewords
(file)
local t=
local pos=
1for line in io.
lines
(file)
dolocal w,e=string.
match
(line,
"(%w+)()"
,pos)
while w do
pos=e
t[w]
=t[w]
==nil
and1
or t[w]+1
w,e=string.
match
(line,
"(%w+)()"
,pos)
end pos=
1end
return next,t,
nilend
#!/usr/bin/lua
local
function
iter
(str,t)
--t[1]是front,t[2]是tail
t[1]=t[1]
or1t[2
]=t[2]
or0if t[1]
<
#str then
if t[2]
<
#str then
t[2]
=t[2]+
1else
t[1]
=t[1]+
1 t[2]
=t[1
]end
local substr=string.
sub(str,t[1]
,t[2])
if string.
match
(substr,
"[%s]+"
)then
--當子串全是空白字元時認為是空子串,返回nil
return t,substr
else
return t
endelse
return
nilend
endfunction
substring
(str)
return iter,str,
end----------------------------------------------
for _,s in
substring
("hel l o")do
if s then
print
(s)end
end
#!/usr/bin/lua
local
function
iter
(tab,index)
--index[1]是front,index[2]是tail
index[1]
=index[1]
or1index[2]
=index[2]
or0local temp=
if index[1]
<
#tab then
if index[2]
<
#tab then
index[2]
=index[2]
+1else
index[1]
=index[1]
+1index[2]
=index[1]
endfor i=index[1]
,index[2]
do temp[
#temp+1]
=tab[i]
endreturn index,temp
else
return
nilend
endfunction
subtab
(tab)
return iter,tab,
enda=
for _,t in
subtab
(a)do
for k,v in
pairs
(t)do
print
(v)end
print
("-------------"
)end
要是集合有空洞或者非數字鍵應該怎麼處理呢
lua程式設計(第四版)練習答案自做(第十三章)
13.1 13.2 13.3 13.4 13.5 13.6 13.7 倉庫page136string.format x 0xff 0xabcd 上例中f即二進位制1111,0xff前面的所有位為0,後面八位為1。運算中,1即不變,0即為0,故0xabcd只有後面的cd不變,前面的位都變為0.stri...
演算法第四版 練習答案 1 4 1
證明從n個數中,取出3個整數的不同組合的總數為n n 1 n 2 6 提示 使用數學歸納法 最簡單和常見的數學歸納法是證明當n等於任意乙個自然數時某命題成立。證明分下面兩步 證明當n 1時命題成立。假設n m時命題成立,那麼可以推導出在n m 1時命題也成立。m代表任意自然數 這種方法的原理在於 首...
演算法 第四版 練習1 4 2
修改threesum,正確處理兩個較大的int值相加可能溢位的情況 首先jdk中定義int佔4個位元組,32位 後面全部的計算都是以此為根據的 32位就是jvm僅僅給分配32個格仔的空間,用以存放資料。總所周知計算機中用0和1存放資料。那麼,32個格仔中放滿0或1的方法 有2的32次方種 或者說32...