端午在家休息了好幾天,基本上就是帶孩子和睡覺了。荒廢了好幾天之後,今天重操舊業。
the little scheme看到第99頁了。要寫乙個函式numbered?來判斷乙個表示式是否是數字表示式。
上**:
(define atom?
(lambda (a)
(not (or (null? a) (pair? a)))))
(define operator?
(lambda (op)
(or (eq? (quote +) op) (eq? (quote -) op) (eq? (quote *) op) (eq? (quote /) op))))
(define numbered?
(lambda (lat)
(cond
((atom? lat) (number? lat))
((null? lat) #f)
((null? (cdr lat)) #f)
((null? (cdr (cdr lat))) #f)
(else (and (numbered? (car lat)) (operator? (car (cdr lat))) (numbered? (car (cdr (cdr lat)))))))))
然後我自己寫了一系列的測試用例來測試上面的函式。但是,慢慢的覺得這樣太麻煩了。開始萌生自己寫個測試工具的想法:我提供測試用例,工具來把引數傳給被測試的函式,再把得到結果與預期結果相比較。這有點像junit中的assertequal。
時間不長寫出來了,名字就叫testn吧。
上**:
那來測一下之前寫的函式numbered?
(testn numbered? '(
(1 #t)
('a #f)
(() #f)
((1) #f)
((1 2) #f)
((1 'a) #f)
((1 + 2) #t)
((1 + (1 + 2)) #t)
((1 + (1 2)) #f)
(((1 + 2) + (1 + 9)) #t)
(((1 2) + (1 + 2)) #f)
))
結果是:
'(#t #t #t #t #t #t #t #t #t #t #t)
哈哈,通過了。
用Scheme寫乙個Scheme編譯器(一)
在博主的大學生涯中,感覺最頭痛的一門課程就是編譯原理了,學習完這門課程之後,雖然知道了ll,lr演算法,和一系列與編譯原理相關的術語,可是對它的了解一直停留在做題上,雖然博主一直希望能夠通過自己寫乙個編譯器來加深對編譯原理的理解,可是用c語言寫編譯器真的是一場噩夢,每天大把的時間都花在了除錯bug上...
用python寫的乙個網頁測試工具
寫了乙個測試 的指令碼,用多執行緒跑的,每個執行緒每秒去取一次網頁,因為這個指令碼用到了執行緒啊,time,ulrlib這些東西,也許對其他人會有用,貼出來吧。另外乙個原因是,通過這個指令碼,發現python的效率真的不錯,無論是開發效率還是執行效率。之前完全沒用過python的thread和tim...
從零開始寫乙個契約測試工具
最近微服務越來越流行了,我們公司的應用都開始往微服務遷移,但是目前來看,針對微服務的測試技術還是比較少的,網上看的比較多的是乙個叫做契約測試的東西,但是實際上寫出來的都是一些demo,離真正能使用,還是有非常遠的距離,所以自己想根據契約測試的一些理論知識,自己擼乙個契約測試的工具出來。python ...