2014-04-04 36 views
-2

我想爲使用BNF符號定義的下面的語言做一個函數。我對計劃的表示有好奇心

expr:='['op expr expr']'|號碼

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

例如,假設函數名是本功能,然後

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

請給我一個提示或示例代碼

+0

什麼是你的代碼示例的相關性? – japreiss

+2

您已將問題更改爲完全不同的內容。面向未來如果您發現您的舊問題對其他用戶無用,請刪除並提出新問題。如果您的舊問題對他人有用,請接受最佳答案並繼續。如果每個人都只編輯一個問題,那麼這個網站就很少有很多好問題的答案。 – Sylwester

+0

@Sylwester我懷疑OP有一個XY問題的例子。它經常發生令人沮喪的事情。 –

回答

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

P.S.所有這些操作符都使用一個參數,'+'和'*'也可以使用零參數。因此,您在代碼中的長度檢查可能過於嚴格。 –

1

在拍這個作品開箱的:

[+ 2 3] 
=> 5 

檢查你的口譯員,你可能不需要做爲此工作。

+0

我想在Scheme中使用BNF符號定義的以下語言編寫任何函數[+ 2 3]。它不能在DrRacket中使用。所以我想做功能[+ 2 3],而不是(+ 2 3)。 – Kingcarrot