测试具有意外输出的功能

时间:2012-10-18 23:44:24

标签: scheme racket

我有一个程序来编写以列表形式计算表达式的衍生物,因此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))

我错过了什么?

1 个答案:

答案 0 :(得分:4)

我认为你正在寻找newline

(define (runtest test)
  (display "diff x ")
  (display test)
  (display " => ")
  (display (diff 'x test))
  (newline))
顺便说一句,除了一个字符串之外,很少有理由在display之外调用它。我建议write使用test(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)))