Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我对scheme的符号很好奇_Scheme - Fatal编程技术网

我对scheme的符号很好奇

我对scheme的符号很好奇,scheme,Scheme,我想用BNF符号为下面的语言定义一个函数 expr:='['操作expr']'|编号 op:='+'|'-'|'''.'/'* 例如,假设函数名为funct,则 请给我一个提示或示例代码在Racket中这是一个开箱即用的代码: [+ 2 3] => 5 请咨询您的口译员,您可能不需要做任何事情就可以工作。您是否想过类似的事情 (define (ev exp) (cond ((number? exp) exp) ((not (list? exp)) (e

我想用BNF符号为下面的语言定义一个函数

expr:='['操作expr']'|编号

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

例如,假设函数名为funct,则


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

在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