我目前正在解决Ex。 3.3.1其中:
练习3.3.1。美国使用英语系统 (长度)测量。世界其他地方使用公制系统。 因此,出国旅行的人和与外国进行贸易的公司 合作伙伴经常需要将英制测量值转换为公制测量值 反之亦然。
这是一张表格,显示了六个主要长度测量单位 英语系统:12
英制公制1英寸= 2.54厘米1英尺= 12英寸1 码= 3英尺1杆= 5(1/2)码。 1 furlong = 40 rd。 1英里= 8英尺。 开发功能英寸 - >厘米,英尺 - >英寸,码 - >英尺, 棒 - >码,弗隆 - >棒,以及英里 - >弗隆。
然后开发功能脚 - > cm,码 - > cm,棒 - >英寸,以及 miles->尺
提示:尽可能重用功能。使用变量定义 指定常量。
;; Contract: inches->cm
;; Purpose: to convert inches to centimeters
;; Examples: (inches->cm 22/7) should be 7.9828514
;; Definition: [refines the header]
(define (inches->cm in)
(* in 2.54))
;; Tests
(inches->cm 22/7) "should be" 7.98287514
当我运行该程序时,它运行如下:
7.98285714
"should be"
7.98285714
我一直在考虑的一个可能的缺陷是,如果我的代码具有多个具有多个设计配方的函数,如果我的程序运行如下,我将更难阅读:
7.98285714
"should be"
7.98285714
-11.9928
"should be"
-11.9928
9.4247736
"should be"
9.4247736
我只花时间弄清楚哪个是哪个。有没有办法使程序像下面的代码一样运行?
7.98285714 "should be" 7.98285714
-11.9928 "should be" -11.9928
9.4247736 "should be" 9.4247736
我在这个"功能编程"范式和编程语言,我不知道C中是否有printf()
和/或\n
之类的东西。但请耐心等待。
答案 0 :(得分:2)
如果你的问题是结果是用不同的行打印的,试试这个 - 它适用于初学者语言:
(define (print actual expected)
(string-append
(number->string (exact->inexact actual))
" should be "
(number->string (exact->inexact expected))))
(print (inches->cm 22/7) 7.98287514)
=> "3.142857142857143 should be 7.98287514"
如果您不受限于初学者的语言,这将是Racket中更简单的替代方案:
(printf "~a should be ~a~n" (inches->cm 22/7) 7.98287514)
甚至更好,使用check-expect
或其他一些单元测试框架,有更适合这项工作的工具。不要重新发明轮子!