Function 函数创建另一个函数时出现SML问题
请记住,这是作业的一部分,所以请不要直接回答。我只是需要一些帮助来找出答案,所以一个链接到一个教程来帮助我理解材料将是伟大的 SML代码:Function 函数创建另一个函数时出现SML问题,function,constructor,sml,Function,Constructor,Sml,请记住,这是作业的一部分,所以请不要直接回答。我只是需要一些帮助来找出答案,所以一个链接到一个教程来帮助我理解材料将是伟大的 SML代码: datatype 'ingredient pizza = Bottom | Topping of ('ingredient * ('ingredient pizza)); datatype fish = Anchovy | Shark | Tuna; (* Testing Pizza Objects *) val
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_component
val rem_tuna = rem_ingredient Tuna;"
我应该得到一个可以调用
rem_tuna my_pizza3;
从比萨饼中取出金枪鱼
如果我用两个参数调用同一个函数
rem_ingredient Tuna my_pizza2;
我应该使用2个参数直接从pizza2对象中删除Tunar
问题是:
我不断得到错误:语法错误:在rem_成分的第三个构造函数上用DARROW替换EQUALOP,我知道我遗漏了一些可能很明显的东西。我们上周才开始学习编程语言中的SML,我还在努力理解它。任何为我指点方向的人都将不胜感激
同样,请不要直接回答,,我想学习材料,但我不确定我要修复什么。为了消除语法错误,需要在
fn
表达式周围加括号(因为以下模式
被视为fn
的一部分)
然而,这不是你真正的问题。所编写的函数没有一致的类型,因为第二种情况返回函数,而其他情况则没有。Ah,好的。我们在课堂上还没讲到这一点。我认为构造函数可以不同,基本上类似于if-then语句,用于处理函数中的参数。是的,构造函数可以不同,但所有右侧都必须有一个公共类型。否则,您会如何为整个函数指定一个类型?对,非常有意义,感谢您为我指明了正确的方向。