Scheme 测试具有意外输出的函数

Scheme 测试具有意外输出的函数,scheme,racket,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 我将以下定义为测试:

我编写了一个程序来计算列表形式的表达式的导数,因此
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))

我遗漏了什么?

我想你是在找新行:

(define (runtest test)
  (display "diff x ")
  (display test)
  (display " => ")
  (display (diff 'x test))
  (newline))
顺便说一句,除了字符串之外,很少有理由调用
display
;我建议使用
write
进行
test
(diff'x测试)

更惯用的书写方式是:

或者,在任何具有以下内容的计划中:


我想你在找
newline

(define (runtest test)
  (display "diff x ")
  (display test)
  (display " => ")
  (display (diff 'x test))
  (newline))
顺便说一句,除了字符串之外,很少有理由调用
display
;我建议使用
write
进行
test
(diff'x测试)

更惯用的书写方式是:

或者,在任何具有以下内容的计划中:

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