Question

Keep in mind, this is part of a homework assignment - so please, no direct answer. I just need some help in finding out the answer, so a link to a tutorial to help me understand the material would be great.

SML code:

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 *)

If I call the function rem_ingredient with 1 parameter

val rem_tuna = rem_ingredient Tuna;" 

I should get a function that can then call

rem_tuna my_pizza3;

to remove Tuna from pizza3

If I call the same function with 2 parameters

rem_ingredient Tuna my_pizza2; 

I should directly remove Tuna from the pizza2 object with the 2 parameters.

The Problem:

I keep getting the error: syntax error: replacing EQUALOP with DARROW on the 3rd constructor of rem_ingredient, I know I'm missing something that is probably obvious. We just start learning SML last week in Programming Languages and I'm still trying to understand it. Anyone pointing me in direction would be appreciated.

Again, no direct answer please, I want to learn the material, but I'm not sure what I'm trying to fix.

Was it helpful?

Solution

To get rid of the syntax error you need to put parentheses around the fn expression (since the following | pattern is otherwise taken to be part of the fn).

However, that is not your real problem here. The function as written does not have a consistent type, because the second case returns a function while the others do not.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top