Синтаксис Ocaml совпадает с логическим - PullRequest
0 голосов
/ 13 октября 2019

Я новичок в Ocaml, и я не могу разобраться с этим синтаксисом. Я должен написать функцию, которая не возвращает отрицание логического значения.

Я написал это:

let not x = 
    match x with
      true -> false
    | false -> true;


if (not false) then  Printf.printf "True !" 

Но он отказывается компилироваться, кто-нибудь может дать мне подсказку?

Сообщение об ошибке:

Error: This expression has type unit but an expression was expected of type bool в последней строке.

Ответы [ 2 ]

1 голос
/ 13 октября 2019

В соответствии с https://baturin.org/docs/ocaml-faq/#the-double-semicolon, в интерактивном REPL вам необходимо использовать ;; для завершения ваших утверждений:

let not x = 
    match x with
      true -> false
    | false -> true;;
(*                 ^^ *)

if (not false) then  Printf.printf "True !";;

В исходном коде вы должны использовать только объявления и можете опустить любые точки с запятой(спасибо @glennsl):

let not x = 
    match x with
      true -> false
    | false -> true

let () = if (not false) then  Printf.printf "True !" (*
^^^^^^^^ *)
0 голосов
/ 13 октября 2019

С вашей помощью, похоже, код, который я намеревался написать:

let not x = 
    match x with
      true -> false
    | false -> true


let () = 
    if (not true) then
        Printf.printf "True !\n" 
    else
        Printf.printf "False !\n"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...