我对scheme的符号很好奇
我想用BNF符号为下面的语言定义一个函数 expr:='['操作expr']'|编号 op:='+'|'-'|'''.'/'* 例如,假设函数名为funct,则我对scheme的符号很好奇,scheme,Scheme,我想用BNF符号为下面的语言定义一个函数 expr:='['操作expr']'|编号 op:='+'|'-'|'''.'/'* 例如,假设函数名为funct,则 请给我一个提示或示例代码在Racket中这是一个开箱即用的代码: [+ 2 3] => 5 请咨询您的口译员,您可能不需要做任何事情就可以工作。您是否想过类似的事情 (define (ev exp) (cond ((number? exp) exp) ((not (list? exp)) (e
请给我一个提示或示例代码在Racket中这是一个开箱即用的代码:
[+ 2 3]
=> 5
请咨询您的口译员,您可能不需要做任何事情就可以工作。您是否想过类似的事情
(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))))))
代码示例的相关性是什么?您已将问题更改为完全不同的问题。将来如果您发现您的旧问题对其他用户没有用处,请删除并提出新问题。如果你的老问题对别人有用,接受最好的答案,继续前进。如果每个人只编辑一个问题,这个网站就会缺少许多好问题的好答案。@Sylvester我怀疑OP有XY问题的案例。这种情况经常发生,令人沮丧。@ChrisJester Young遗憾的是,最初的问题很有趣,特别是因为R7RS收回了方括号的使用。我想在Scheme中为以下使用BNF符号[+2 3]定义的语言编写任何函数。它不能在DrRacket中使用。所以我想做函数[+23],而不是(+23)。所有这些运算符也使用一个参数,
+
和*
也使用零参数。因此,代码中的长度检查可能过于严格。
(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