REDUCE es un sistema de álgebra computacional de propósito general, originalmente diseñado para aplicaciones en física.
El desarrollo de REDUCE fue iniciado en 1963 por Anthony C. Hearn ; desde entonces, muchos científicos de todo el mundo han contribuido a su desarrollo. [ 2 ] REDUCE se publicó como código abierto en diciembre de 2008 y está disponible gratuitamente bajo una licencia BSD modificada en SourceForge . Anteriormente, su precio era de 695 dólares.
REDUCE está escrito completamente en su propio dialecto Lisp llamado Standard Lisp, [ 3 ] expresado en una sintaxis similar a ALGOL llamada RLISP que también se utiliza como base para el lenguaje de nivel de usuario de REDUCE.
Existen implementaciones de REDUCE disponibles para la mayoría de las variantes de sistemas Unix , Linux , Microsoft Windows o Apple Macintosh , utilizando una implementación subyacente de Portable Standard Lisp (PSL) o Codemist Standard Lisp (CSL). CSL REDUCE ofrece una interfaz gráfica de usuario . REDUCE también puede compilarse sobre otros lenguajes Lisp, como Common Lisp .
Características
- aritmética de precisión arbitraria con números enteros , racionales , complejos y de punto flotante.
- expresiones y funciones que involucran una o más variables
- algoritmos para polinomios , funciones racionales y trascendentales
- herramientas para la solución de diversas ecuaciones algebraicas
- Simplificación automática y controlada por el usuario de expresiones.
- sustituciones y coincidencia de patrones en una amplia variedad de formas
- diferenciación simbólica , integración indefinida y definida
- solución de ecuaciones diferenciales ordinarias
- cálculos con una amplia variedad de funciones especiales
- Álgebra matricial general y no conmutativa
- representación gráfica en 2 y 3 dimensiones de
- gráficas de funciones
- puntos , líneas y curvas arbitrarias
- Cálculos de la matriz de Dirac de interés en física de altas energías
- Eliminación de cuantificadores y decisión para lógica de primer orden interpretada
- Lenguaje de programación potente, intuitivo y a nivel de usuario .
Sintaxis
El lenguaje REDUCE es un lenguaje de programación estructurado de alto nivel basado en ALGOL 60 (pero con semántica de Standard Lisp ), aunque no admite toda la sintaxis de ALGOL 60. Es similar a Pascal , que evolucionó a partir de ALGOL 60, y a Modula , que evolucionó a partir de Pascal.
REDUCE es un lenguaje de formato libre , lo que significa que los espacios y los saltos de línea no son importantes, pero, en consecuencia, las instrucciones de entrada deben estar separadas entre sí y toda entrada debe terminar con un punto y coma ( ;) o un signo de dólar ( $). La diferencia es que si la entrada produce un nilvalor útil (no ), se mostrará si el separador es un punto y coma ( ;), pero se ocultará si es un signo de dólar ( $). El operador de asignación es el operador de dos puntos igual ( :=), que en su uso más simple asigna a la variable de su izquierda el valor de la expresión de su derecha. Sin embargo, una variable REDUCE puede no tener ningún valor, en cuyo caso se muestra como su nombre, para permitir que se construyan y manipulen expresiones matemáticas que involucren indeterminadas. La forma más simple de usar REDUCE es interactivamente: escriba la entrada después de la última solicitud de entrada , termínela con un punto y coma y presione la tecla Intro o Retorno ; REDUCE procesa la entrada y muestra el resultado. Esto se ilustra en la captura de pantalla .
Identificadores y cadenas
Los lenguajes de programación utilizan identificadores para nombrar construcciones como variables y funciones, y cadenas para almacenar texto. Un identificador REDUCE debe comenzar con una letra y puede ir seguido de letras, dígitos y guiones bajos ( _). Un identificador REDUCE también puede incluir cualquier carácter en cualquier posición si se introduce precedido de un signo de exclamación ( !). Una cadena REDUCE es cualquier secuencia de caracteres delimitada por comillas dobles ( "). Se pueden incluir comillas dobles en una cadena introduciendo dos comillas dobles; no se implementa ningún otro mecanismo de escape dentro de las cadenas. En la mayoría de los casos, se puede utilizar un identificador en lugar de una cadena en REDUCE, por ejemplo, para representar un nombre de archivo.
El código fuente de REDUCE se escribió originalmente en mayúsculas , al igual que todos los lenguajes de programación en la década de 1960. (Por lo tanto, el nombre REDUCE se escribe normalmente en mayúsculas). Sin embargo, la versión moderna de REDUCE no distingue entre mayúsculas y minúsculas (por defecto), lo que significa que ignora las mayúsculas y minúsculas, y se escribe normalmente en minúsculas. (El código fuente de REDUCE se ha convertido a minúsculas). Las excepciones a esta regla son que se conservan las mayúsculas y minúsculas dentro de las cadenas y cuando las letras en los identificadores van precedidas de un signo de exclamación ( !). Por lo tanto, es convencional usar snake_case (por ejemplo, long_name) en lugar de camel_case (por ejemplo, longName) para los identificadores de REDUCE, porque camel_case se pierde si no se usan también signos de exclamación.
Programas de Hola Mundo
A continuación se muestra un programa REDUCIDO "¡Hola, mundo!" , que es casi tan corto como podría serlo un programa de este tipo.
"¡Hola Mundo!" ;REDUCIR muestra la salida
¡Hola Mundo!
Otro programa REDUCE "Hola, mundo!", que es un poco más largo que la versión anterior, utiliza un identificador como sigue.
! Hola Mundo !! ;CSL REDUCE muestra la misma salida que la descrita anteriormente. (Otras interfaces gráficas de usuario de REDUCE pueden mostrar esta salida en cursiva, ya que se trata de un identificador y no de una cadena de texto).
Declaraciones y expresiones
Dado que REDUCE hereda la semántica de Lisp, todas las construcciones de programación tienen valores. Por lo tanto, la única distinción entre sentencias y expresiones es que se utiliza el valor de una expresión, pero no el de una sentencia. Los términos sentencia y expresión son intercambiables, aunque algunas construcciones siempre devuelven el valor de Lisp nily, por lo tanto, siempre se utilizan como sentencias.
Hay dos maneras de agrupar varias sentencias o expresiones en una sola unidad sintácticamente equivalente a una sola sentencia o expresión, lo cual es necesario para facilitar la programación estructurada . Una es la construcción begin... endheredada de ALGOL 60, que se denomina sentencia de bloque o compuesta . Su valor es el de la expresión que sigue a la palabra clave (opcional) return. La otra utiliza la sintaxis de corchetes <<... >>, que se denomina sentencia de grupo . Su valor es el de la última expresión (sin terminar) que contiene. Ambas se ilustran a continuación en el ejemplo de programación procedimental .
Programación estructurada
REDUCE admite sentencias condicionales y de repetición, algunas de las cuales están controladas por una expresión booleana , que es cualquier expresión cuyo valor puede ser verdadero o falso , como por ejemplo:(El lenguaje de nivel de usuario REDUCE no admite explícitamente constantes que representen verdadero o falso, aunque, como en C y lenguajes relacionados, 0 tiene el valor booleano falso , mientras que 1 y muchos otros valores distintos de cero tienen el valor booleano verdadero ).
Sentencias condicionales: si ... entonces ... si no
La declaración condicional tiene la forma
ifdeclaración de expresión booleanathen
que opcionalmente puede ir seguido de
elsedeclaración
Por ejemplo, la siguiente instrucción condicional garantiza que el valor de, que se supone numérico, es positivo. (Implementa eficazmente la función de valor absoluto ).
Si n < 0, entonces n := - nLa siguiente instrucción condicional, utilizada como expresión, evita un error que se produciría al dividir por cero.
recip_x := si x = 0 entonces infinito sino 1 / xDeclaraciones de repetición: para ...
La forinstrucción es una estructura de bucle flexible que ejecuta la instrucción repetidamente un número de veces que debe conocerse de antemano. Una versión tiene la forma
forvariable := incremento inicial instrucción finalstepuntildo
donde `variable` nombra una variable cuyo valor se puede usar dentro de la instrucción , e `initial`, `increment` y `final` son números (preferiblemente enteros). El valor de `variable` se inicializa a `initial` y se ejecuta la instrucción ; luego, el valor de `variable` se incrementa repetidamente y la instrucción se ejecuta de nuevo, siempre que el valor de `variable` no sea mayor que `final` . El caso especial común " initial step 1 untilfinal " se puede abreviar como " initial : final ".
La siguiente forinstrucción calcula el valor decomo el valor de la variable fac.
norte := 5 ; fac := 1 $ para r := 2 : n hacer fac := fac * r ; hecho ;Otra versión de la forinstrucción itera sobre una lista, y la palabra clave dopuede reemplazarse por product, sum, collecto join, en cuyo caso la forinstrucción se convierte en una expresión y la instrucción controlada se trata como una expresión. Con product, el valor es el producto de los valores de la instrucción controlada ; con sum, el valor es la suma de los valores de la instrucción controlada ; con collect, el valor son los valores de la instrucción controlada recopilados en una lista; con join, el valor son los valores de la instrucción controlada , que deben ser listas, unidos en una lista.
La siguiente forinstrucción calcula el valor demucho más conciso y elegante que el ejemplo anterior.
n := 5 ; para r := 2 : n producto r ;Sentencias de repetición: while ... do; repeat ... until
Las dos sentencias de bucle
whileexpresión booleana doinstrucción repeatinstrucción untilexpresión booleana
Están estrechamente relacionadas con la instrucción condicional y ejecutan la instrucción repetidamente un número de veces que no es necesario conocer de antemano. Su diferencia radica en que whilela repetición se detiene cuando la expresión booleana se vuelve falsa, mientras que repeatse detiene cuando se vuelve verdadera. Además, siempre ejecuta la instrucción al menos una vez y puede usarse para inicializar la expresión booleana , mientras que al usar la expresión booleana, esta debe inicializarse antes de entrar en el bucle.repeatwhile
La siguiente whileinstrucción calcula el valor decomo el valor de la variable fac. Tenga en cuenta que este código trata la asignación como una expresión y utiliza su valor.n := n - 1
norte := 5 ; fac := n $ mientras n > 1 hacer fac := fac * ( n := n - 1 ); hecho ;Comentarios
REDUCE tiene tres convenciones de comentarios. Hereda la instrucción de comentarios de ALGOL 60, que tiene este aspecto:
Comentario Este es un comentario de varias líneas. que termina en el siguiente separador, por lo tanto, no puede contener separadores;
Las declaraciones de comentarios aparecen principalmente en código antiguo.
Hereda el %comentario ... de Standard Lisp, que tiene este aspecto:
% Este es un comentario de una sola línea que termina al final de la línea. % Puede aparecer en una línea después del código y % puede contener los separadores ";" y "$".
%... los comentarios son análogos a los comentarios de C++// y son la forma de comentario más utilizada.
REDUCE también admite un comentario de estilo C/* ... */que se ve así:
/* Este es un comentario de varias líneas que puede aparecer en cualquier lugar donde un espacio pueda y puede contener los separadores ";" y "$". */
paradigmas de programación
El lenguaje de usuario de REDUCE admite varios paradigmas de programación , como se ilustra en los ejemplos de programación algebraica que aparecen a continuación.
Dado que se basa en Lisp, un lenguaje de programación funcional , REDUCE admite la programación funcional y todas las sentencias tienen valores (aunque no siempre son útiles). REDUCE también admite la programación procedimental al ignorar los valores de las sentencias. El cálculo algebraico generalmente se realiza transformando una expresión matemática en una forma equivalente pero diferente. Esto se denomina simplificación , aunque el resultado pueda ser mucho más largo. (El nombre REDUCE es un juego de palabras que alude a este problema de la sobreextensión de las expresiones intermedias ). En REDUCE, la simplificación se produce automáticamente al introducir o calcular una expresión, controlada por reglas y conmutadores de simplificación . De esta forma, REDUCE admite la programación basada en reglas , que es el paradigma de programación clásico de REDUCE. En las primeras versiones de REDUCE, las reglas y los conmutadores solo podían configurarse globalmente, pero la versión moderna de REDUCE también admite la configuración local de reglas y conmutadores, lo que significa que controlan la simplificación de una sola expresión. Los programas REDUCE suelen contener una mezcla de paradigmas de programación.
Ejemplos de programación algebraica
La captura de pantalla muestra un uso interactivo sencillo.
Como ejemplo sencillo de programación, consideremos el problema de calcular elpolinomio de Taylor de la funciónsobre el punto, que viene dada por la fórmula. Aquí,denota elderivada deevaluado en el puntoydenota el factorial de(Sin embargo, tenga en cuenta que REDUCE incluye funciones sofisticadas para la expansión en serie de potencia ).
Como ejemplo de programación funcional en REDUCE, aquí hay una manera fácil de calcular el quinto polinomio de Taylor deaproximadamente 0. En el siguiente código, la variable de control rtoma valores de 0 a 5 en pasos de 1, dfes el operador de diferenciaciónsub REDUCE y el operador realiza la sustitución de su primer argumento en su segundo. Tenga en cuenta que este código es muy similar a la fórmula matemática anterior (cony).
para r := 0 : 5 suma sub ( x = 0 , df ( sin x , x , r )) * x ^ r / factorial r ;produce por defecto la salida [ 4 ]
Esto es correcto, pero no se parece mucho a una serie de Taylor. Eso se puede solucionar cambiando algunos interruptores de control de salida y luego evaluando la variable especial ws, que representa el espacio de trabajo y contiene la última expresión de salida no vacía:
desactivado todo ; activado revpri , div ; ws ;Como ejemplo de programación procedimental en REDUCE, aquí se muestra un procedimiento para calcular el polinomio de Taylor general, que funciona para funciones que se comportan bien en el punto de expansión..
procedimiento my_taylor ( f , x , x0 , n ); % Devuelve el n-ésimo polinomio de Taylor de f % como una función de x alrededor de x0. begin scalar result := sub ( x = x0 , f ), mul := 1 ; for r := 1 : n do << f := df ( f , x ); mul := mul * ( x - x0 ) / r ; result := result + sub ( x = x0 , f ) * mul >> ; return result end ;El procedimiento se llama my_taylorporque REDUCE ya incluye un operador llamado taylor. Todo el texto que sigue a un %signo hasta el final de la línea es un comentario. La palabra clave scalarintroduce e inicializa dos variables locales , resulty mul. Las palabras clave beginy enddelimitan un bloque de código que puede incluir variables locales y puede devolver un valor, mientras que los símbolos <<y >>delimitan un grupo de instrucciones sin introducir variables locales.
El procedimiento se puede llamar de la siguiente manera para calcular el mismo polinomio de Taylor que se mencionó anteriormente.
mi_taylor ( sin x , x , 0 , 5 );Manejo de archivos y paquetes
Las interfaces gráficas de usuario (GUI) de REDUCE proporcionan soporte de menú para algunas o todas las funciones de gestión de archivos y paquetes que se describen a continuación.
Manejo de archivos
Para desarrollar cálculos no triviales, es conveniente almacenar el código fuente en un archivo y que REDUCE lo lea en lugar de utilizar la entrada interactiva. La entrada de REDUCE debe ser texto plano (no texto enriquecido como el que producen las aplicaciones de procesamiento de texto ). Los nombres de archivo de REDUCE son arbitrarios. El código fuente de REDUCE utiliza la extensión de archivo.red para el código fuente principal y .tstpara los archivos de prueba, y por esa razón, las interfaces gráficas de usuario de REDUCE, como CSL REDUCE, normalmente ofrecen archivos de entrada con esas extensiones por defecto, pero en plataformas como Microsoft Windows la extensión .txtpuede ser más conveniente. Se recomienda finalizar un archivo de entrada de REDUCE con la línea
;fin;
como marcador de fin de archivo. Esto es una peculiaridad histórica, pero evita posibles mensajes de advertencia. Aparte de eso, un archivo de entrada puede contener cualquier cosa que se introduzca interactivamente en REDUCE. El comando
inarchivo1,archivo2,...
El comando introduce sucesivamente cada uno de los archivos especificados en REDUCE, como si su contenido se hubiera introducido de forma interactiva. A continuación, REDUCE espera a que se introduzcan más datos de forma interactiva. Si el separador utilizado para finalizar este comando es un punto y coma ( ;), se muestra el contenido del archivo como salida; si el separador es un signo de dólar ( $), no se muestra el contenido del archivo.
Los nombres de archivo de REDUCE pueden ser absolutos o relativos al directorio actual; al usar una GUI de REDUCE, los nombres de archivo absolutos son más seguros porque no es obvio cuál es el directorio actual. Los nombres de archivo se pueden especificar como cadenas o identificadores ; las cadenas (entre comillas dobles) suelen ser más convenientes porque, de lo contrario, los elementos del nombre de archivo, como los separadores de directorio y los puntos, deben escaparse con un signo de exclamación ( !). Tenga en cuenta que el separador de directorio o carpeta de Microsoft Windows , la barra invertida ( \), no necesita duplicarse en las cadenas de REDUCE porque la barra invertida no es un carácter de escape en REDUCE, pero REDUCE en Microsoft Windows también acepta la barra diagonal ( /) como separador de directorio.
La salida de REDUCE se puede dirigir a un archivo en lugar de a la visualización interactiva ejecutando el comando
outarchivo;
La redirección de salida se puede finalizar permanentemente ejecutando el comando.
shutarchivo;
o temporalmente ejecutando el comando
out t;Existen mecanismos similares para dirigir una versión compilada de la entrada de REDUCE a un archivo y cargar el código compilado, que es la base para construir REDUCE y se puede utilizar para extenderlo.
Cargando paquetes
REDUCE se compone de varios paquetes; algunos están precargados, otros se cargan automáticamente cuando es necesario y otros deben cargarse explícitamente antes de poder usarse. El comando
load_packagepaquete1,paquete2,...
El comando carga sucesivamente cada uno de los paquetes especificados en REDUCE. Los nombres de los paquetes no son nombres de archivo; son identificadores simples que no requieren signos de exclamación, por lo que normalmente se introducen como identificadores, aunque también pueden introducirse como cadenas de texto. Un paquete consta de uno o más archivos de código Lisp compilado, y el load_packagecomando garantiza que los archivos correctos se carguen en el orden correcto. Los nombres y ubicaciones exactos de los archivos dependen de la versión de Lisp sobre la que se haya compilado REDUCE, pero los nombres de los paquetes siempre son los mismos.
Tipos y alcance de las variables
REDUCE hereda el alcance dinámico de Lisp, lo que significa que los datos tienen tipos, pero las variables en sí no: el tipo de una variable es el tipo de los datos que se le asignan. Los tipos de datos más simples de REDUCE son los tipos atómicos de Standard Lisp , como los identificadores, los números de máquina (es decir, los enteros "pequeños" y los números de punto flotante compatibles directamente con el hardware del ordenador) y las cadenas. La mayoría de los demás tipos de datos de REDUCE se representan internamente como listas de Lisp cuyo primer elemento ( car) indica el tipo de datos. Por ejemplo, la entrada de REDUCE
mat (( 1 , 2 ), ( 3 , 4 ));produce la pantalla
y la representación interna de esta matriz es la lista Lisp
(mat (1 2) (3 4))
Los principales objetos algebraicos utilizados en REDUCE son cocientes de dos polinomios posiblemente multivariables, cuyas indeterminadas, llamadas núcleos , pueden ser funciones de una o más variables, por ejemplo, la entrada.
z := ( x + y ^ 2 ) / f ( x , y );produce la pantalla
REDUCE utiliza dos representaciones para dichos objetos algebraicos. Una se llama forma prefija , que es simplemente el código Lisp estándar para la expresión y es conveniente para operaciones como entrada y salida; por ejemplo, paraes
(cociente (más x (expt y 2)) (fxy))
La otra se llama forma cociente estándar , que es mejor para realizar manipulaciones algebraicas como la suma; por ejemplo, paraes
(!*sq ((((x . 1) . 1) ((y . 2) . 1)) (((fxy) . 1) . 1)) t)
REDUCE realiza conversiones entre estas dos representaciones según sea necesario, pero intenta conservar la forma de cociente estándar en la medida de lo posible para evitar la sobrecarga de la conversión.
Dado que las variables no tienen tipos, en REDUCE no existen declaraciones de tipo de variable , pero sí declaraciones de ámbito de variable . El ámbito de una variable se refiere al rango de un programa en el que tiene el mismo significado. Por defecto, las variables de REDUCE tienen un ámbito global , lo que significa que tienen el mismo significado en todas partes; es decir, una vez que se le asigna un valor a una variable, se evaluará con ese mismo valor en todas partes. Se puede declarar que el ámbito de las variables se limita a un bloque de código específico delimitando dicho bloque con las palabras clave `<variable>` beginy `<variable> end`, y declarando las variables scalaral inicio del bloque, utilizando la siguiente sintaxis (como se ilustra en los ejemplos de programación algebraica anteriores):
beginscalarvariable1 , variable2 , ...; declaracionesend
Cada variable declarada de esta manera puede ir seguida opcionalmente de un operador de asignación ( :=) y un valor inicial. La palabra clave scalardebe interpretarse como «local» . (El motivo del nombre «scalar» se encuentra en la historia de REDUCE, pero probablemente se eligió para distinguir las variables locales de los 4-vectores relativistas y las matrices gamma de Dirac definidas en el paquete de física de altas energías , que fue el núcleo original de REDUCE. [ 2 ] )
La scalarpalabra clave puede reemplazarse por integero real. La diferencia radica en que integerlas variables se inicializan por defecto a 0, mientras que las variables scalary realse inicializan por defecto al valor Lisp nil(que de todos modos tiene el valor algebraico 0). Esta distinción es más significativa en el lenguaje de implementación de REDUCE, RLISP, también conocido como modo simbólico o Lisp . De lo contrario, resulta útil como documentación del uso previsto de las variables locales.
Hay otras dos declaraciones de variables que se utilizan únicamente en la implementación de REDUCE, es decir, en modo simbólico. El bloque REDUCE begin... descrito anteriormente se traduce a una forma Standard Lisp mediante el analizador sintáctico de REDUCE , y todas las variables Standard Lisp deben estar vinculadas en formas, o declaradas como o . En RLISP, estas declaraciones se ven así:endprogprogglobalfluid
fluid '(variable1 variable2 ...)global '(variable1 variable2 ...)
Una globalvariable no se puede reasignar en un progformulario, mientras que una fluidvariable sí. Esta distinción normalmente solo es significativa para un compilador de Lisp y se utiliza para maximizar la eficiencia; en el código interpretado estas declaraciones se pueden omitir y las variables no declaradas son efectivamente fluid.
Gráficos
REDUCE admite la visualización gráfica mediante gnuplot , un paquete gráfico portátil de código abierto independiente incluido en todas las distribuciones binarias de REDUCE. El paquete REDUCE GNUPLOT permite visualizar curvas o superficies definidas por fórmulas o conjuntos de datos mediante el comando plot(... ). Este comando expone algunas, pero no todas, las funcionalidades de gnuplot. Los paquetes REDUCE TURTLE y LOGOTURTLE se basan en el paquete REDUCE GNUPLOT y admiten gráficos de tortuga en dos dimensiones; el paquete LOGOTURTLE también expone funcionalidades adicionales de gnuplot, como el control del color y el grosor de la línea, el relleno y las anotaciones de texto.
Implementaciones disponibles y plataformas compatibles
REDUCE está disponible en SourceForge . Se publican distribuciones binarias [ 1 ] varias veces al año sin un calendario fijo como instantáneas del repositorio Subversion , y también ofrecen instantáneas de archivo comprimido del código fuente completo. SourceForge se puede configurar para notificar a los usuarios cuando haya una nueva versión disponible. En 2024, se publicaron distribuciones binarias para versiones de 64 bits de macOS , Linux ( sistemas basados en Debian y Red Hat ) y Microsoft Windows . Los instaladores incluyen o están disponibles para CSL-REDUCE y PSL-REDUCE, y pueden incluir el código fuente de REDUCE. REDUCE se puede compilar a partir del código fuente en una gama más amplia de plataformas y en otros sistemas Lisp, como Common Lisp . [ 5 ]
Otro software que utiliza REDUCE
Los siguientes proyectos utilizan REDUCE:
- ALLTYPES [ 6 ] (Lenguaje ALgebraico y Sistema de Tipos) es un sistema de tipos de álgebra computacional con especial énfasis en el álgebra diferencial y las ecuaciones diferenciales;
- DAISY [ 7 ] (Álgebra diferencial para la identificabilidad de sistemas) es una herramienta de software para realizar análisis de identificabilidad estructural para modelos dinámicos lineales y no lineales descritos por ecuaciones EDO polinómicas o racionales;
- MTT [ 8 ] (Herramientas de Transformación de Modelos) es un conjunto de herramientas para modelar sistemas físicos dinámicos utilizando la metodología de grafos de enlaces;
- Reduce.jl [ 9 ] es un analizador simbólico para la reescritura de términos del lenguaje Julia utilizando el álgebra REDUCE;
- Redlog [ 10 ] (REDUCE Logic System) proporciona más de 100 funciones en fórmulas de primer orden y originalmente era independiente, pero ahora está disponible como un paquete REDUCE;
- Pure es un lenguaje de programación que cuenta con enlaces para REDUCE, lo que proporciona un entorno muy interesante para realizar ciencia asistida por ordenador.
Véase también
- Lista de sistemas de álgebra computacional
- ALTRAN
- REDUCE se reúne con CAMAL - JP Fitch
Referencias
- 1 2 "REDUCIR archivos en SourceForge" .
- 1 2 Hearn, Anthony C. (2005). "REDUCE: Los primeros cuarenta años". Álgebra y lógica algorítmicas: Actas de la conferencia A3L 2005, del 3 al 6 de abril, Passau, Alemania, en honor al 60 cumpleaños de Volker Weispfenning . Biblioteca Universitaria de Passau.
- ^ Martí, J.; Hearn, CA; Griss, ML; Griss, C. (1 de octubre de 1979). "Informe LISP estándar" . Avisos ACM SIGPLAN . 14 (10): 48– 68. doi : 10.1145/953997.953999 . ISSN 0362-1340 .
- ↑ La salida REDUCE tipográfica que se muestra presupone el uso de CSL REDUCE .
- ↑ "Código REDUCE" . SourceForge . Consultado el 7 de enero de 2025 .
- ↑ "ALLTYPES - Un lenguaje algebraico y un sistema de tipos" . Archivado del original el 11 de agosto de 2024.
- ↑ "Álgebra diferencial para la identificabilidad de sistemas" . DAISY . Consultado el 19 de enero de 2025 .
- ↑ "Herramientas de transformación de modelos" . SourceForge . 4 de septiembre de 2014. Consultado el 19 de enero de 2025 .
- ↑ Reed, Michael (5 de mayo de 2017). "Reduce.jl" . GitHub . Recuperado el 25 de enero de 2025 .
- ↑ "Computing with Logic" . Redlog . Consultado el 19 de enero de 2025 .
Enlaces externos
- REDUCIR en SourceForge
- Anthony C. Hearn et al., Manual del usuario de REDUCE [ HTML | PDF ].
- Anthony C. Hearn, "REDUCE: Los primeros cuarenta años" . Ponencia invitada presentada en la Conferencia A3L en honor al 60 cumpleaños de Volker Weispfenning, abril de 2005.
- Andrey Grozin, "Interfaz TeXmacs-Reduce" , abril de 2012.
- Software de sistema de álgebra computacional para Linux
- Sistemas de álgebra computacional
- Software anteriormente propietario
- Sistemas de álgebra computacional gratuitos
- Software libre programado en Lisp.
- Software que utiliza la licencia BSD.