funcoes tem o mesmo comportamento das funcoes matematicas, ou seja, calculam um resultado que depende somente dos valores dos dados de entrada, nao interferindo absolutamente em outras funcoes do programa. Fazendo uma comparacao, as linguagens imperativas permitem que as funcoes interfiram uma nas outras por varias maneiras: atraves de variaveis globais, variaveis do tipo ponteiro, etc.Desde que as funcoes, em uma linguagem funcional, nao exercam influencia alguma umas sobre as outras, elas podem ser executadas em qualquer ordem, inclusive em paralelo. Por exemplo, na expressao abaixo:h ( f ( 10, 30 ), g ( A ) )e irrelevante se a funcao f for executada antes que a funcao g, ou nao. Consequentemente as funcoes f e g podem, perfeitamente, ser executadas em paralelo. Em linguagens desse tipo, em principio, todas as funcoes podem ser executadas em paralelo, com uma unica restricao: a ordem de execucao muitas vezes precisa ser considerada. Na expressao do exemplo acima, a funcao h necessita dos resultados das funcoes f e g, por conseguinte, h deve aguardar ate que os resultados de f e g estejam disponiveis. Esse paralelismo implicito, verificado nas expressoes desse tipo, apresenta uma granularidade fina, exigindo arquiteturas adequadas, tal como os computadores do tipo data-flow.Para sistemas distribuidos, o enfoque funcional possui alguns problemas que ainda precisam ser resolvidos. Por exemplo, a execucao em paralelo de todas as funcoes componentes de uma expressao sem restricao, pode nao ser vantajosa, principalmente nas situacoes em que existam varias funcoes cujas tarefas sejam muito simples, fazendo com que o tempo gasto na comunicacao dos resultados entre processos nao justifique o paralelismo empregado.A ultima unidade de paralelismo a ser considerada e a clausula, tipicamente encontrada nos programas logicos. A programacao logica tambem oferece, de forma natural, varias oportunidades de paralelismo. Por exemplo, os elementos figurantes localizados a esquerda de uma clausula podem ser considerados como sendo sub teoremas a serem provados para se chegar a prova do teorema, representado pelo unico elemento localizado a direita da mesma clausula.(1) T :- T1, T2, T3, T4; (2) T :- T5, T6;Nas duas clausulas acima apresentadas, existem duas maneiras de se implementar o paralelismo. Uma delas e trabalhar as duas clausulas para o predicado T paralelamente, tendo como condicao de parada o sucesso de uma delas ou o fracasso de ambas (conhecido como paralelismo OU). A outra maneira seria trabalhar todos os sub teoremas, das duas clausulas, paralelamente, tendo como condicao de parada o sucesso de todos ou o fracasso de algum deles (conhecido como paralelismo E).Outra interpretacao que resulta na execucao paralela de um programa logico e descrever os sub teoremas em termos de processos. Por exemplo, associando um processo distinto a cada sub teorema a ser provado, na clausula (1) do exemplo em questao, fica estabelecido que o processo para provar T seja substituido pelos quatro processos paralelos que tentam provar T1, T2, T3 e T4.Nesta secao foram descritas varias maneiras diferentes atraves das quais as linguagens de programacao distribuida podem prover suportes para a expressao do paralelismo. Propositadamente foi dada maior enfase a expressao que tem como unidade de