2014-11-02 67 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