如何返回包含过程的评估参数的字符串?

时间:2012-03-25 18:34:21

标签: scheme racket

使用Racket,我想设计一个过程,它将二进制操作和两个参数作为输入a& b任何类型的b,评估参数的二元运算,并返回描述评估结果的字符串。例如,如果我的程序被称为foo,那么

(foo + 1 2)
(foo cons 'bar empty)

将返回

The + of 1 and 2 is: 3
The cons of 'bar and empty is: (bar)

我的代码看起来像

(define (foo op a b)
    (let ((result (op a b)))
      (display
       (string-append
        "The "
        (arg->string op)
        " of "
        (arg->string a)
        " and " 
        (arg->string b)
        " is: "
        (arg->string result)
        ))))

是否可以构造一些操作arg->字符串,它可以做我想要的(即,在转换为字符串之前评估其参数?)。简单地构造一个字符串或引用参数在过程体内返回文字结果,即“op”或“op而不是”+“或'+。

感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

这个解决方案是最简单的想法:

(define (foo op a b)
  (printf "The ~s of ~s and ~s is: ~s\n"
          (object-name op) a b (op a b)))

看看这是否适合你:

(foo + 1 2)
> The + of 1 and 2 is: 3

(foo cons 'bar empty)
> The cons of bar and () is: (bar)