b'\n_START_ARTICLE_\nOccam (linguagem de programa\xc3\xa7\xc3\xa3o)\n_START_SECTION_\nVis\xc3\xa3o geral\n_START_PARAGRAPH_\nNos exemplos a seguir a indenta\xc3\xa7\xc3\xa3o e a formata\xc3\xa7\xc3\xa3o s\xc3\xa3o aspectos cr\xc3\xadticos para se analisar o c\xc3\xb3digo: express\xc3\xb5es s\xc3\xa3o terminadas por um fim de linha, listas de express\xc3\xb5es precisam estar no mesmo n\xc3\xadvel de indenta\xc3\xa7\xc3\xa3o (esse recurso, tamb\xc3\xa9m conhecido como a regra de off-side, tamb\xc3\xa9m \xc3\xa9 encontrado em outras linguagens)._NEWLINE_Comunica\xc3\xa7\xc3\xa3o entre processos trabalham atrav\xc3\xa9s dos chamados canais. Um processo emite sa\xc3\xaddas de dados para um canal atrav\xc3\xa9s de um "!" enquanto outro fornece entradas de dados com um "?". Entrada e sa\xc3\xadda ir\xc3\xa3o bloquear at\xc3\xa9 que a outra extremidade esteja pronta para aceitar ou oferecer dados. Exemplos (c \xc3\xa9 uma vari\xc3\xa1vel):_NEWLINE__NEWLINE_ keyboard ? c_NEWLINE__NEWLINE_ screen ! c_NEWLINE_SEQ introduz uma lista de express\xc3\xb5es que s\xc3\xa3o avaliadas sequencialmente. Isto n\xc3\xa3o est\xc3\xa1 impl\xc3\xadcito como na maioria das outras linguagens de programa\xc3\xa7\xc3\xa3o. Exemplo:_NEWLINE__NEWLINE_ SEQ_NEWLINE_   x := x + 1_NEWLINE_   y := x * x_NEWLINE_PAR inicia uma lista de express\xc3\xb5es que podem ser avaliadas concorrentemente. Exemplo:_NEWLINE__NEWLINE_ PAR_NEWLINE_   p()_NEWLINE_   q()_NEWLINE_ALT especifica uma lista de comandos guardas. Os guardas s\xc3\xa3o uma combina\xc3\xa7\xc3\xa3o de condi\xc3\xa7\xc3\xb5es booleanas e uma express\xc3\xa3o de entrada (ambos opcionais). Cada guarda para o qual tanto a condi\xc3\xa7\xc3\xa3o \xc3\xa9 verdadeira quanto o canal de entrada est\xc3\xa1 pronto \xc3\xa9 bem sucedido. Uma das alternativas bem sucedidas \xc3\xa9 selecionada para a execu\xc3\xa7\xc3\xa3o. Exemplo:_NEWLINE__NEWLINE_ ALT_NEWLINE_   count1 < 100 & c1 ? data_NEWLINE_     SEQ_NEWLINE_       count1 := count1 + 1_NEWLINE_       merged ! data_NEWLINE_   count2 < 100 & c2 ? data_NEWLINE_     SEQ_NEWLINE_       count2 := count2 + 1_NEWLINE_       merged ! data_NEWLINE_   status ? request_NEWLINE_     SEQ_NEWLINE_       out ! count1_NEWLINE_       out ! count2_NEWLINE_Isto ir\xc3\xa1 ler dados a partir de canais C1 ou C2 (dependendo do que est\xc3\xa1 pronto) e pass\xc3\xa1-lo em um canal fundido. Se countN alcan\xc3\xa7ar a 100, leituras do canal correspondente ser\xc3\xa3o desabilitadas. Um pedido sobre a condi\xc3\xa7\xc3\xa3o do canal \xc3\xa9 atendido enviando a contagem de sa\xc3\xadda para out.\n_START_SECTION_\noccam 1\n_START_PARAGRAPH_\noccam 1 (lan\xc3\xa7ada em 1983) foi uma vers\xc3\xa3o preliminar da linguagem. Suportava apenas o tipo de dados VAR , que era um tipo integral correspondente ao comprimento da palavra nativa da arquitetura objeto, e matrizes de apenas uma dimens\xc3\xa3o.\n_START_SECTION_\noccam 2\n_START_PARAGRAPH_\noccam 2 \xc3\xa9 uma extens\xc3\xa3o produzida pela INMOS Ltd, em 1987, que acrescenta suporte a ponto flutuante, fun\xc3\xa7\xc3\xb5es, arrays multi-dimensionais e mais tipos de dados, tais como inteiros de tamanhos variados (INT16, Int32) e bytes._NEWLINE_Com esta revis\xc3\xa3o, Occam tornou-se uma linguagem capaz de expressar programas \xc3\xbateis, enquanto que Occam 1 foi mais adequada para an\xc3\xa1lise de algoritmos e explora\xc3\xa7\xc3\xa3o da nova linguagem (embora deve-se notar que o compilador Occam 1 foi escrito em Occam 1, para que haja uma prova de que se podia escrever programas \xc3\xbateis em Occam 1, apesar das suas limita\xc3\xa7\xc3\xb5es).'