Академический Документы
Профессиональный Документы
Культура Документы
io/
Linguagem Potigol
Programação para todos
View On
GitHub
GitHub Profile
Potigol é …
Uma linguagem moderna (funcional) para aprender a programar.
1 of 28 11/20/18, 2:53 PM
Linguagem Potigol | Programação para todos https://potigol.github.io/
2 of 28 11/20/18, 2:53 PM
Linguagem Potigol | Programação para todos https://potigol.github.io/
E-mail: projetopoti@gmail.com
Características
Projetada para ser usada por alunos iniciantes
Tipagem estática com inferência de tipos
Palavras-chave em português
Multiparadigma
Estímulo ao paradigma funcional: valores imutáveis, casamento de padrões, funções como valores
Como usar
Baixe a versão mais recente do Potigol https://github.com/potigol/Potigol/releases/latest
Descompacte o arquivo
Para executar o Editor de Código digite no prompt do terminal
3 of 28 11/20/18, 2:53 PM
Linguagem Potigol | Programação para todos https://potigol.github.io/
Exemplos: https://github.com/potigol/Potigol/wiki/jogos
A Linguagem
Variáveis
a, b, c = 1, 2, 3 # Declaração paralela: a = 1, b = 2 e c = 3
a, b, c := b, a, 4 # Atribuição paralela: a := 2, b := 1 e c := 4
4 of 28 11/20/18, 2:53 PM
Linguagem Potigol | Programação para todos https://potigol.github.io/
Tipos Básicos
Tipo Valores
Inteiro -4, 0, 5, …
Operações Aritméticas
5 + 3 # Soma: 8
5 - 3 # Subtração: 2
5 * 3 # Multiplicação: 15
5 of 28 11/20/18, 2:53 PM
Linguagem Potigol | Programação para todos https://potigol.github.io/
Entrada
6 of 28 11/20/18, 2:53 PM
Linguagem Potigol | Programação para todos https://potigol.github.io/
Saída
nome = "Mundo"
Se
x = leia_inteiro
se x > 5 então
fim
7 of 28 11/20/18, 2:53 PM
Linguagem Potigol | Programação para todos https://potigol.github.io/
se x > 5 então
senão
fim
escreva "verdadeiro"
senão
escreva "falso"
fim
escreva "verdadeiro"
senão
escreva "falso"
fim
se x > 8 então
8 of 28 11/20/18, 2:53 PM
Linguagem Potigol | Programação para todos https://potigol.github.io/
senão
fim
Escolha
x = leia_inteiro
escolha x
9 of 28 11/20/18, 2:53 PM
Linguagem Potigol | Programação para todos https://potigol.github.io/
fim
escolha x
fim
é_zero = escolha x
fim
caso _ => 0
10 of 28 11/20/18, 2:53 PM
Linguagem Potigol | Programação para todos https://potigol.github.io/
fim
Repetição: Para
escreva i
fim
var soma := 0
soma := soma + i
fim
escreva i
fim
# Para decrescente
escreva i
11 of 28 11/20/18, 2:53 PM
Linguagem Potigol | Programação para todos https://potigol.github.io/
fim
para i de 1 até 4,
fim
escreva cor
fim
Repetição: Enquanto
12 of 28 11/20/18, 2:53 PM
Linguagem Potigol | Programação para todos https://potigol.github.io/
var i := 0
escreva i
i := i + 1
fim
Funções
a, b = leia_inteiro
13 of 28 11/20/18, 2:53 PM
Linguagem Potigol | Programação para todos https://potigol.github.io/
c = x + y
fim
c = x + y
fim
se n <= 1 então
senão
n * fatorial(n - 1)
fim
fim
a = leia_inteiro
f(a: Inteiro)
14 of 28 11/20/18, 2:53 PM
Linguagem Potigol | Programação para todos https://potigol.github.io/
retorne g(a) + 3
fim
Tipo de parâmetros
15 of 28 11/20/18, 2:53 PM
Linguagem Potigol | Programação para todos https://potigol.github.io/
Tipos
12345.qual_tipo # "Inteiro"
12345.real # 12345.0
12345.texto # "12345"
97.caractere # 'a'
12345.678.qual_tipo # "Real"
12345.678.inteiro # 12345
12345.678.texto # "12345.678"
12345.678.arredonde # 12346
12345.678.arredonde(2) # 12345.68
16 of 28 11/20/18, 2:53 PM
Linguagem Potigol | Programação para todos https://potigol.github.io/
12345.678.inteiro # 12345
Texto
"abc".qual_tipo # "Texto"
"123".inteiro # 123
"12abc3".inteiro # 12
"abc".inteiro # 0
"12.3".real # 12.3
"12a.3".real # 12.0
"abc".real # 0.0
"abc".tamanho # 3
17 of 28 11/20/18, 2:53 PM
Linguagem Potigol | Programação para todos https://potigol.github.io/
"abc".posição('d') # 0
"abc".contém('d') # falso
"Abc".maiúsculo # "ABC"
"Abc".minúsculo # "abc"
"Abc".inverta # "cbA"
"cab".ordene # "abc"
"abc".junte("-") # "a-b-c"
"Um texto".lista # ['U', 'm', ' ', 't', 'e', 'x', 't', 'o']
18 of 28 11/20/18, 2:53 PM
Linguagem Potigol | Programação para todos https://potigol.github.io/
Lista
[2, 4, 6, 8, 10].tamanho # 5
[2, 4, 6, 8, 10].cabeça # 2
[2, 4, 6, 8, 10].último # 10
19 of 28 11/20/18, 2:53 PM
Linguagem Potigol | Programação para todos https://potigol.github.io/
a = [2, 4, 6, 8, 10]
a[3] # 6
a.posição(6) # 3
a.posição(12) # 0
a.contém(6) # verdadeiro
a.contém(12) # falso
Lista.imutável(5, 0) # [0, 0, 0, 0, 0]
20 of 28 11/20/18, 2:53 PM
Linguagem Potigol | Programação para todos https://potigol.github.io/
# Matrizes e Cubos
a[2] # [3, 4]
a[2][1] # 3
c[1][2][1] # "-"
# Listas mutáveis
# Funções de alta-ordem
21 of 28 11/20/18, 2:53 PM
Linguagem Potigol | Programação para todos https://potigol.github.io/
Tupla
Funções Matemáticas
PI
sen(3.14)
cos(3.14)
tg(1)
arcsen(1)
arccos(1)
arctg(1)
abs(-2.4) # 2.4
raiz(9) # 3.0
log(2)
log10(2)
22 of 28 11/20/18, 2:53 PM
Linguagem Potigol | Programação para todos https://potigol.github.io/
tipo «Tipo»
«métodos»
fim
«obj».«atributo»
23 of 28 11/20/18, 2:53 PM
Linguagem Potigol | Programação para todos https://potigol.github.io/
«obj».«método»
Exemplo
tipo Quadrado
lado: Real
perimetro() = 4 * lado
fim
q1 = Quadrado(10)
escreva q1.area
escreva q1.perimetro
Programação Funcional
Valores (constantes)
nome = "potigol"
24 of 28 11/20/18, 2:53 PM
Linguagem Potigol | Programação para todos https://potigol.github.io/
Listas
lista1 = [1,2,3,4]
lista2 = 0::lista1
numeros = [1, 2, 3, 4, 5, 6, 7, 8]
Expressões lambda
escreva x(4)
“list comprehension”
j de i + 1 até 10 gere
25 of 28 11/20/18, 2:53 PM
Linguagem Potigol | Programação para todos https://potigol.github.io/
i+j
fim
escreva y
sucessor(n: Inteiro) = n + 1
escreva f(sucessor, 5)
Currying
escreva soma(2)(3)
suc = soma(1)
escreva suc(4)
26 of 28 11/20/18, 2:53 PM
Linguagem Potigol | Programação para todos https://potigol.github.io/
fim
escreva h(1000,0)
Casamento de Padrões
# QuickSort
escolha num
caso [] => []
quicksort(menores) + pivo::quicksort(maiores)
fim
escreva quicksort(numeros)
27 of 28 11/20/18, 2:53 PM
Linguagem Potigol | Programação para todos https://potigol.github.io/
Hosted on
GitHub Pages
using the Dinky theme
28 of 28 11/20/18, 2:53 PM