2014-12-03 33 views
0

我正在使用DrRacket,並且我有一個字符串列表。一個可能的輸入可能是'(「+​​」「100」「22」)。如何讓這些列表函數正確執行?我的例子的答案是122.我可以做到這一點,如果我可以刪除輸入必須是字符串列表的事實。 那麼,如何將字符串列表更改爲符號列表?字符串列表中的球拍公式

+0

有永遠只能一人操作? (即+, - ,*或/)。如果是這樣,操作員是否始終是列表中的第一個字符串? – RogueBaneling 2014-12-03 16:32:18

回答

1

你需要做類似的東西:

#lang racket 

(define (evaluate expr) 
    (define r evaluate) 
    (match expr 
    [(and (? string?) (app string->number n)) 
    n] 
    [(list "+" e1 e2) (+ (r e1) (r e2))] 
    [(list "-" e1 e2) (- (r e1) (r e2))] 
    [(list "*" e1 e2) (* (r e1) (r e2))] 
    [(list "/" e1 e2) (/ (r e1) (r e2))] 
    [_ 
    (error 'evaluate "got ~a" expr)])) 

(evaluate '("+" "1" "2")) 
(evaluate '("+" ("-" "5" "4") "2")) 
0

您可以使用map函數將字符串列表轉換爲符號列表。

例如:

(define los '("+" "100" "22)) 
(map string->symbol los)