-
Notifications
You must be signed in to change notification settings - Fork 0
/
peano.py
69 lines (55 loc) · 2.27 KB
/
peano.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# -*- coding: utf-8 -*-
"""
Created on Mon Jul 25 19:30:24 2011
@author: pablo
"""
# Funcao de sucessao
def s(elemento,elementos,esquerda=""):
# As operacoes matematicas aqui utilizadas, como +1 e -1
# nao sao utilizadas sobre os elementos, mas apenas para
# movimentacao na lista de elementos.
# Pega o caracter mais a direita e chama s recursivamente
if len(elemento) > 1:
return s(elemento[-1],elementos,elemento[:-1])
else:
try:
pos = elementos.index(elemento)
except ValueError:
return "O valor %s nao pertencente aos elementos." % str(elemento)
if pos >= len(elementos)-1:
if esquerda == "":
esquerda = elementos[0]
maior = s(esquerda,elementos)
return maior + elementos[0]
else:
return esquerda + elementos[pos+1]
def soma(elemento1,elemento2,elementos):
# a + 0 = a
# a + s(b) = s(a + b)
# seta elemento como primeiro elemento da lista de elementos
elemento = elementos[0]
# loop para determinar quantos sucessores a partir do primeiro sao
# necessarios para se chegar ate o elemento2 da soma
while elemento2 != elemento:
elemento = s(elemento,elementos)
# seleciona o sucessor de elemento1 tantas vezes quantas forem
# necessarias para que o elemento seja igual a elemento2
elemento1 = s(elemento1,elementos)
return elemento1
def multiplicacao(elemento1,elemento2,elementos):
# a * 0 = 0
# a + s(b) = a + (a * b)
# seta elemento como primeiro elemento da lista de elementos
elemento0 = elementos[0]
elemento_final = elemento1
# Se algum dos elementos for o primeiro dos elementos, então retornar ele mesmo
if elemento1 == elemento0 or elemento2 == elemento0:
return elemento0
# loop para determinar quantos sucessores a partir do primeiro sao
# precisos para se chegar ate o elemento2 da soma
while elemento2 != s(elemento0,elementos):
elemento0 = s(elemento0,elementos)
# seleciona o sucessor de elemento1 tantas vezes quantas forem
# necessarias para que o elemento seja igual a elemento2
elemento_final = soma(elemento_final,elemento1,elementos)
return elemento_final