Podemos escrever pequenos scripts e executá-los usando o interpretador ocaml
instalado na nossa máquina. Para quem vem de linguagens como Python isso é bem parecido com como funciona os scripts em Python. Por exemplo, vamos criar um pequeno script que imprime "Hello world!"
no console assim como fizemos no nosso primeiro Capítulo, para isso vamos criar um script com nome hello.ml
em qualquer lugar do nosso OS com o seguinte conteúdo.
hello.ml
print_string "Hello world!\n";;
Agora para executarmos esse script basta abrirmos o teminal na mesma pasta em que esse nosso script está salvo e entrar o seguinte comando.
$ ocaml hello.ml
E vamos ter a nossa mensagem impressa na tela!
Assim como Python, podemos passar o caminho do binário responsável por interpretar nosso script como diretiva ao UNIX o que fará com que nosso script seja interpretado ao executarmos o arquivo. Para isso vamos adicionar as diretivas #! /usr/bin/env ocaml
caso tenha feito a instalação de OCaml pelo OPAM como ensinamos no Capítulo 1 ou #! /bin/ocaml
caso tenha compilado ou instalado através do gerenciador de dependências do seu OS na primeira linha do nosso script hello.ml
.
hello.ml
#! /usr/bin/env ocaml
print_string "Hello world!\n";;
Após isso vamos tornar esse arquivo executável dando-lhe as permissões necessárias.
$ chmod 755 hello.ml
E agora podemos executar nosso script apenas executando o arquivo.
$ ./hello.ml
Isso é útil quando queremos fazer automação de tarefas ou alguma outra função que seja mais adequada a fazer pequenos scripts rápidos de alterar e executar.
O REPL (Read-Evaluate-Print-Loop) é um ambiente muito útil para testarmos nosso código como já vimos até agora. Porém tem mais algumas coisas que podemos fazer no nosso REPL como executar scripts e importar bibliotecas para nosso REPL.
Para começar a utilizar o REPL basta inserir o comando ocaml
no seu terminal UNIX onde instalamos a linguagem. Assim que o comando for inserido vamos ter uma mensagem que parece com:
OCaml version 4.12.0 // 1
# // 2
- Aqui é o header do REPL que nos informa qual versão de OCaml estamos executando.
- Aqui é a área de comandos onde vamos entrar nossos trechos de código OCaml.
Os trechos de código OCaml executados no REPL são delimitados por ;;
, caso não seja utilizado esse caractere como delimitação o REPL vai entender todos os comandos inseridos como parte do mesmo. Por exemplo entre a seguinte expressão 5 + 1 ;;
e vamos ter o retorno - : int = 6
que é tipo (assinatura) do valor retornado e o valor retornado.
No próximo capítulo vamo utilizar bastante o REPL, para isso vamos ter trechos como:
let lista_de_inteiros = [2; 3];;
(* val lista_de_inteiros : int list = [2; 3] *)
E será pressuposto que você saiba que a primeira linha é para ser executada no REPL e a segunda é o retorno da expressão executada.
Podemos carregar funções ou comandos que estão em arquivos .ml
no nosso REPL sem a necessidade de inserirmos todos os comandos ou a necessidade de criar um novo projeto dune
. Para mostrar como fazer isso vamos criar um arquivo chamado script.ml
que irá conter a definição de uma função simples.
script.ml
let some_function x y = ( x * y ) + x;;
Agora para carregar essa (e qualquer outra definião também no arquivo) basta carregarmos o script em nosso REPL usando o comando #use
.
OCaml version 4.12.0
# #use "script.ml";;
(* val some_function : int -> int -> int = <fun> *)
E agora podemos usar essa função quantas vezes quisermos uma vez que está carregada no nosso REPL.
some_function 5 6;;
(* - : int = 35 *)
Para cancelar o comando em execução no REPL use CTRL+C e para sair use CTRL+D ou o comando
exit 0 ;;
.