domingo, 19 de outubro de 2014

Sujando as mãos.

Para começar a brincar com REBOL, temos que baixar o ambiente. Vejamos as opções:
  • Atronix REBOL 3 View Download : Permite baixar versões para Linux (32 e 64 bits), Windows (32 e 64 bits) e Linux (Arm v7) que é bom para o ODROID. Também existem links para baixar os fontes se alguém deseja compilar. Os programas compilados possuem a GUI (não é uma IDE, apenas um dialeto de REBOL chamado VID que permite a criação de janelas, botões, etc., ). O que utilizo foi baixado daqui.
  • Saphirion : Com versões (32bits) para Windows, OSX, Linux e Android.
  • Rebol 3 Binaries (Unofficial) : Os executáveis desta página são compilados diretamente do repositório oficial do REBOL e não possuem GUI. A quantidade de plataformas é bem interessante. Existe ara o Linux x86, OSX x86, Win32 x86, Android ARM, Haiku (inspirado no BeOS), Linux ARMsf, Linux ARMhf, Linux x64 e OSX PPC

Depois de baixar, não é necessário instalar. O REBOL pode ser executado de qualquer lugar. É claro que colocando no path e ajustando algumas variáveis facilita a vida.

Para testes não é necessário um editor já que os comandos podem ser digitados diretamente no console e o resultado é mostrado imediatamente. Como o R3 não permite que o comando seja quebrado em diversas linhas, para fazer algum laço ou coisas mais complexas, utilize o editor de sua preferência. Muitos permitem salientar a sintaxe e outras facilidades.

Considerações iniciais.


- Para sair do ambiente, digite quit e não exit.

- O delimitador é espaço portanto, 2 + 2 retorna 4 mas 2+2 retorna um erro.

- Todo o arquivo que contenha um programa deverá possuir um cabeçalho no início. Podemos, por exemplo, definir uma versão e outros programas poderão acessar posteriormente para diversas finalidades. Por hora podemos ter uma cabeçalho simples como: REBOL [Title: "Título do script"]

- Para obtermos informações sobre funções, um bom local é o REBOL Quick Reference Card. Se estivermos no ambiente interativo do console, podemos obter informações sobre qualquer função digitando help <função> (o help pode ser substituído por ? ).Se digitamos >> help loop (o >> é o prompt e não é digitado) obtemos:

USAGE:
        LOOP count block

DESCRIPTION:
        Evaluates a block a specified number of times.
        LOOP is a native value.

ARGUMENTS:
        count -- Number of repetitions (number!)
        block -- Block to evaluate (block!)

Então, o uso de LOOP requer dois parâmetros. Um count que é o número de repetições e um block que é um bloco (já veremos) que será executado em cada repetição.


- Blocos são delimitados por colchetes [ e ] e podem conter dados e/ou código e/ou outros blocos. Uma linha do tipo loop 5 [print 3] irá imprimir o número três cinco vezes.

- Apesar de variável ser um termo que não corresponde a realidade em REBOL, podemos definir uma variável escrevendo seu nome seguido de dois pontos e sem espaço. Por exemplo, lista: [1 2 3 4 5] poderia significar que atribuímos uma array unidemensional a uma variável lista. Mas está mais para dizer que a palavra lista está associaida a um bloco contendo dados numéricos de 1 a 5.

Ficamos por aqui hoje. Depois tem mais. Um pequeno código (poderia ser escrito em uma linha) para ler uma determinada página e extrair todos os links:


1 parse to-string read http://www.rebol.com [
2     any [thru "A HREF=" copy link to ">" (print link)] to end]
3 

Sim, não é preciso baixar ou instalar nada no ambiente para executar a tarefa. Tudo foi feito pelo parse e read. A função read pode ler dados de um arquivo, porta ou url. Se o arquivo for um diretório, retorna uma lista com todos os arquivos e sub-diretórios existentes. Como REBOL não trabalha com ER, parse é a resposta em REBOL para expressões regulares. Com tal, sua explicação seria suficiente para um livro.

Informações sobre read:

USAGE:
        READ source /part length /seek index /string /lines

DESCRIPTION:
        Read from a file, URL, or other port.
        READ is an action value.

ARGUMENTS:
        source (port! file! url! block!)

REFINEMENTS:
        /part -- Partial read a given number of units (source relative)
                length (number!)
        /seek -- Read from a specific position (source relative)
                index (number!)
        /string -- Convert UTF and line terminators to standard text string
        /lines -- Convert to block of strings (implies /string)

Informações sobre parse (para maiores detalhes sobre rules, melhor acessar a página do parse). Pessoalmente acha mais legível (alguns acham mais poderoso mas não vou entrar no mérito) que trabalhar com ER, apesar da maior verbosidade.

USAGE:
        PARSE input rules /all /case

DESCRIPTION:
        Parses a string or block series according to grammar rules.
        PARSE is a native value.

ARGUMENTS:
        input -- Input series to parse (series!)
        rules -- Rules to parse by (none = ",;") (block! string! char! none!)

REFINEMENTS:
        /all -- For simple rules (not blocks) parse all chars including whitespace
        /case -- Uses case-sensitive comparison


Nenhum comentário:

Postar um comentário