Scheme中的整数分数

时间:2015-10-31 22:37:01

标签: scheme racket

有一种简单的方法可以显示整个有理数,例如:

(average '(1 2 3 4)) ;returns 2 1/2 

我希望它返回5/2。谢谢。

2 个答案:

答案 0 :(得分:5)

这是DrRacket特有的行为。它定制了Racket打印处理程序,以便在"漂亮"中打印出某些值。方式,其中一些甚至不是纯文本。例如,DrRacket将在REPL中将图像作为图片打印,并将语法对象打印为完全交互式小部件,以显示源信息和基准结构。

Racket保留要定制的print功能,并且它不保证这种功能的输出。如果您想要一致的输出,请使用write总是生成纯文本,除非程序员明确更改。

(write (/ 5 2)) ; => 5/2

请注意,在REPL中,print将使用write用于完全有理数的相同文本表示。

答案 1 :(得分:4)

您可以使用numeratordenominator来获取所需的内容。类似的东西:

(let* ((avg (average '(1 2 3 4)))
       (num (numerator avg))
       (den (denominator avg)))
   (printf "~a/~a~n" num den)))