2012-10-18 44 views
1

我有一個程序編寫來計算列表形式的派生詞,所以4x^3表示爲(* 4 (expt x 3)),我正在編寫一個測試套件來打印出結果。我有一個函數runtest接受一個表達並相對於所述衍生物計算到x並返回結果意想不到的輸出測試功能

(define (runtest test) 
    (display "diff x ")(display test)(display " => ")(display (diff 'x test))) 

使結果顯示diff x expression => result

我有以下定義爲測試:

(define test1 '4) 
(define test2 '(* 2 x)) 
(define test3 '(* 2 y)) 
(define test4 '(+ x (* x x))) 
(define test5 '(expt x 4)) 

然後我把所有的測試放在一個列表中,這樣我就可以在列表中映射並返回結果:

(define test-suite (list test1 test2 test3 test4 test5)) 

,當我運行(map runtest test-suite)而不是分別返回各自的我得到一個長長的名單,沒有換行,而不是時,我想:

diff x 4 => 0 
diff x '(* 2 x) => '(+ (* 0 x) (* 2 1)) 
diff x '(* 2 y) => '(+ (* 0 y) (* 2 0)) 
diff x '(+ x (* x x)) => '(+ 1 (* 2 x)) 
diff x '(expt x 4) => '(* 4 (expt x 3)) 

我缺少什麼?

回答

4

我認爲你正在尋找newline

(define (runtest test) 
    (display "diff x ") 
    (display test) 
    (display " => ") 
    (display (diff 'x test)) 
    (newline)) 

BTW,有很少的好理由罵display上的任何東西,但一個字符串;我會建議使用writetest(diff 'x test)

更慣用的方式把它寫在Racket是這樣的:

(define (runtest test) 
    (printf "diff x ~s => ~s\n" test (diff 'x test))) 

,或者在任何計劃與SRFI-28,這樣的:

(define (runtest test) 
    (display (format "diff x ~s => ~s~%" test (diff 'x test)))