【发布时间】:2014-03-07 15:05:07
【问题描述】:
请记住,这是家庭作业的一部分 - 所以请不要直接回答。我只是需要一些帮助来找出答案,所以一个教程链接可以帮助我理解材料。
SML 代码:
datatype 'ingredient pizza =
Bottom
| Topping of ('ingredient * ('ingredient pizza));
datatype fish =
Anchovy
| Shark
| Tuna;
(* Testing Pizza Objects *)
val my_pizza1 = Topping(Tuna, Topping(Shark, Topping(Anchovy, Bottom)));
val my_pizza2 = Topping(Shark, Topping(Tuna, Topping(Anchovy, Bottom)));
val my_pizza3 = Topping(Anchovy, Topping(Shark, Topping(Tuna, Bottom)));
(* My Function Start *)
fun rem_ingredient Bottom = Bottom
| rem_ingredient(t) = fn(Topping(p)) => Topping(t, rem_ingredient(p))
| rem_ingredient(Topping(t,p)) = Topping(t, rem_ingredient(p));
(* My Function End *)
如果我用 1 个参数调用函数 rem_ingredient
val rem_tuna = rem_ingredient Tuna;"
我应该得到一个可以调用的函数
rem_tuna my_pizza3;
从比萨饼中取出金枪鱼3
如果我用 2 个参数调用同一个函数
rem_ingredient Tuna my_pizza2;
我应该使用 2 个参数直接从 Pizza2 对象中删除 Tuna。
问题:
我不断收到错误:语法错误:在 rem_ingredient 的第三个构造函数上用 DARROW 替换 EQUALOP,我知道我遗漏了一些可能很明显的东西。我们上周才开始在编程语言中学习 SML,我仍在努力理解它。任何人指出我的方向将不胜感激。
再次,请不要直接回答,我想学习这些材料,但我不确定我要修复什么。
【问题讨论】:
标签: function constructor sml