2011-06-10 135 views
9

Si Prolog tiene una clara distinción entre cadenas, números, átomos, listas y estructuras compuestas, ¿cómo se puede llamar sin tipo? Y cómo difiere de los lenguajes de tipeo dinámico, como Lisp, por ejemplo.¿Prolog es un lenguaje sin tipo? ¿Cuál es la diferencia entre Prolog y los lenguajes tipados dinámicamente?

¿Con qué parte de la definición de "lenguaje de tipado dinámico" entra en conflicto con Prolog? ¿Y con qué parte de la definición de "lenguaje no tipificado" está en conflicto con Lisp?

Cualquier idea es apreciada.

actualización

que ya sé cuál es la diferencia entre los tipos dinámicos, estáticos, fuertes y débiles. Mi pregunta es sobre un caso especial que es Prolog. Solo quiero entender cómo se considera que Prolog está sin tipo, aunque no parece tener una clara diferencia con respecto a los lenguajes tipados dinámicamente.

Aquí es una referencia que Prolog es sin tipo http://en.wikipedia.org/wiki/Prolog#Types

+0

¿Tiene una referencia para esto? –

+1

Creo que está mezclando tipeo fuerte y tipado dinámico. – mikerobi

+0

una referencia para qué exactamente? – is7s

Respuesta

5

Prolog es en su mayoría sin tipo en el sentido de que puede pasar cualquier tipo de término a cualquier predicado y, por lo general, el peor de los casos es que el predicado no tendrá éxito. Sin embargo, los predicados aritméticos, como is y =:= esperan argumentos numéricos y pueden explotar, por lo que hay una noción de tipos allí.

Los predicados no puros también pueden esperar objetos del tipo "manejar archivos" y explotar de lo contrario.

Por lo tanto, llamar a Prolog "sin tipo" no es estrictamente cierto.

1

Cuando se escribe un predicado como

head([H|_], H). 

no se especifica ningún tipo en cualquier lugar. Puede llamar al head([1,2,3], X), puede llamar al head("foo", X) e incluso puede llamar al head(1, [1,2,3]). Todos ellos funcionan bien. El último no causará ningún error, simplemente devolverá false.. Creo que eso es lo que se entiende por "sin tipo".

+0

+1 buen ejemplo ... Pero, ¿el hecho de que devuelve falso en lugar de emitir un error lo suficiente como para llamarlo "sin tipo"? – is7s

+0

@ is7s, creo que sí. Si intentas llamar 'head (1)' provoca un error, porque tiene una cuenta de argumento incorrecta, no devuelve 'false'. 'false' es parte de la función normal del lenguaje, no de algún estado de error. – svick

+0

@svick En realidad, el ejemplo que acaba de mostrar muestra que el prólogo tiene tipos, ya que muestra que el tipo de 'cabeza' es un predicado que espera un argumento, si realmente fue sin tipo debería haber sido falso en este caso también. Además, el ejemplo principal en su publicación también puede leerse como "cabeza" es un predicado que espera un primer argumento de _type_list, y está indefinido ('false') si el primer argumento es cualquier cosa que no sea de la _type_ list. – is7s

Cuestiones relacionadas