我对计划的符号有好奇心

时间:2014-04-04 19:43:03

标签: scheme

我想创建一个函数,对于使用BNF表示法定义的以下语言。

expr:='['op expr expr']'|编号

op:='+'| ' - '| ''| '/' *

例如,假设函数名称是funct,那么

(funct '(+ 1 3)) => 4
(funct '(+ (- 3 1) 4) => 6

请给我一个提示或示例代码

2 个答案:

答案 0 :(得分:1)

在Racket中,这可以直接使用:

[+ 2 3]
=> 5

请与您的口译员核实,您可能无法为此工作做任何事情。

答案 1 :(得分:0)

您是否在想这样的事情?

(define (ev exp)
  (cond
    ((number? exp)       exp)
    ((not (list? exp))   (error "not a list"))
    ((< (length exp) 2)  (error "list too short"))
    (else 
     (apply (case (car exp)
              ((+) +)
              ((-) -)
              ((*) *)
              ((/) /))
            (map ev (cdr exp))))))

然后

> (ev '(+ 1 3))
4
> (ev '(+ (- 3 1) 4))
6