Sintaxis y símbolos de APL

format_list_bulleted Contenido keyboard_arrow_down
ImprimirCitar

El lenguaje de programación APL es distintivo al ser simbólico en lugar de léxico : sus primitivas se denotan por símbolos , no palabras. Estos símbolos se idearon originalmente como una notación matemática para describir algoritmos. Los programadores de APL a menudo asignan nombres informales al discutir funciones y operadores (por ejemplo, " Product " para ×/) pero las funciones y operadores centrales proporcionados por el idioma se denotan por símbolos no textuales.

Funciones monádicas y diádicas

La mayoría de los símbolos denotan las funciones o operadores . Una función monádica toma como argumento el resultado de evaluar todo a su derecho. (Moderado de la manera habitual por paréntesis.) Una función diádica tiene otro argumento, el primer elemento de datos a su izquierda. Muchos símbolos denotan funciones monádicas y diádicas, interpretadas según el uso. Por ejemplo, ⌊3.2 da 3, el entero más grande no por encima del argumento, y 3⌊2 da 2, el más bajo de los dos argumentos.

Funciones y operadores

APL usa el término operador en el sentido de Heaviside como moderador de una función en lugar de algún otro lenguaje de programación, el uso del mismo término que funciona en datos, ref. operador relacional y operadores en general. Otros lenguajes de programación también a veces usan este término indistintamente con función , sin embargo, ambos términos se usan en APL con mayor precisión. Las definiciones tempranas de los símbolos de APL fueron muy específicas sobre cómo se clasificaron los símbolos. Por ejemplo, el operador Reduce se denota mediante una barra de barra hacia adelante y reduce una matriz a lo largo de un eje al interponer su función operando . Un ejemplo de reducción:

 ×/2 3 4
24
c) c) Equivalente resultados en APL "
c) Reducir operador / utilizado a la izquierda
 2×3×4
24

En el caso anterior, el operador reduce o slash moderate moderados la función multiplicar . La expresión ×/2 3 4 se evalúa a un resultado escalar (1 elemento 1) a través de reduciendo una matriz por multiplicación. El caso anterior se simplifica, imagine multiplicar (agregar, restar o dividir) más que solo unos pocos números juntos. (De un vector, ×/ devuelve el producto de todos sus elementos).


 1 0 1 045 67
45 0 67
c) c) Opositor resultados en APL "
c) Ampliación función dyadic \ utilizado a la izquierda
Replicar función dyadic / usada a la derecha
 1 0 1/45 0 67
45 67

Los ejemplos de funciones diádicas anteriores [ejemplos izquierdo y derecho] (usando el mismo símbolo /, ejemplo de la derecha) demuestran cómo se pueden usar los valores booleanos (0 y 1). como argumentos izquierdos para que las funciones \ expand y / replicate produzcan resultados exactamente opuestos. En el lado izquierdo, el vector de 2 elementos {45 67} está expandido donde se producen ceros booleanos para dar como resultado un vector de 3 elementos { 45 0 67} — observe cómo APL insertó un 0 en el vector. Por el contrario, ocurre exactamente lo contrario en el lado derecho — donde un vector de 3 elementos se convierte en solo 2 elementos; booleanos 0 eliminar elementos usando la función diádica /barra. Los símbolos APL también operan en listas (vectores) de elementos que utilizan tipos de datos distintos de los numéricos, por ejemplo, un vector de 2 elementos de cadenas de caracteres {"Apples" "Naranjas"} podría sustituirse por el vector numérico {45 67} anterior.

Reglas de sintaxis

En APL, la jerarquía de precedencia para funciones u operadores es estrictamente posicional: las expresiones se evalúan de derecha a izquierda. APL no sigue la precedencia de operadores habitual de otros lenguajes de programación; por ejemplo, × ya no vincula sus operandos "estrechamente" que +. En lugar de precedencia de operadores, APL define una noción de alcance.

El alcance de una función determina sus argumentos. Las funciones tienen un alcance derecho largo: es decir, toman como argumento correcto todo lo que está a su derecha. Una función diádica tiene un alcance izquierdo corto: toma como argumento izquierdo el primer dato a su izquierda. Por ejemplo, (la columna más a la izquierda a continuación es el código de programa real de una sesión de usuario de APL, con sangría = entrada real del usuario, sin sangría = resultado devuelto por el intérprete de APL):


Un operador puede tener operandos de función o datos y evaluarse como una función diádica o monádica. Los operadores hace tiempo que abandonaron el ámbito. Un operador toma como operando izquierdo la función más larga a su izquierda. Por ejemplo:

El operando izquierdo para el operador sobre cada ¨ es la función índice ⍳. La función derivada ⍳¨ se usa monádicamente y toma como operando derecho el vector 3 3. El alcance izquierdo de cada termina con el operador reducir, indicado por la barra diagonal. Su operando izquierdo es la expresión de función a su izquierda: el producto externo de la función igual. El resultado de ∘.=/ es una función monádica. Con el alcance largo derecho habitual de una función, toma como argumento derecho el resultado de ⍳¨3 3. Por lo tanto



Funciones monádicas

Nombre(s) Notación Significado Punto de código Unicode
Roll ?BUn entero seleccionado aleatoriamente desde el primer B enteros U+003F ? CUESTIÓN MARCO
Ceiling ⌈BMenos entero mayor o igual a BU+2308 LEFT CEILING
Piso ⌊BMayor entero menos que o igual a BU+230A LEFT FLOOR
Forma, Rho ⍴BNúmero de componentes en cada dimensión BU+2374 APL FUNCTIONAL SYMBOL RHO
No, Tilde. ∼BLógica: U+223C TILDE OPERATOR
Valor absoluto ∣BMagnitud de BU+2223 DIVIDES
Generador de índice, Iota ⍳BVector de la primera B enteros U+2373 APL FUNCTIONAL SYMBOL IOTA
Exponential ⋆Be a la B poder U+22C6 STAR OPERATOR
Negación −BCambios signo de BU+2212 MINUS SIGN
Conjugado +BEl complejo conjugado de B (Los números reales son devueltos sin cambios) U+002B + PLUS SIGN
Signum ×B̄1 si B0; 0 si B=0; 1 si B■0 U+00D7 × MULTIPLICATION SIGN
Reciprocal ÷B1 dividido por BU+00F7 . DIVISION SIGN
Ravel, Catenate, Laminate ,BReshapes B en un vector U+002C , COMMA
Matriz inversa, Divideo de Cuádruplo Monádico ⌹BInverso de matriz BU+2339 APL FUNCTIONAL SYMBOL QUAD DIVIDE
Pi veces ○BMultiply por π U+25CB :: WHITE CIRCLE
Logarithm ⍟BLogaritmo natural de BU+235F APL FUNCTIONAL SYMBOL CIRCLE STAR
Reversal ⌽BElementos inversos B en el último eje U+233D CTILES DE CIRCULA FUNCIONALES
Reversal ⊖BElementos inversos B en el primer eje U+2296 MINUS CIRCLED
Grado arriba ⍋BÍndices de B que organizará B en orden ascendente U+234B CTILE DELTA DE SYMBOL FUNCIONAL
Grado abajo ⍒BÍndices de B que organizará B en orden descendente U+2352 APL FUNCTIONAL SYMBOL DEL STILE
Ejecutar ⍎BEjecutar un APL expresión U+234E APL FUNCTIONAL SYMBOL DOWN TACK JOT
Formato monadic ⍕BUna representación de carácter BU+2355 APL FUNCTIONAL SYMBOL UP TACK JOT
Transposesión monádica ⍉BInvierte los ejes de BU+2349 APL FUNCTIONAL SYMBOL CIRCLE BACKSLASH
Factorial !BProducto de enteros 1 a BU+0021 ! MARCO DE EXCLAMACIÓN
Profundidad ≡BProfundidad de anidación: 1 para una matriz sin contorno U+2261 IDENTICAL TO
Cuadro ⍪BMarcas B en una tabla, un array de 2 dimensiones. U+236A APL FUNCTIONAL SYMBOL COMMA BAR

Funciones diádicas

Nombre(s) Notación Significado Unicode
punto
Añadir A+BSum of A y BU+002B + PLUS SIGN
Subtract A−BA menos BU+2212 MINUS SIGN
Multiply A×BA multiplicado por BU+00D7 × MULTIPLICATION SIGN
Divide A÷BA dividido por BU+00F7 . DIVISION SIGN
Exponentiation A⋆BA c B poder U+22C6 STAR OPERATOR
Circle A○BFunciones trigonométricas B seleccionado por A
A=1: pecado(B) A=5: sinh(B)
A=2: cos(B) A=6: cosh(B)
A=3: tan(B) A=7: tanh(B)

Los negativos producen el inverso de las funciones respectivas

U+25CB :: WHITE CIRCLE
Trato hecho A?BA distintos enteros seleccionados aleatoriamente de los primeros B enteros U+003F ? CUESTIÓN MARCO
Miembros, Epsilon A∈B1 para elementos de A presentes en B; 0 donde no. U+2208 ELEMENTO DE
Encontrar, Epsilon Underbar A⍷B1 para el punto de partida de la matriz de varios puntos A presentes en B; 0 donde no. U+2377 APL FUNCTIONAL SYMBOL EPSILON UNDERBAR
Maximum, Ceiling A⌈BEl mayor valor de A o BU+2308 LEFT CEILING
Mínimo, Piso A⌊BEl menor valor A o BU+230A LEFT FLOOR
Reshape, Dyadic Rho A⍴BArray of shape A con datos BU+2374 APL FUNCTIONAL SYMBOL RHO
Toma. A↑BSeleccione el primero (o último) A elementos de B según ×AU+2191 UPWARDS ARROW
Suelta A↓BQuitar el primero (o último) A elementos de B según ×AU+2193 DOWNWARDS ARROW
Decodificación A⊥BValor de un polinomio cuyos coeficientes son B a AU+22A5 Arriba
Código A⊤BBase-A representación del valor BU+22A4 DOWN TACK
Residue A∣BB modulo AU+2223 DIVIDES
Catenation A,BElementos de B a los elementos AU+002C , COMMA
Expansion, Dyadic Backslash A\BInsertar ceros (o blancos) en B correspondiente a ceros en AU+005C \ REVERSE SOLIDUS
Compresión, Dyadic Slash A/BSeleccione elementos B correspondientes a los AU+002F / SOLIDUS
Index of, Dyadic Iota A⍳BLa ubicación (índice) de B dentro A; 1+⍴A si no se encuentra U+2373 APL FUNCTIONAL SYMBOL IOTA
Divide la matriz, Dyadic Quad DivideA⌹BSolución al sistema de ecuaciones lineales, regresión múltiple Ax = BU+2339 APL FUNCTIONAL SYMBOL QUAD DIVIDE
Rotación A⌽BLos elementos de B se rotan A posiciones U+233D CTILES DE CIRCULA FUNCIONALES
Rotación A⊖BLos elementos de B se rotan A posiciones a lo largo del primer eje U+2296 MINUS CIRCLED
Logarithm A⍟BLogaritmo de B a base AU+235F APL FUNCTIONAL SYMBOL CIRCLE STAR
Formato Dyadic A⍕BFormato B en una matriz de caracteres AU+2355 APL FUNCTIONAL SYMBOL UP TACK JOT
Transposesión general A⍉BLos ejes de B son ordenados por AU+2349 APL FUNCTIONAL SYMBOL CIRCLE BACKSLASH
Combinaciones A!BNúmero de combinaciones de B adoptadas A a la vez U+0021 ! MARCO DE EXCLAMACIÓN
Diaeresis, Dieresis, Doble-Dot A¨BSobre cada uno, o realizar cada uno por separado; B = sobre éstos; A = operación para realizar o utilizar (por ejemplo, iota)U+00A8 . DIAERESIS
Menos que AComparación: 1 si es verdad, 0 si falso U+003C c) LESS-THAN SIGN
Menos o igual A≤BComparación: 1 si es verdad, 0 si falso U+2264 MENOS QUE O CUALQUIER
Igualdad A=BComparación: 1 si es verdad, 0 si falso U+003D = EQUALS SIGN
Mayor o igual A≥BComparación: 1 si es verdad, 0 si falso U+2265 GREATER-THAN O EQUAL TO
Más grande que A>BComparación: 1 si es verdad, 0 si falso U+003E GREATER-THAN SIGN
No es igual A≠BComparación: 1 si es verdad, 0 si falso U+2260 ل NO EQUAL
O A∨BBoolean Logic: 0 (False) si ambos A y B = 0, 1 de lo contrario. Alt: 1 Si A o B = 1 (True) U+2228 Alternativa LOGICA O
Y A∧BBoolean Logic: 1 Si ambos A y B = 1, 0 (False) de otro modo U+2227 LOGICA Y
Nor A⍱BBoolean Logic: 1 si ambos A y B son 0, de lo contrario 0. Alt: ~ U+2371 APL FUNCTIONAL SYMBOL DOWN CARET TILDE
Nand A⍲BBoolean Logic: 0 si ambos A y B 1. De otro modo 1. Alt: ~∧ = not And U+2372 APL FUNCTIONAL SYMBOL UP CARET TILDE
Izquierda A⊣BAU+22A3 LEFT TACK
Bien. A⊢BBU+22A2 Atrás
Partido A≡B0 si A no coincide B exactamente con respecto al valor, la forma y el anidaje; de lo contrario 1. U+2261 IDENTICAL TO
Laminate A⍪BConcatenar a lo largo del primer eje U+236A APL FUNCTIONAL SYMBOL COMMA BAR

Operadores e indicador de eje

Nombre(s) Signatura Ejemplo Significado (por ejemplo) Secuencia de punto de código Unicode
Reducir (último eje), Slash / +/BSum across BU+002F / SOLIDUS
Reducir (primer eje) +⌿BSum down BU+233F SLASH BAR FUNCTIONAL
Escáner (último eje), Backslash \ +\BEjecutando suma BU+005C \ REVERSE SOLIDUS
Escáner (primer eje) +⍀BEjecutando la suma BU+2340 APL FUNCTIONAL SYMBOL BACKSLASH BAR
Producto interior . A+.×BMatriz producto de A y BU+002E . FULL STOP
Producto exterior ∘. A∘.×BProducto exterior A y BU+2218 RING OPERATOR, U+002E . FULL STOP

Notas: Los operadores de reducción y escaneo esperan una función diádica a su izquierda, formando una función compuesta monádica aplicada al vector a su derecha.

El operador de producto " ;. " espera una función diádica tanto en la izquierda como en la derecha, formando una función compuesta diádica aplicada a los vectores a la izquierda y a la derecha. Si la función a la izquierda del punto es " ∘ " (que significa nulo) entonces la función compuesta es un producto exterior, de lo contrario es un producto interno. Un producto interno destinado a la multiplicación de matriz convencional utiliza las funciones + y ×, reemplazarlas con otras funciones diádicas puede dar como resultado operaciones alternativas útiles.

Algunas funciones pueden ser seguidas por un indicador del eje en los soportes (cuadrados), es decir, esto aparece entre una función y una matriz y no debe confundirse con los subíndices de matriz escritos después de una matriz. Por ejemplo, dada la función ⌽ (reversión) y una matriz bidimensional, la función de forma predeterminada funciona a lo largo del último eje, pero esto se puede cambiar usando un indicador del eje:


Como caso particular, si el dyadic catenate " función es seguida por un indicador del eje (o modificador de eje a un símbolo/función), se puede utilizar para laminar (interpose) dos arrays dependiendo de si el indicador del eje es menor o mayor que el origen del índice (origen del índice = 1 en la ilustración a continuación):

Matrices anidadas

Arrays son estructuras que tienen elementos agrupados linealmente como vectores o en forma de tabla como matrices, y dimensiones superiores (3D o al cubo, 4D o al cubo en el tiempo, etc.). Las matrices que contienen caracteres y números se denominan matrices mixtas. Las estructuras de matrices que contienen elementos que también son matrices se denominan matrices anidadas.

Crear un array anidado
Sesión de usuario con intérprete APLExplicación
 X4 5⍴⍳20 X 1 2 3 4 5 6 7 8 9 1011 12 13 14 1516 17 18 19 20 X[2;2]7 ⎕IO1 X[1;1]1


X set = a matriz con 4 filas por 5 columnas, compuesta de 20 enteros consecutivos.

Elemento X[2;2] en la fila 2 - columna 2 actualmente es un entero = 7.

Inicial origen índice ⎕IO valor = 1.

Así, el primer elemento en la matriz X o X[1;1] = 1.

 X[2;2]"Texto" X[3;4]()2 2⍴⍳4) X 1 2 3 4 5 6 Texto 8 9 10 11 12 13 1 2 15 3 4 16 17 18 19 20
Elemento en X[row 2; col 2] se cambia (de 7) a un anidado vector "Text" usando el clo función.


Elemento en X[row 3; col 4], antiguo entero 14, ahora se convierte en un mini encerrado o anidado 2x2 matriz de 4 enteros consecutivos.

Desde X contiene números, texto y elementos anidados, es ambos un mixto y a anidado array.

Representación visual de la array anidado

Control de flujo

Un usuario puede definir funciones personalizadas que, al igual que las variables, se identifican por un nombre en lugar de por un símbolo no textual. El encabezado de función define si una función personalizada es niládica (sin argumentos), monádica (un argumento derecho) o diádica (argumentos izquierdo y derecho), el nombre local del resultado (a la izquierda de la flecha ← asignar) y si tiene variables locales (cada una separada por punto y coma ';').

Funciones de usuario
Niladic función PI o π(pi) Monadic función CIRCLEAREADyadic función SEGMENTAREA, con variables locales
 Silencio RESULTADOSPI RESULTADOS::1 Silencio
 Silencio AREACIRCLEAREA RADIUS AREAPI×RADIUS2 Silencio
 Silencio AREADEGREES SEGMENTAREA RADIUS ; FRACTION ; CA FRACTIONDEGREES.360 CACIRCLEAREA RADIUS AREAFRACTION×CA Silencio

Si las funciones con el mismo identificador pero diferente adicidad son distintas está definido por la implementación. Si se permite, entonces una función CURVEAREA podría definirse dos veces para reemplazar tanto la CIRCLEAREA monádica como la SEGMENTAREA diádica anterior, seleccionando la función monádica o diádica según el contexto en el que se hace referencia.

Las funciones diádicas personalizadas generalmente se pueden aplicar a parámetros con las mismas convenciones que las funciones integradas, es decir, las matrices deben tener el mismo número de elementos o uno de ellos debe tener un solo elemento extendido. Hay excepciones a esto; por ejemplo, una función para convertir moneda británica predecimal a dólares esperaría tomar un parámetro con exactamente tres elementos que representen libras, chelines y peniques.

Dentro de un programa o una función personalizada, el control puede ser transferido condicionalmente a una declaración identificada por un número de línea o etiqueta explícita; si el objetivo es 0 (cero) esto termina el programa o regresa a la llamada de una función. La forma más común utiliza la función de compresión APL, como en la plantilla (condición)/target que tiene el efecto de evaluar la condición a 0 (falso) o 1 (verdad) y luego utilizarla para enmascarar el objetivo (si la condición es falsa se ignora, si es cierto que queda solo por lo que se transfiere el control).

Por lo tanto, la función SEGMENTAREA se puede modificar para cancelar (justo debajo), devolviendo cero si los parámetros (GRADOS y RADIO a continuación) son de signo diferente:

Silencio AREADEGREES SEGMENTAREA RADIUS ; FRACTION ; CA ; SIGN ⍝ variables locales denotadas por semicolon() FRACTIONDEGREES.360 CACIRCLEAREA RADIUS ⍝ this APL code statement calls user function CIRCLEAREA, defined up above. SIGN()×DEGREES)RADIUS TEST/determine si DEGREES y RADIUS NO tienen el mismo SIGN 1-yes diferente( ل), 0-no(same signo) AREA0 ⍝ valor predeterminado de AREA set = cero SIGN/0 ⍝ ramificación (aquí, salida) ocurre cuando SIGN=1 mientras que SIGN=0 NO se ramifica a 0. Función de ramificación a 0 salidas. AREAFRACTION×CASilencio

La función anterior SEGMENTAREA funciona como se esperaba si los parámetros son escalares o matrices de un solo elemento, pero no si son de múltiples elementos. arrays ya que la condición termina basándose en un solo elemento de la matriz SIGN; por otro lado, la función de usuario podría modificarse para manejar correctamente los argumentos vectorizados. A veces, la operación puede ser impredecible ya que APL define que las computadoras con capacidades de procesamiento de vectores deberían paralelizar y pueden reordenar las operaciones de matriz en la medida de lo posible; por lo tanto, probar y depurar funciones de usuario particularmente si se usarán con argumentos vectoriales o incluso matriciales. Esto afecta no solo la aplicación explícita de una función personalizada a matrices, sino también su uso en cualquier lugar donde se pueda usar razonablemente una función diádica, como en la generación de una tabla de resultados:

 90 180 270 ̄90 ∘.SEGMENTAREA 1 ̄2 40 0 00 0 00 0 00 0 0

Una forma más concisa y, a veces, mejor: formular una función es evitar transferencias explícitas de control y, en su lugar, utilizar expresiones que se evalúen correctamente en todas o en las condiciones esperadas. A veces es correcto dejar que una función falle cuando uno o ambos argumentos de entrada son incorrectos, precisamente para que el usuario sepa que uno o ambos argumentos utilizados eran incorrectos. Lo siguiente es más conciso que la función SEGMENTAREA anterior. Es importante destacar que lo siguiente maneja correctamente los argumentos vectorizados:

 Silencio AREADEGREES SEGMENTAREA RADIUS ; FRACTION ; CA ; SIGN FRACTIONDEGREES.360 CACIRCLEAREA RADIUS SIGN()×DEGREES)RADIUS AREAFRACTION×CA#SIGN ⍝ esta declaración de la APL es más compleja, como una sola línea - pero resuelve argumentos vectorizados: una compensación - complejidad vs. ramificación Silencio 90 180 270 ̄90 ∘.SEGMENTAREA 1 ̄2 40,85398163 0 12.56637061.57079633 0 25.13274122.35619449 0 37.69911180 ̄3.14159265 0

Evitar transferencias explícitas de control, también llamadas ramificaciones, si no se revisan o controlan cuidadosamente, puede promover el uso de frases ingeniosas excesivamente complejas, verdaderamente "modismos incomprendidos y complejos" y una opción de "sólo escritura" estilo, que ha hecho poco para ganarse el cariño de APL ante comentaristas influyentes como Edsger Dijkstra. Sin embargo, los modismos de APL pueden ser divertidos, educativos y útiles, si se usan con comentarios ⍝ útiles, por ejemplo, incluyendo la fuente, el significado previsto y la función del modismo. Aquí hay una lista de modismos APL, una lista de modismos APL2 de IBM aquí y una biblioteca de modismos APL finlandés aquí.

Varios

Otros símbolos
Nombre(s) Signatura Ejemplo Significado (por ejemplo) Punto de código Unicode
Alto menos ̄ ¯3Denota un número negativo U+00AF ̄ MACRON
Lamp, Comentario ⍝This is a commentTodo a la derecha de ⍝ denota un comentario U+235D APL FUNCTIONAL SYMBOL UP SHOE JOT
RightArrow, Branch, GoTo →This_Label→This_Label envía ejecución APL a This_Label: U+2192 DERECHO ARROW
Assign, LeftArrow, Set to B←AB←A establece valores y forma de B para coincidir con A U+2190 LEFTWARDS ARROW

La mayoría de las implementaciones de APL admiten una serie de variables y funciones del sistema, generalmente precedidas por ⎕ (quad) y/o ")" ( gancho=cerrar paréntesis). Tenga en cuenta que el carácter cuádruple no es lo mismo que el símbolo de carácter faltante Unicode. Particularmente importante y ampliamente implementada es la variable ⎕IO (Index Origin), ya que mientras el IBM APL original basaba sus matrices en 1, algunas variantes más nuevas las basan en cero:

Sesión de usuario con intérprete APLDescripción
 X12 X1 2 3 4 5 6 7 8 9 10 11 12 ⎕IO1 X[1]1

X set = a vector de 12 enteros consecutivos.

Inicial origen índice ⎕IO valor = 1. Así, la primera posición en vector X o X[1] = 1 por vector de valores de iota {1 2 3 4 5...}.

 ⎕IO0 X[1]2 X[0]1
Origen ⎕IO ahora cambió a 0. Así, la 'primera posición índice' en el vector X cambia de 1 a 0. En consecuencia, X[1] entonces referencias o puntos a 2 de {1 2 3 4 5...} y X[0] ahora referencias 1.
 WAWA41226371072
Quad WA o WAWA, otra dinámica sistema variable, muestra cuánto queda Área de Trabajo no utilizados o 41,226 megabytes o alrededor de 41 gigabytes no utilizados zona de trabajo gratuita adicional disponible para el espacio de trabajo y programa APL para procesar el uso. Si este número se pone bajo o se acerca a cero - el ordenador puede necesitar más memoria de acceso aleatorio (RAM), espacio de disco duro o alguna combinación de los dos para aumentar la memoria virtual.
 )VARSX
)VARS a system function in APL, )VARS muestra nombres de variables de usuario existentes en el espacio de trabajo actual.

También hay funciones del sistema disponibles para los usuarios para guardar el espacio de trabajo actual, por ejemplo, )SAVE y finalizar el entorno APL, por ejemplo, )OFF, a veces denominado . gancho comandos o funciones debido al uso de un paréntesis derecho inicial o un gancho. Existe cierta estandarización de estas funciones cuádruples y de gancho.

Fuentes

El plano multilingüe básico Unicode incluye los símbolos APL en el bloque técnico misceláneo, que por lo tanto generalmente se representan con precisión a partir de las fuentes Unicode más grandes instaladas con la mayoría de los sistemas operativos modernos. Estas fuentes rara vez las diseñan tipógrafos familiarizados con los glifos APL. Entonces, aunque son precisos, los glifos pueden parecer desconocidos para los programadores de APL o ser difíciles de distinguir entre sí.

Algunas fuentes Unicode se han diseñado para mostrar bien APL: APLX Upright, APL385 Unicode y SimPL.

Antes de Unicode, los intérpretes APL contaban con fuentes en las que los caracteres APL se asignaban a posiciones menos utilizadas en los conjuntos de caracteres ASCII, generalmente en los 128 puntos superiores del código. Estas asignaciones (y sus variaciones nacionales) a veces eran únicas para el intérprete de cada proveedor de APL, lo que hacía que la visualización de programas APL en la Web, en archivos de texto y manuales fuera frecuentemente problemática.

Función del teclado APL2 para mapeo de símbolos

APL2 Keyboard
APL2 Teclado

Tenga en cuenta la tecla de encendido/apagado de APL: tecla situada en el extremo superior derecho, justo debajo. También tenga en cuenta que el teclado tenía unas 55 teclas de símbolos APL únicas (68 enumeradas según las tablas anteriores, incluidos símbolos comparativos, pero varios símbolos aparecen en tablas monádicas y diádicas) (se enumeran 55 funciones (operadores) de APL en IBM& #39;s 5110 APL Reference Manual), por lo tanto, con el uso de las teclas alt, shift y ctrl, teóricamente habría permitido un máximo de algunas 59 (teclas) *4 (con pulsación de dos teclas) *3 (con pulsación de tres teclas, por ejemplo, ctrl-alt-del) o unas 472 combinaciones de teclas máximas diferentes, acercándose al máximo de 512 caracteres EBCDIC (256 caracteres multiplicados por 2 códigos para cada combinación de llaves). Nuevamente, en teoría, el teclado que se muestra aquí habría permitido la entrada del teclado y el uso activo de alrededor de 472 símbolos/funciones APL diferentes. En la práctica, las primeras versiones solo usaban algo aproximadamente equivalente a 55 símbolos especiales APL (excluyendo letras, números, puntuación, etc.). Por lo tanto, los primeros APL solo utilizaban alrededor del 11% (55/472) del potencial de utilización de un lenguaje simbólico en ese momento, según los límites de las teclas # del teclado, excluyendo nuevamente números, letras, puntuación, etc. En otro sentido, la utilización de los símbolos del teclado fue más cercana al 100%, altamente eficiente, ya que EBCDIC solo permitía 256 caracteres distintos y ASCII solo 128.

Resolver acertijos

APL ha demostrado ser extremadamente útil para resolver acertijos matemáticos, varios de los cuales se describen a continuación.

El triángulo de Pascal

Tomemos el triángulo de Pascal, que es un conjunto triangular de números en el que los que están al final de las filas son 1 y cada uno de los otros números es la suma de los dos números más cercanos en la fila justo encima de él ( el ápice, 1, estando en la cima). La siguiente es una función de una sola línea de APL para representar visualmente el triángulo de Pascal:

 Pascal{}0~.a.0,.a!.a⌽⍳} ⍝ Crear una función de usuario llamada Pascal Pascal 7 ⍝ Correr función Pascal para siete filas y mostrar los resultados a continuación: 1  1 2  1 3 3  1 4 6 4  1 5 10 10 5  1 6 15 20 15 6  1 7 21 35 35 21 7

Números primos, prueba contraria mediante factores

Determina el número de números primos (el número primo es un número natural mayor que 1 que no tiene divisores positivos aparte de 1 y él mismo) hasta algún número N. A Ken Iverson se le atribuye la siguiente solución APL de una sola línea al problema:

 ⎕CR 'PrimeNumbers ' ⍝ Show APL user-function PrimeNumbersPrimesPrimeNumbers N ⍝ La función toma un arg N derecho (por ejemplo, mostrar números primos para 1... int N)Primes()2=+0=()N)∘.SilencioN)/N ⍝ El Ken Iverson una línea PrimeNumbers 100 ⍝ Mostrar todos los números primos de 1 a 1002 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 PrimeNumbers 10025 ⍝ Hay veinticinco números primos en el rango de hasta 100.

Con frecuencia es necesario examinar el inverso o opuesto de una solución matemática (factores enteros de un número): demostrar que el subconjunto de números enteros del 1 al 15 son no primos enumerando sus factores de descomposición. ¿Cuáles son sus factores distintos de uno (# es divisible por, excepto 1)?

 ⎕CR 'ProveNonPrime 'ZProveNonPrime R⍝ Mostrar todos los factores de un entero R - excepto 1 y el número mismo,⍝ i.e., probar No-Prime. String 'prime' es devuelto para un primer entero.Z()0=()R)SilencioR)/R ⍝ Determinar todos los factores para el entero R, almacenar en ZZ()~()Z1,R)/Z ⍝ Eliminar 1 y el número como factores para el número de Z.()0=Z)/ProveNoPrimeIsPrime ⍝ Si el resultado tiene cero forma, no tiene otros factores y por lo tanto es primoZR,()"factores(excepto 1)),()Z),⎕TCNL ⍝ Mostrar el número R, sus factores (excepto 1,itself), y una nueva línea de char0 ⍝ Hecho con función si no-primeProveNoPrimeIsPrime: ZR,()"Primero"),⎕TCNL ⍝ ramas de función aquí si el número era primo ProveNonPrime .15 ⍝ Probar no primos para cada( ̈) de los enteros de 1 a 15 (iota 15) 1 primo 2 primo 3 primo 4 factores()Salvo 1) 2  5 primo 6 factores()Salvo 1) 2 3  7 primo 8 factores()Salvo 1) 2 4  9 factores()Salvo 1) 3  10 factores()Salvo 1) 2 5  11 primo 12 factores()Salvo 1) 2 3 4 6  13 primo 14 factores()Salvo 1) 2 7  15 factores()Salvo 1) 3 5

Secuencia de Fibonacci

Genere una secuencia numérica de Fibonacci, donde cada número subsiguiente en la secuencia es la suma de los dos anteriores:

 ⎕CR "Fibonacci" ' Función de visualización FibonacciFibonacciNumFibonacci Nth;IOwas ⍝ Divertido encabezado, funct name=Fibonacci, funct monadic con 1 mano derecha arg Nth;local var IOwas, y un num devuelto.⍝Generar un número secuenciado de Fibonacci donde Nth es la posición # del número Fibonacci en la secuencia. Descripción de la funciónIOwas⎕IO  ⎕IO0  FibonacciNum0 1.×/Nth/2 21 1 1 0  ⎕IOIOwas ⍝ Para que esta función funcione correctamente ⎕IO debe ajustarse a cero. Fibonacci.14 ⍝ Esta declaración de APL dice: Generar la secuencia de Fibonacci sobre cada( ̈) número entero(iota o ⍳) para los enteros 1..14.0 1 1 2 3 5 8 13 21 34 55 89 144 233 ⍝ Secuencia generada, es decir, la secuencia Fibonacci de números generados por el intérprete de APL.
Más resultados...
Tamaño del texto:
undoredo
format_boldformat_italicformat_underlinedstrikethrough_ssuperscriptsubscriptlink
save