2012-03-25 44 views
2

使用球拍,我想設計一個程序,其輸入一個二進制運算和任意類型的兩個參數b,評估參數的二進制運算,並返回一個描述評估結果的字符串。例如,如果我的程序被叫做foo,然後如何返回包含過程的評估參數的字符串?

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

將返回

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

我的代碼看起來像

​​

是否有可能建立一些操作arg- >會做我想要的字符串(即,在轉換爲字符串之前評估它的參數?)。只需構造一個字符串或在過程體內引用參數即可返回字面結果,即「op」或「op」而不是「+」或「+」。

任何幫助表示讚賞。

回答

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) 
+0

@thesook好消息!在您接受我的答案之後,我發現了一種顯示程序名稱的方法,完全按照您的要求進行。看看我更新的答案! :) – 2012-03-25 19:06:25

+1

謝謝!這是完美的。 – thesook 2012-03-25 19:08:06

相關問題