2014-11-02 58 views
0

我想知道如何創建一個數據類型,並可以在評估一個字符串 含有(「1 + 2」)幫助SML使用的數據類型加減

我想製作一個數據類型

datatype opp = oper of string; 
datatype numm = numb of int; 
datatype calc = opp | numm; 

回答

2

我想說

datatype expr = Number of int | Add of expr * expr; 
沿

fun calc(Number(x)) = x 
    | calc(Add(x, y)) = calc(x) + calc(y); 

會做的伎倆。但是,一旦開始添加更多的運算符,您需要考慮關聯性和運算符優先級。

+0

那麼你會怎麼稱呼(1 + 3)?你會只是把calc(exp(1 + 3))抱歉,我是ML新手。 – user3312266 2014-11-03 02:17:18

+1

@ user3312266你的'calc(Add(Number(1),Number(3)))' – 2014-11-03 03:58:36

+0

我的理解是通常在解析器中而不是在評估器中處理關聯性和優先級。你將'2 + 3 * 8'解析成'Add(Number(2),Multiply(Number(3),Number(8)))'而不是'Multiply(Add(Number(2),Number(3)),數(8))'。評估人員相當簡單。 – 2014-11-04 22:42:31