我想爲使用BNF符號定義的下面的語言做一個函數。我對計劃的表示有好奇心
expr:='['op expr expr']'|號碼
op:='+'| ' - '| ''| 「/」 *
例如,假設函數名是本功能,然後
(funct '(+ 1 3)) => 4
(funct '(+ (- 3 1) 4) => 6
請給我一個提示或示例代碼
我想爲使用BNF符號定義的下面的語言做一個函數。我對計劃的表示有好奇心
expr:='['op expr expr']'|號碼
op:='+'| ' - '| ''| 「/」 *
例如,假設函數名是本功能,然後
(funct '(+ 1 3)) => 4
(funct '(+ (- 3 1) 4) => 6
請給我一個提示或示例代碼
你是否在想這樣的事情?
(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
P.S.所有這些操作符都使用一個參數,'+'和'*'也可以使用零參數。因此,您在代碼中的長度檢查可能過於嚴格。 –
在拍這個作品開箱的:
[+ 2 3]
=> 5
檢查你的口譯員,你可能不需要做爲此工作。
我想在Scheme中使用BNF符號定義的以下語言編寫任何函數[+ 2 3]。它不能在DrRacket中使用。所以我想做功能[+ 2 3],而不是(+ 2 3)。 – Kingcarrot
什麼是你的代碼示例的相關性? – japreiss
您已將問題更改爲完全不同的內容。面向未來如果您發現您的舊問題對其他用戶無用,請刪除並提出新問題。如果您的舊問題對他人有用,請接受最佳答案並繼續。如果每個人都只編輯一個問題,那麼這個網站就很少有很多好問題的答案。 – Sylwester
@Sylwester我懷疑OP有一個XY問題的例子。它經常發生令人沮喪的事情。 –