Nial

format_list_bulleted Contenido keyboard_arrow_down
ImprimirCitar

Nial (de "Nested Interactive Array Language") es un lenguaje de programación de matriz de alto nivel desarrollado aproximadamente en 1981 por Mike Jenkins de Queen's University, Kingston, Ontario, Canadá. Jenkins co-creó el algoritmo Jenkins-Traub.

Nial combina una notación de programación funcional para matrices basada en una teoría de matrices desarrollada por Trenchard More con conceptos de programación estructurada para datos numéricos, de caracteres y simbólicos.

Se utiliza con mayor frecuencia para la creación de prototipos y la inteligencia artificial.

Q'Nial

En 1982, Jenkins formó una empresa (Nial Systems Ltd) para comercializar el lenguaje y la implementación Q'Nial de Nial. A partir de 2014, el sitio web de la empresa admite un proyecto de código abierto para el software Q'Nial con el binario y la fuente disponibles para descargar. Su licencia se deriva de la Licencia Artística 1.0, las únicas diferencias son el preámbulo, la definición de "Titular de los derechos de autor" (que se cambia de "cualquiera que se nombre en los derechos de autor o los derechos de autor del paquete" a "NIAL Systems Limited"), y una instancia de "quienquiera" (que se cambia a "quienquiera").

Conceptos de Nial

Nial utiliza una teoría de matrices generalizada y expresiva en su versión 4, pero sacrificó parte de la generalidad del modelo funcional y modificó la teoría de matrices en la versión 6. Actualmente solo está disponible la versión 6.

Nial define todos sus tipos de datos como matrices rectangulares anidadas. ints, booleans, chars, etc. se consideran una matriz solitaria o una matriz que contiene un solo miembro. Los propios arreglos pueden contener otros arreglos para formar estructuras arbitrariamente profundas. Nial también proporciona registros. Se definen como estructura de matriz no homogénea.

Las funciones en Nial se llaman Operaciones. Del manual de Nial: "Una operación es un objeto funcional al que se le asigna una matriz de argumentos y devuelve una matriz de resultados. El proceso de ejecutar una operación dándole un valor de argumento se denomina llamada de operación o aplicación de operación."

Aplicación de operaciones

Nial, como otros lenguajes derivados de APL, permite la unificación de operaciones y operadores binarios. Por lo tanto, las siguientes notaciones tienen el mismo significado. Nota: sum es lo mismo que +

Operación binaria:

2 + 3
2 suma 3

Notación de matriz:

+ [2,3]
suma [2,3]

Notación de cadena:

+ 2 3
suma 2 3

Notación agrupada:

+ (2 3)
suma (2 3)

Nial también usa transformadores que son funciones de orden superior. Utilizan la operación de argumento para construir una nueva operación modificada.

dos veces es transformador f (f f)
dos veces descanso [4, 5, 6, 7, 8]
Silencio

Atlas

Un atlas en Nial es una operación formada por una matriz de operaciones componentes. Cuando se aplica un atlas a un valor, cada elemento del atlas se aplica a su vez al valor para proporcionar un resultado. Esto se utiliza para proporcionar un estilo de definiciones sin puntos (sin variables). También es utilizado por los transformadores. En los siguientes ejemplos 'interno [+,*]' la lista '[+,*]' es un atlas.

Ejemplos

Crear matrices

6
Silencio1 2 3 4 5 6

Las matrices también pueden ser literales

Arr:= [5, 6, 7, 8, 9]
Ø5 6 7 8 9

La forma proporciona las dimensiones de la matriz y la reforma se puede utilizar para reformar las dimensiones.

Forma Arr
Silencio5
a:= 2 3 reshape Arr
# Reshape es una operación binaria con dos argumentos. También se puede escribir en prefijo como
# a:= reshape [[2,3], Arr]
Ø5 6 7
Silencio8 9 5
b:= 3 2 reshape Arr
Silencio
Silencio7 8
Silencio
a interior[+,*] b
Silencio
Silencio148 145

Calcular un promedio

Las definiciones tienen la forma '<name> es <expresión>'

promedio es / [sum, tally]
promedio Arr
Silencio7.

Calcular un factorial

hecho es recurrido [ 0 =, 1 primero, pasar, producto, -1 +]
hecho 4
Silencio

Invertir una matriz

rev es remodelado [ forma, cruza [pass, pass, converse append]
rev [1, 2, 3, 4]
Silencio4 3 2 1

Generando números primos

Contraste con APL

primos es sublista [ cada uno (2 = suma cada derecho (0 = mod) [pass,count]), pase ] recuento de descanso
primos 10
TENIDA2 3 5 7

Explicación

Verificación de la divisibilidad de A por B
is_divisible is 0 = mod [A,B]

Definiendo el filtro is_prime

is_prime is 2 = sum eachright is_divisible [pass,count]

Count genera una matriz [1..N] y pass es N (operación de identidad). eachright aplica is_divisible (pasar, elemento) en cada elemento de la matriz generada por conteo. Por lo tanto, esto transforma la matriz generada por conteo en una matriz donde los números que pueden dividir a N se reemplazan por '1' y otros por '0'. Por lo tanto, si el número N es primo, sum [arreglo transformado] debe ser 2 (él mismo y 1).

Ahora todo lo que queda es generar otra matriz utilizando el conteo N y filtrar todo lo que no sea primo.

primos es sublista [cada es_prime, pase] cuenta de descanso

Ordenación rápida

  • link se une a sus arrays de argumentos
  • sublist [A,B] devuelve una lista de elementos de B elegidos de acuerdo con la lista de booleanos dados en A, seleccionando los elementos de B donde el elemento correspondiente de A es verdadero.
  • En un Fork [A,B,C] X la primera A es un predicado, y si A(X) es cierto, entonces B(X) es devuelto otra C(X) es devuelto.
  • Pass es una operación de identidad para los arrays.
quicksort es tenedor [ 1 primero, en realidad],
Pasa,
enlace [
sublista de gama rápida [ ]
sublist [ match [pass,first],pass ],
rapidsort sublist [ ó [pass,first], pass ]
]
]

Utilizándolo:

quicksort [5, 8, 7, 4, 3]
Silencio3 4 5 7 8

Contenido relacionado

IP sobre transportistas aviares

En las redes informáticas, IP over Avian Carriers es una propuesta de broma para transportar el tráfico del Protocolo de Internet por aves como las palomas...

Codificación de rango

Codificación de rango es un método de codificación de entropía definido por G. Nigel N. Martin en un artículo de 1979, que efectivamente redescubrió...

Semántica atómica

1) Cada operación de invocación de una operación de lectura o...
Más resultados...
Tamaño del texto:
undoredo
format_boldformat_italicformat_underlinedstrikethrough_ssuperscriptsubscriptlink
save