Как я могу написать функцию в Ocaml, которая будет принимать два логических значения (например, a и b, которые будут представлять логические значения 0 и 1) и символ, который будет определять операцию между этими двумя логическими значениями?Затем функция возвращает true или false, в зависимости от ввода соответствующих логических значений.
В этом коде есть как семантическая, так и синтаксическая ошибка;ну, может быть, есть и другие, но компилятор только подал жалобу об этом:
строка 2, символы 27-30: ошибка: это выражение имеет тип char, но ожидалось выражение типа bool
Это то, что сказал компилятор о коде, и вот что я написал:
let logic (a, b) operation = match operation with
| true -> if (operation == 'A') then match (a,b) with
| (true, true) -> true
| _ -> false
else if (operation == '0') then match (a,b) with
| (false,false) -> false
| _ -> true
else if (operation == 'X') then match (a,b) with
| (true,true) -> false
| (false,false) -> false
| _ -> true
else if (operation == 'I') then match (a,b) with
| (true, false) -> false
| _ -> true
else then match (a,b) with
| _ -> false
| false -> end;;
logic (a,b) 'A';;
--------------------------------------------------------------------------
Хорошо, я добился некоторого прогресса, по крайней мере, теперь он компилируется.Однако, я все еще получаю сообщение об ошибке, когда я пытаюсь вызвать «логическую» функцию с этой строкой:
logic (true, false) 'A';;
Ошибка гласит:
Ошибка: это выражение имеет тип bool Этоне функция;оно не может быть применено.
Вот что я написал сейчас:
let logic (a, b) operation = match operation with
| 'A' -> (match (a,b) with
| (true, true) -> true
| _ -> false
)
| '0' -> (match (a,b) with
| (false,false) -> false
| _ -> true
)
| 'X' -> (match (a,b) with
| (true,true) -> false
| (false,false) -> false
| _ -> true)
| 'I' -> (match (a,b) with
| (true, false) -> false
| _ -> true
)
| _ -> (match (a,b) with
| _ -> false
)