Сделаю.

исал функцию, которая работает, как ожидалось, но я не понимаю, почему вывод такой.

Функция:
datatype prop = Atom of string | Not of prop | And of prop*prop | Or of prop*prop;


(* XOR = (A And Not B) OR (Not A Or B) *)

local

fun do_xor (alpha,beta) = Or( And( alpha, Not(beta) ), Or(Not(alpha), beta))

in
fun xor (alpha,beta) = do_xor(alpha,beta);
end;
Контрольная работа:
val result = xor(Atom "a",Atom "b");
Выход:
val result = Or (And (Atom #,Not #),Or (Not #,Atom #)) : prop

Ответы на вопрос(1)

Ваш ответ на вопрос