使用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而不是”+“或'+。
感谢任何帮助。
答案 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)