(* Pizza datatype*) datatype topping = Onion of real | Green_Peppers of real | Mushrooms of real | Goat_Cheese of real | Pepperoni of real | Eggplant of real; datatype pizza = single of topping | double of topping*topping | triple of topping*topping*topping | plain of real; fun getPrice(Onion(x)) = x |getPrice(Green_Peppers(x)) = x |getPrice(Mushrooms(x)) = x |getPrice(Goat_Cheese(x))=x |getPrice(Pepperoni(x))=x |getPrice(Eggplant(x))=x; fun pizza_item(single(x))=getPrice(x) | pizza_item(double(x,y))=getPrice(x)+getPrice(y) | pizza_item(triple(x,y,z))=getPrice(x)+getPrice(y)+getPrice(z) | pizza_item(plain(x))=x; fun pizza_p(x)=getPrice(x); fun pizza_price (x::xs)=pizza_item(x)+pizza_price(xs);