Как вернуть строку, содержащую оцененные аргументы процедуры? - PullRequest
2 голосов
/ 25 марта 2012

Используя Racket, я хочу спроектировать процедуру, которая принимает в качестве входных данных двоичную операцию и два аргумента a & 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)
        ))))

Isможно создать некоторую операцию arg-> string, которая будет делать то, что я хочу (а именно, вычислить ее аргумент перед преобразованием в строку?). Простое создание строки или цитирование аргумента в теле процедуры возвращает литералрезультат, то есть «op» или «op вместо« + »или« + ».

Любая помощь приветствуется.

1 Ответ

3 голосов
/ 25 марта 2012

Это самое простое решение, которое приходит на ум:

(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)
...