lua程式設計(第四版)練習答案自做(第十八章)

2021-10-20 04:09:01 字數 3646 閱讀 7028

倉庫數值型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...