stringtranslate.com

nial

Nial (de "Nested Interactive Array Language") es un lenguaje de programación de matrices de alto nivel desarrollado aproximadamente en 1981 por Mike Jenkins de la Queen's University , Kingston, Ontario , Canadá. Jenkins cocreó 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

[1] 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 el código 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 cambia de "quien figura en los derechos de autor o derechos de autor del paquete" a "NIAL Systems Limited") y una instancia de "quien" (que se cambia a "quien").

conceptos niales

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. Sólo la versión 6 está disponible ahora.

Nial define todos sus tipos de datos como matrices rectangulares anidadas. ints, booleanos, caracteres, etc. se consideran una matriz solitaria o una matriz que contiene un solo miembro. Las propias matrices pueden contener otras matrices para formar estructuras arbitrariamente profundas. Nial también proporciona Registros. Se definen como una 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 llama llamada de operación o aplicación de operación".

Aplicación de operaciones

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

Operación binaria:

2 + 32 suma 3

Notación de matriz:

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

Notación de hebra:

+ 2 3suma 2 3

Notación agrupada:

+ (2 3)suma (2 3)

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

dos veces es transformador f (ff)descansar dos veces [4, 5, 6, 7, 8]|6 7 8

Atlas

[2] Un atlas en Nial es una operación compuesta por una serie de operaciones componentes. Cuando se aplica un atlas a un valor, cada elemento del atlas se aplica por turno al valor para proporcionar un resultado. Esto se utiliza para proporcionar un estilo de definiciones sin puntos (sin variables). También lo utilizan los transformadores. En los siguientes ejemplos, 'inner [+,*]', la lista '[+,*]' es un atlas.

Ejemplos

Creando matrices

cuenta 6|1 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 se puede utilizar remodelar para remodelar las dimensiones.

forma Arr|5
a := 2 3 remodelar Arr#reshape es una operación binaria con dos argumentos. También se puede escribir en prefijo como# a := remodelar [[2,3], Arr]|5 6 7|8 9 5
b := 3 2 remodelar Arr|5 6|7 8|9 5
un interno[+,*] b|130 113|148 145

Calcular un promedio

Las definiciones tienen el formato '<nombre> es <expresión>'

el promedio es / [suma, cuenta]Arr promedio|7.

Calcular un factorial

el hecho es recurrente [ 0 =, 1 primero, pase, producto, -1 +]hecho 4|24

Invertir una matriz

rev es remodelar [formar, cruzar [pasar, pasar, agregar conversar]]rev [1, 2, 3, 4]|4 3 2 1

Generando números primos

Contraste con APL

los números primos son sublista [cada uno (2 = suma cada derecha (0 = mod) [pasar, contar]), pasar] resto contarprimos 10|2 3 5 7

Explicación

Comprobando la divisibilidad de A por Bis_divisible es 0 = mod [A,B]

Definición del filtro is_prime

is_prime es 2 = suma cada derecho es_divisible [pasar, contar]

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

Ahora todo lo que queda es generar otra matriz usando el recuento N y filtrar todos los que no son primos.

los números primos son sublistas [cada uno es_primo, pasa] recuento de resto

Ordenación rápida

clasificación rápida es bifurcación [ >= [1 primero, recuento], aprobar, enlace [ sublista de clasificación rápida [ < [pasar, primero], pasar ], sublista [coincidencia [pasar,primero],pasar], sublista de clasificación rápida [ > [pasar,primero], pasar ] ]]

Usándolo:

clasificación rápida [5, 8, 7, 4, 3]|3 4 5 7 8

Referencias

  1. ^ "El lenguaje Nial". GitHub . 17 de diciembre de 2021.
  2. ^ "Diccionario Q'Nial V7".