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

1 に答える 1

4

あなたが探していると思いますnewline

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

displayところで、文字列以外を呼び出す正当な理由はほとんどありません。writefortestとを使用することをお勧めし(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)))
于 2012-10-19T01:02:58.397 に答える