Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Verdadero si Int3 = Int1 + Int2 . Al menos dos de los tres argumentos deben
ser instanciados a enteros.
% I < 0,
% N mod 2 =\= 0,
nth_integer_root_and_remainder(
N, I, Root, Remainder),
IPos is -I,
nth_integer_root_and_remainder(
N, IPos, RootPos, RemainderPos),
Root =:= -RootPos,
Remainder =:= -RemainderPos.
[ISO]-Número es + Expr
Verdadero cuando Número es el valor con el que Expr evalúa. Por lo
general, is / 2 debe usarse con el operando izquierdo no vinculado. Si
se va a probar la igualdad, se debe utilizar =: = / 2 . Por ejemplo:
?- 1 is Falla sin (pi / 2) se evalúa como flotante 1.0, que no se
sin(pi/2). unifica con el entero 1.
?- 1 =:= Tiene éxito como se esperaba.
sin(pi/2).
4.27.2.1 Tipos aritméticos
entero
Si SWI-Prolog se construye utilizando la biblioteca aritmética de
precisión múltiple (GMP) GNU , la aritmética de
enteros no tiene límites , lo que significa que el tamaño de los enteros
está limitado solo por la memoria disponible. Sin GMP, los enteros
SWI-Prolog son de 64 bits, independientemente del tamaño entero
nativo de la plataforma. El tipo de soporte de enteros se puede
detectar utilizando los indicadores
Prolog limitados , min_integer y max_integer . Como el uso de GMP es
predeterminado, la mayoría de las siguientes descripciones suponen
una aritmética de enteros ilimitados.
número racional
Los números racionales ( Q ) son cocientes de dos enteros. La
aritmética racional solo se proporciona si se usa GMP (ver arriba). Los
números racionales actualmente no son compatibles con un tipo
Prolog. Están representados por el término compuesto rdiv(N,M) . Los
números racionales que se devuelven de is / 2 son canónicos , lo que
significa que M es positivo y N y M no tienen divisores comunes. Los
números racionales se introducen en el cálculo utilizando la
función racional / 1 , racionalizar / 1 o rdiv / 2 (división racional). El
uso del mismo functor para la división racional y para representar
números racionales permite pasar números racionales entre los
cálculos, así como también usar formato / 3 para imprimir.
flotador
Los números de coma flotante se representan usando el tipo
C double . En la mayoría de las plataformas actuales, estos son
números de coma flotante IEEE de 64 bits.
Las funciones aritméticas que requieren argumentos enteros aceptan,
además de los enteros, números racionales con denominador (canónico)
'1'. Si el argumento requerido es flotante, el argumento se convierte en
flotante. Tenga en cuenta que la conversión de enteros a números de coma
flotante puede generar una excepción de desbordamiento. En todos los
demás casos, los argumentos se convierten al mismo tipo usando el
siguiente orden.
A es 2 rdiv 6 A = 1 rdiv 3
A es 4 rdiv 3 + 1 A = 7 rdiv 3
A es 4 rdiv 3 + 1.5 A = 2.83333
A es 4 rdiv 3 + racional (1.5) A = 17 rdiv 6
Tenga en cuenta que los flotantes no pueden representar todos los números
decimales exactamente. La función racional / 1 crea un
equivalente exacto del flotante, mientras que racionalizar / 1 crea un
número racional que está dentro del error de redondeo del flotante del
flotante original. Consulte la documentación de estas funciones para obtener
detalles y ejemplos.
A = 17 rdiv 6
4.27.2.3 Funciones aritméticas
Las funciones aritméticas son términos que son evaluados por los
predicados aritméticos descritos en la sección 4.27.2 . Hay cuatro tipos de
argumentos para las funciones:
Para los sistemas que usan aritmética de enteros acotados (el valor
predeterminado es ilimitado, consulte la sección 4.27.2.1 para más detalles),
las operaciones de enteros que causarían un desbordamiento se
convertirían automáticamente en aritmética de coma flotante.
[ISO]- + Expr
Resultado = - Expr
[ISO]+ + Expr
Resultado = Expr . Tenga en cuenta que si + es seguido por un número,
el analizador descarta el + . Es decir ?- integer(+1) tiene éxito.
[ISO]abs ( + Expr )
Evaluar Expr y devolver el valor absoluto de la misma.
aleatorio ( + IntExpr )
Evalúe a un entero aleatorio i para el cual 0 = <i < IntExpr . El sistema
tiene dos implementaciones. Si se compila con soporte para aritmética
ilimitada (predeterminado), utiliza las funciones aleatorias de la
biblioteca GMP. En este caso, cada hilo mantiene su propio estado
aleatorio. El algoritmo predeterminado es el algoritmo Mersenne
Twister . La semilla se establece cuando se genera el primer número
aleatorio en un hilo. Si está disponible, se establece
desde /dev/random . 115 De lo contrario, se configura desde el reloj del
sistema. Si no se admite la aritmética ilimitada, se comparten números
aleatorios entre los subprocesos y la semilla se inicializa desde el reloj
cuando se inicia SWI-Prolog. El predicado set_random / 1 se puede
usar para controlar el generador de números aleatorios.
random_float
Evalúe en un flotante aleatorio I para el cual 0.0 <i <1.0 . Esta función
comparte el estado aleatorio con random / 1 . Todos los comentarios
con la función random / 1 también se aplican para random_float /
0 . Tenga en cuenta que ambos lados del dominio están abiertos . Esto
evita errores de evaluación en, por ejemplo, log / 1 o // 2, mientras
que ninguna aplicación práctica puede esperar 0.0. 116
[ISO]ronda ( + Expr )
Evalúa Expr y redondea el resultado al entero más cercano. De
acuerdo con ISO, round / 1 se define como floor(Expr+1/2) , es decir,
redondeando hacia abajo . Esta es una opción poco convencional bajo
la cual la relación round(Expr) == -round(-Expr) no se cumple. SWI-
Prolog se redondea hacia afuera , por ejemplo, round(1.5) =:=
2 y round(-1.5) =:= -2 .
entero ( + Expr )
Igual que round / 1 (compatibilidad con versiones anteriores).
racional ( + Expr )
Convierta el Expr en un número racional o entero. La función devuelve
la entrada en enteros y números racionales. Para los números de coma
flotante, el número racional devuelto representa exactamente el
flotante. Como los flotantes no pueden representar exactamente todos
los números decimales, los resultados pueden ser sorprendentes. En
los ejemplos a continuación, los dobles pueden representar 0.25 y el
resultado es el esperado, en contraste con el resultado
de rational(0.1) . La función racionalizar / 1 remedia esto. Consulte
la sección 4.27.2.2 para obtener más información sobre el soporte de
números racionales.
? - A es racional (0.25).
A es 1 rdiv 4
? - A es racional (0.1).
A = 3602879701896397 rdiv 36028797018963968
racionalizar ( + Expr )
Convierta el Expr en un número racional o entero. La función es
similar a racional / 1 , pero el resultado solo es preciso dentro del
error de redondeo de los números de coma flotante, generalmente
produciendo un denominador mucho más pequeño. 117
? - A es racionalizar (0.25).
A = 1 rdiv 4
? - A es racionalizar (0.1).
A = 1 rdiv 10
[ISO]float_fractional_part ( + Expr )
Parte fraccional de un número de coma flotante. Negativo si Expr es
negativo, racional si Expr es racional y 0 si Expr es entero. La siguiente
relación es siempre cierta: X es float_fractional_part (X) +
float_integer_part (X) .
[ISO]float_integer_part ( + Expr )
Parte entera del número de coma flotante. Negativo si Expr es
negativo, Expr si Expr es entero.
[ISO]truncado ( + Expr )
Truncar Expr a un entero. Si Expr > = 0, esto es lo mismo
que floor(Expr) . Para Expr <0 esto es lo mismo que ceil(Expr) . Es
decir, truncar / 1 redondea hacia cero.
[ISO]piso ( + Expr )
Evalúe Expr y devuelva el entero más grande, más pequeño o igual al
resultado de la evaluación.
techo ( + Expr )
Igual que techo / 1 (compatibilidad con versiones anteriores).
[ISO]\ + IntExpr
Negación bit a bit. El valor devuelto es el complemento de IntExpr .
[ISO]sqrt ( + Expr )
Resultado = sqrt ( Expr )
[ISO]sin ( + Expr )
Resultado = sin ( Expr ) . Expr es el ángulo en radianes.
[ISO]cos ( + Expr )
Resultado = cos ( Expr ) . Expr es el ángulo en radianes.
[ISO]bronceado ( + Expr )
Resultado = tan ( Expr ) . Expr es el ángulo en radianes.
[ISO]asin ( + Expr )
Resultado = arcsin ( Expr ) . El resultado es el ángulo en radianes.
[ISO]acos ( + Expr )
Resultado = arccos ( Expr ) . El resultado es el ángulo en radianes.
[ISO]atan ( + Expr )
Resultado = arctan ( Expr ) . El resultado es el ángulo en radianes.
[ISO]atan2 ( + YExpr, + XExpr )
Resultado = arctan ( YExpr / XExpr ) . El resultado es el ángulo en
radianes. El valor de retorno está en el rango [- pi ... pi] . Se usa para
convertir entre sistema de coordenadas rectangular y polar.
sinh ( + Expr )
Resultado = sinh ( Expr ) . El seno hiperbólico de X se define como e **
X - e ** -X / 2 .
cosh ( + Expr )
Resultado = cosh ( Expr ) . El coseno hiperbólico de X se define
como e ** X + e ** -X / 2 .
tanh ( + Expr )
Resultado = tanh ( Expr ) . La tangente hiperbólica de X se define
como sinh (X) / cosh (X) .
asinh ( + Expr )
Resultado = arcsinh ( Expr ) (seno hiperbólico inverso).
acosh ( + Expr )
Resultado = arccosh ( Expr ) (coseno hiperbólico inverso).
atanh ( + Expr )
Resultado = arctanh ( Expr ) . (tangente hiperbólica inversa).
Registro [ISO]( + Expr )
Logaritmo natural. Resultado = ln ( Expr )
log10 ( + Expr )
Logaritmo de base 10. Resultado = log10 ( Expr )
[ISO]exp ( + Expr )
Resultado = e ** Expr
[ISO]+ Expr1 ** + Expr2
Resultado = Expr1 ** Expr2 . El resultado es un flotante, a menos que
SWI-Prolog se compile con un soporte entero ilimitado y las entradas
sean enteras y produzcan un resultado entero. Se garantiza que las
expresiones enteras 0 ** I , 1 ** I y -1 ** I funcionan para cualquier
entero I. Otros valores base enteros generan un error de resource si el
resultado no cabe en la memoria.
lgamma ( + Expr )
Devuelve el logaritmo natural del valor absoluto de la función
Gamma. 119
erf ( + Expr )
Wikipedia : `` En matemáticas, la función de error (también llamada
función de error de Gauss) es una función especial (no elemental) de
forma sigmoidea que ocurre en probabilidad, estadísticas y
ecuaciones diferenciales parciales ''.
erfc ( + Expr )
Wikipedia : `` La función de error complementaria ''.
[ISO]pi
Evalúe la constante matemática pi (3.14159 ...).
mi
Evalúe la constante matemática e (2.71828 ...).
épsilon
Evalúe la diferencia entre el flotador 1.0 y el primer número de punto
flotante más grande.
inf
Evaluar hasta el infinito positivo. Ver sección 2.17.1.6 . Este valor se
puede negar usando - / 1 .
yaya
Evaluar a No es un número . Ver sección 2.17.1.6 .
cputime
Evalúe hasta un número de coma flotante que exprese el tiempo
de CPU (en segundos) utilizado por Prolog hasta ahora. Ver
también estadísticas / 2 y tiempo / 1 .
eval ( + Expr )
Evaluar Expr . Aunque el estándar ISO dicta que ' A = 1 + 2, B es A '
funciona y unifica B a 3, se cree ampliamente que las variables de nivel
fuente en expresiones aritméticas deberían haberse limitado a
números. En esta vista, la función eval puede usarse para evaluar
expresiones arbitrarias. 120
Funciones de Bitvector
msb ( + IntExpr )
Devuelve el entero más grande N tal que (IntExpr >> N) /\ 1 =:=
1 . Este es el índice (de origen cero) del 1 bit más significativo en el
valor de IntExpr , que debe evaluar a un entero positivo. Errores para
0, enteros negativos y no enteros.
lsb ( + IntExpr )
Devuelve el entero más pequeño N tal que (IntExpr >> N) /\ 1 =:=
1 . Este es el índice (de origen cero) del 1 bit menos significativo en el
valor de IntExpr , que debe evaluar a un entero positivo. Errores para
0, enteros negativos y no enteros.
popcount ( + IntExpr )
Devuelve el número de 1s en la representación binaria del entero no
negativo IntExpr .