首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ml数据类型(带有原语函数)如何制作?

ml数据类型(带有原语函数)如何制作?
EN

Stack Overflow用户
提问于 2011-06-01 08:59:31
回答 1查看 293关注 0票数 0

我有这个数据类型

代码语言:javascript
复制
datatype e = X | Const of int | P of e*e | S of e*e | M of e*e | D of e*e;

而这个程序

代码语言:javascript
复制
val rec evl = fn (Const k)=>(fn x=>k)| X=> (fn x=>x)| P(e1,e2)=> (fn x=> (evl e1 x)+(evl e2 x))| S(e1,e2)=> (fn x=> (evl e1 x)-(evl e2 x))| M(e1,e2)=> (fn x=> (evl e1 x)*(evl e2 x))| D(e1,e2)=> (fn x=> (evl e1 x)/(evl e2 x));

如何扩展此数据类型和evl过程以执行以下操作:

-val addsub = evl( A( X(1),X(2),X(3),S( X(4),X(5),X(5),9,8 ))返回它= 12 (4+5+2+(9-8))

P = +,S= -,M=*,D= /,而不仅仅是X(5),我需要X(N).?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-06-01 15:06:12

关于您的数据类型和功能的一些注释:

在算术expression.

  • You过度使用lamda函数的上下文中,
  • X是一个多余的例子,它使您的代码很难理解。

S(减法)和D(除法)不是可交换的,对参数列表进行这些运算是个坏主意。我演示了如何使用P (Plus)和M(乘):

代码语言:javascript
复制
datatype e2 = Const of int | P of e2 list | M of e2 list;
val rec evl2 =
         fn Const k => k    
         | P es => List.foldl (fn (e, acc) => acc + (evl2 e)) 0 es
         | M es => List.foldl (fn (e, acc) => acc * (evl2 e)) 1 es;

例如:evl2 (P [Const 3, Const 2, M [Const 3, Const 2, Const 1]])将返回11

如果你还想用S和D来做它,你可以从上面的代码片段推断。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6198636

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档