Quais tipos de problemas de GIS abordam a programação funcional?

8

Depois de ler o post do @ray vernagus sobre o uso do ArcObjects com F # , fiquei pensando ... que tipos de problemas de GIS são mais bem tratados pela Programação Funcional , em oposição às formas mais tradicionais de programação?

Talvez mais especificamente, quando seria melhor usar o F # em oposição ao C # com o ArcObjects?

Kirk Kuykendall
fonte
Talvez o paradigma escolhido depende do que se pretende programar, um de seus links contém referências a paradigmas alternativos e uma comparação do que eles são adequados para en.wikipedia.org/wiki/Comparison_of_programming_paradigms
@ DanPatterson Obrigado pelo feedback. O que eu gostaria de ver são problemas GIS específicos em que F # é mais adequado que C #. Se eu conseguir ver isso, talvez seja possível justificar o tempo de investimento para aprendê-lo. Eu tenho uma suspeita furtiva de que coisas como álgebra de mapas e solucionadores de fluxo de rede são bons candidatos, mas simplesmente não vi nenhum estudo de caso.
Kirk Kuykendall
1
"Álgebra de mapa" (da década de 1980) é programação funcional.
whuber
@whuber Como eu entendo programação funcional, ela permite que o que normalmente consideramos como fórmulas seja tratado como dados. As planilhas, por exemplo, fazem isso. Não vejo uma maneira de atribuir uma função a uma célula raster. Parece que isso poderia ser usado para criar mais racionalmente algo como um mapa de zoneamento. Cada categoria de zoneamento pode ter uma função de adequação diferente. Com unidades como receita de imposto predial. As entradas podem incluir zoneamento circundante. O zoneamento de uma parcela como residencial pode não render tanta receita tributária quando estiver próximo de propriedades industriais.
Kirk Kuykendall
Acredito que você esteja pensando em algo diferente, mais parecido com "computação em funções". Segundo [Wikipedia], a programação funcional é "um paradigma de programação que trata a computação como a avaliação de funções matemáticas e evita dados de estado e mutáveis". A álgebra de mapas, quase toda composta por funções puras, é um exemplo direto (mas limitado) disso. A alternativa de, digamos, repetir as células no Python é o oposto da programação funcional. Paradigmas FP fortes existem agora em Re Mathematica , que proporcionam muitos exemplos relacionados com o SIG.
whuber

Respostas:

4

A maior razão pela qual a programação funcional voltou à moda ultimamente é a simultaneidade. Ser capaz de processar em paralelo por razões de desempenho está se tornando extremamente importante na computação geral e o GIS não é exceção. A programação funcional tem alguns sérios benefícios no contexto da criação de sistemas paralelos devido ao quanto enfatiza a imutabilidade e a recursão. Devido a essas propriedades, a maioria das linguagens funcionais tende a evitar problemas como o bloqueio, que tornam a programação paralela em linguagens imperativas uma grande dor de cabeça.

Dito isto, acho que o campo GIS ainda tem um longo caminho a percorrer antes que você realmente possa tirar proveito de muito do que a programação funcional tem a oferecer. As tecnologias e bibliotecas existentes são simplesmente muito fixas na Orientação a Objetos e em uma abordagem geralmente imperativa. Infelizmente, só porque você pode usar o ArcObjects a partir do F # não significa necessariamente que as bibliotecas subjacentes serão realmente boas com um estilo funcional de programação.

Evicatos
fonte
3

Não estritamente programando, mas o ArcToolbox segue um paradigma de design mais funcional.

  • A maioria das ferramentas é projetada para aceitar um conjunto de entradas, executar uma função e retornar as saídas sem a influência do estado externo.
  • A maioria das ferramentas não edita as camadas existentes, mas cria novas (imutabilidade).
  • Muitas ferramentas são similares em operação a uma função de mapa. Eles operam em conjuntos de objetos (conjunto de recursos) em vez de usar a iteração para processar objetos de nível inferior (geometria).
  • Ferramentas básicas como união, interseção e dissolução podem resolver vários problemas que seriam difíceis de expressar em uma linguagem declarativa como SQL.

A abordagem funcional do ArcToolbox nos permite fazer análises espaciais sem precisar escrever código. O usuário pode trabalhar com um conjunto simples de elementos, como camadas, e não se preocupar com iteração, manutenção de estado ou efeitos colaterais complicados.

Matthew Snape
fonte
2

Eu sou novo na programação funcional, então esses são apenas alguns pensamentos.

Há um exemplo interessante de um Ray Tracer no F # que ilustra alguns dos pontos fortes da programação funcional, como funções de ordem superior , recursão , paralelismo e correspondência de padrões . Estendendo alguns desses conceitos, parece que a matemática raster é uma área-chave no GIS para a qual a programação funcional pode ser particularmente adequada.

insira a descrição da imagem aqui

edit: Aqui está outro exemplo do mesmo site: Regra 30 Autômatos celulares

Outro pensamento é que você não precisa escrever todo o seu programa em F #. Você pode ter o programa principal escrito em C # e criar projetos / montagens em F # que resolvem problemas específicos de programação funcional. Eu li que você também pode usar o ILMerge para mesclar C # e F # em um executável / assembly.

Por último, há um monte de coisas de programação funcional que você pode fazer em C # com LINQ , através da utilização de expressões lambda , funções de ordem superior ( Select, Where, etc.), seqüência padrão de correspondência, etc.

blah238
fonte
Obrigado pelo link para o traçador de raios. Tomou a liberdade de adicionar imagem à sua resposta.
Kirk Kuykendall