¿Qué tipos de problemas SIG aborda la programación funcional?


8

Después de leer la publicación de @ray vernagus sobre el uso de ArcObjects con F # , me he estado preguntando ... ¿qué tipos de problemas de SIG se manejan mejor con la programación funcional , a diferencia de las formas de programación más tradicionales?

Quizás más específicamente, ¿cuándo sería mejor usar F # en lugar de C # con ArcObjects?


Quizás el paradigma uno elige depende de lo que uno se propone para el programa, uno de sus enlaces contiene referencias a los paradigmas alternativos y una comparación de lo que son adecuados para en.wikipedia.org/wiki/Comparison_of_programming_paradigms

@DanPatterson Gracias por los comentarios. Lo que me gustaría ver son problemas específicos de SIG en los que F # es más adecuado que C #. Si puedo ver eso, entonces podría justificar invertir tiempo para aprenderlo. Tengo la sospecha de que cosas como el álgebra de mapas y los solucionadores de flujo de red son buenos candidatos, pero simplemente no he visto ningún estudio de caso.
Kirk Kuykendall

1
"Álgebra de mapas" (de la década de 1980) es una programación funcional.
Whuber

@whuber Como entiendo la programación funcional, permite que lo que normalmente pensaríamos como fórmulas, se trate como datos. Las hojas de cálculo, por ejemplo, hacen esto. No veo una manera de asignar una función a una celda ráster. Parece que esto podría usarse para crear de manera más racional algo como un mapa de zonificación. Cada categoría de zonificación podría tener una función de adecuación diferente. Con unidades como los ingresos por impuestos a la propiedad. Las entradas pueden incluir la zonificación circundante. La zonificación de una parcela como residencial podría no generar tantos ingresos fiscales cuando está cerca de la zona industrial de la propiedad.
Kirk Kuykendall

Creo que está pensando en algo diferente, más parecido a "computar en funciones". Según [Wikipedia], la programación funcional es "un paradigma de programación que trata la computación como la evaluación de funciones matemáticas y evita el estado y los datos mutables". El álgebra de mapas, que consiste casi en su totalidad en funciones puras, es un ejemplo sencillo (pero limitado) de esto. La alternativa de, por ejemplo, recorrer las celdas en Python es lo opuesto a la programación funcional. Existen paradigmas de PF fuertes ahora en Ry Mathematica , que proporcionan muchos ejemplos relacionados con SIG.
whuber

Respuestas:


4

La razón principal por la que la programación funcional ha vuelto a estar de moda últimamente es la concurrencia. Ser capaz de hacer el procesamiento en paralelo por razones de rendimiento se está volviendo enormemente importante en la informática en general y los SIG no son una excepción. La programación funcional tiene algunos beneficios serios en el contexto de la creación de sistemas paralelos debido a cuánto enfatiza la inmutabilidad y la recursividad. Debido a estas propiedades, la mayoría de los lenguajes funcionales tienden a eludir problemas como el bloqueo que hacen que la programación paralela en lenguajes imperativos sea un gran dolor de cabeza.

Dicho esto, creo que el campo SIG tiene un largo camino por recorrer antes de que realmente pueda aprovechar mucho lo que la programación funcional tiene para ofrecer. Las tecnologías y bibliotecas existentes simplemente están demasiado obsesionadas con la orientación a objetos y un enfoque generalmente imperativo. Lamentablemente, el hecho de que pueda usar ArcObjects desde F # no significa necesariamente que las bibliotecas subyacentes realmente funcionen bien con un estilo funcional de programación.


3

No es estrictamente programación, pero ArcToolbox sigue un paradigma de diseño más funcional.

  • La mayoría de las herramientas están diseñadas para aceptar un conjunto de entradas, ejecutar una función y devolver las salidas sin la influencia del estado externo.
  • La mayoría de las herramientas no editan capas existentes, sino que crean nuevas (inmutabilidad).
  • Muchas herramientas son similares en operación a una función de mapa. Operan en conjuntos de objetos (conjunto de características) en lugar de utilizar la iteración para procesar objetos de nivel inferior (geometría).
  • Las herramientas básicas como unión, intersección y disolución pueden resolver numerosos problemas que serían difíciles de expresar en un lenguaje declarativo como SQL.

El enfoque funcional de ArcToolbox nos permite hacer análisis espacial sin necesidad de escribir código. El usuario puede trabajar con un conjunto simple de elementos, como capas, y no preocuparse por la iteración, el mantenimiento del estado o los efectos secundarios complicados.


2

Soy nuevo en la programación funcional, así que estos son solo algunos pensamientos.

Hay un ejemplo interesante de Ray Tracer en F # que ilustra algunos de los puntos fuertes de la programación funcional, a saber , funciones de orden superior , recursividad , paralelismo y coincidencia de patrones . Extendiendo algunos de esos conceptos, parecería que las matemáticas ráster son un área clave en los SIG para los que la programación funcional podría ser particularmente adecuada.

ingrese la descripción de la imagen aquí

editar: Aquí hay otro ejemplo del mismo sitio: Regla 30 Autómatas celulares

Otro pensamiento es que no tiene que escribir todo su programa en F #. Puede tener el programa principal escrito en C # y crear proyectos / ensamblajes en F # que resuelvan problemas específicos de programación funcional. He leído que también puede usar ILMerge para combinar C # y F # en un ejecutable / ensamblaje.

Por último, hay un montón de cosas de programación funcionales que se pueden hacer en C # con LINQ , a través de su uso de las expresiones lambda , funciones de orden superior ( Select, Where, etc), secuencia de coincidencia de patrones, etc.


Gracias por el enlace al rastreador de rayos. Tomó la libertad de agregar imagen a su respuesta.
Kirk Kuykendall
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.