Executando verificação de segurança...
2

Quanto ao Excel;

Parece que você está se referindo ao Excel sem o VBA, é isso mesmo?
o Excel tem o if portanto pode realizar decisões dentro das fórmulas.
mas até aonde eu sei o fluxo de execução é sempre o mesmo; eu gostaria muito de saber se houver uma maneira de alterar o fluxo de execução em tempo de execução.

Carregando publicação patrocinada...
1

Sim, é isso mesmo, ou sem Python ou sem C# e outras linguagens que podem ser usadas nele.

A recursão é uma forma de mudar o fluxo, ou seja o Excel seria do paradigma declarativo funcional. goto, while , for, e até o if são formas imperativas de controle de fluxo.

Boa parte da mudança de controle de fluxo que você verá é interna ao Excel, assim como a mudança real do fluxo de forma imperativa é interna ao processador.

Pode ajudar: https://pt.stackoverflow.com/q/444793/101.

1

Desculpa amigo; mas eu preciso de mais explicações para aceitar que é possível controlar o fluxo apenas com as fórmulas da planilha.

Mesmo usando o if todas as células são calculadas e sempre no mesmo sentido; das mais dependentes para as que tem mais dependência.

O Excel possue maneiras de acelerar os cálculos evitanto recalcular algumas celulas que não tem alteração de valor e isso pode ser alterado nas configurações do Excel; mas não nas fórmulas da planilha.

Também não conheço uma maneira de fazer algo semelhante a um goto, for ou gosub.
Dá para fazer com relação aos valores que uma célula vai usar; mas novamente todas as células continuam sendo calculadas com a mesma ordem de execução.

Existe uma maneira de fazer uma Máquina de Turing dentro de uma planilha do Excel?

1

Seria necessário um contexto melhor. Tipo exemplos de como fazer alguma coisa que exige goto, gosub e/ou for que não possa ser feito apenas com as possibilidades disponíveis em uma planilha.

goto
Conforme Dijkstra, goto é considerado prejudicial. :D
Depois que eu sai do BASIC, COBOL e Assembly, acho que usei uma vez o goto em Pascal.

gosub
Se for uma chamada que retorna um valor, seria o equivalente a referenciar diretamente a célula que contém o valor. Também nunca mais usei ON n GOTO/GOSUB [...]

for
Pode ser usada uma faixa tipo A1..A50. De qualquer forma, não é possível retornar mais de um resultado no mesmo cálculo. Pode ser necessário copiar a fórmua para diversas celulas, cada uma retornando um valor.

Brinquei aqui com o Gnumeric e resolvi fazer uma calculadora básica com as 4 operações. A programação ficou assim:

=switch(B1;
"+";A1+C1;
"-";A1-C1;
"*";A1*C1;
"/";if(C1=0;"Divisão por zero 😭️";A1/C1);
"B1 apenas  +-*/ 🤪️")

O resultado:

gnumeric

1

Você acabou de explicar, as mais dependentes já mostra que o fluxo não é sequencial, conforme você mexe na planilha. Cada célula é uma função, é uma chamando a outra, ou você acha que função não é uma forma de mudança de fluxo? Se acvha isso como as linguagens puramente funcionais fazem? Ou acha que elas não são Turing complete?

Quando você faz um código ele semper executa no mesmo sentido, na mesma ordem, até que mude o código, exatamente igual uma planilha, o sentido não precisa ser sequencial e issoque importa. Na verdade, o sequencial já é um fluxo. Quando você copia fórmulas de uma célula para outra está fazendo uma repetição, e pode ver mais sobre isso no link que eu passei*. Um fornão é aleatório, ele tem uma ordem que o programador estabelecer, assim como o programador do Excel estabelecer criando as dependências entre fórmulas.

Se você tivesse lido o que eu te passei não estarei achando que só um goto ou for é que muda fluxo. Ou mesmo lendo não conseguiu perceber isso, aí eu não sei como argumentar de outra forma agora, pode ser que depois me surja uma maneira, mas não estou com tempo para me dedicar a isso agora, é algo básico e posso um dia escrever mais sobre, pode ser ideia até para um vídeo meu. Eu até entendo que as pessoas estão acostumadas com uma coisa e tenham deificuldade de ver que é a mesma coisa, só não é tão visível quanto é em um código feito em texto, mas isso é oque eu semrpe falo, falta dos fundamentos, a pessoa sabe como é o mecanismo, mas não sabe porque ele existe, porque não é de outro jeito, como ele é executado., etc.

Para dar mais informação, ainda que não ajude tanto nessa resposta, mas ajuda entender melhor o desvio tradicional condicional (que o Excel só usa com um if() ou outra função decisõria: https://pt.stackoverflow.com/q/420854/101. Tudo isso ocrre dentro do Excel, mas você não vê, como não vê em Haskell, Ocaml, Lisp, etc. Por isso que é bom se expor nas mais variadas linguagens, para entender o todo da computação.

O Excel é a máquina de Turing. Claro que não 100%, a máquina de Turing não pode ser feita de verdade, ela é um conceito teórico, então aceita-se que pelo menos uma ideia dela não seja contemplada. E muita gente diz que se algo é PL só ser for Turing complete, então nada é PL, porque isso é imposível no mundo em que vivemos, e estritamente a pessoa está certa, mas deixa-se de lado a infinitude para que tenha efeito prático.

1

Sim eu li os teus links e obrigado pela sua dedicação em responder.
Eu realmente estou interessado em avançar mais nessa conversa; então se também for interessante para você, poderemos prosseguir mais.

Quanto a máquina de Turing podemos ignorar a memória infinita, bastaria construir uma máquina de Turing com memória suficiente para que durante a execução das tuplas não fosse alcançado os limites da memória.

Uma das implicações da máquina de Turing é que é possível uma máquina de Turing simular outra máquina de Turing.
Dessa forma em qualquer linguaguem de programação é possível construir um interpretador de tuplas que lê e escreve em uma memória.

Pelo que eu lí dos seus posts, presumo que você seja um professor universitário com mestrados e doutorados e que você tem um conhecimento muito amplo e profundo sobre programação.

Eu não conheço linguagens puramente funcionais; então talvez eu também não tenha os requisitos suficientes para me aprofundar nessa discução contigo; mas isso é você quem vai dizer...
As linguagens que eu conheço são mais antigas; Cobol, BASIC, C e Assembly.
A minha área de atuação não é a mesma que a maioria do pessoal.