Próximo: Funções e Variáveis Definidas para Expressões, Anterior: Desigualdade, Acima: Expressões [Conteúdo][Índice]
É possível definir novos operadores com precedência especificada, remover a definição de operadores existentes, ou redefinir a precedência de operadores existentes. Um operador pode ser unário prefixado ou unário pósfixado, binario infixado, n-ário infixado, matchfix, ou nofix. "Matchfix" significa um par de símbolos que abraçam seu argumento ou seus argumentos, e "nofix" significa um operador que não precisa de argumentos. Como exemplos dos diferentes tipos de operadores, existe o seguinte.
negação - a
fatorial a!
exponenciação a^b
adição a + b
construção de lista [a, b]
(Não existe operadores internos nofix;
para um exemplo de tal operador, veja nofix
.)
O mecanismo para definir um novo operador é direto. Somente é necessário declarar uma função como um operador; a função operador pode ou não estar definida previamente.
Um exemplo de operadores definidos pelo usuário é o seguinte.
Note que a chamada explícita de função "dd" (a)
é equivalente a dd a
,
da mesma forma "<-" (a, b)
é equivalente a a <- b
.
Note também que as funções "dd"
e "<-"
são indefinidas nesse exemplo.
(%i1) prefix ("dd"); (%o1) dd (%i2) dd a; (%o2) dd a (%i3) "dd" (a); (%o3) dd a (%i4) infix ("<-"); (%o4) <- (%i5) a <- dd b; (%o5) a <- dd b (%i6) "<-" (a, "dd" (b)); (%o6) a <- dd b
As funções máxima que definem novos operadores estão sumarizadas nessa tabela, equilibrando expoente associado esquerdo (padrão) e o expoente associado direito ("eae" e "ead", respectivamente). (Associação de expoentes determina a precedência do operador. todavia, uma vez que os expoentes esquerdo e direito podem ser diferentes, associação de expoentes é até certo ponto mais complicado que precedência.) Alguma das funções de definição de operações tomam argumentos adicionais; veja as descrições de função para maiores detalhes.
prefixado
ead=180
posfixado
eae=180
infixado
eae=180, ead=180
nário
eae=180, ead=180
matchfix
(associação de expoentes não é aplicável)
nofix
(associação de expoentes não é aplicável)
Para comparação, aqui está alguns operadores internos e seus expoentes associados esquerdo e direito.
Operador eae ead : 180 20 :: 180 20 := 180 20 ::= 180 20 ! 160 !! 160 ^ 140 139 . 130 129 * 120 / 120 120 + 100 100 - 100 134 = 80 80 # 80 80 > 80 80 >= 80 80 < 80 80 <= 80 80 not 70 and 65 or 60 , 10 $ -1 ; -1
remove
e kill
removem propriedades de operador de um átomo.
remove ("a", op)
remove somente as propriedades de operador de a.
kill ("a")
remove todas as propriedades de a, incluindo as propriedades de operador.
Note que o nome do operador dever estar abraçado por aspas duplas.
(%i1) infix ("##"); (%o1) ## (%i2) "##" (a, b) := a^b; b (%o2) a ## b := a (%i3) 5 ## 3; (%o3) 125 (%i4) remove ("##", op); (%o4) done (%i5) 5 ## 3; Incorrect syntax: # is not a prefix operator 5 ## ^ (%i5) "##" (5, 3); (%o5) 125 (%i6) infix ("##"); (%o6) ## (%i7) 5 ## 3; (%o7) 125 (%i8) kill ("##"); (%o8) done (%i9) 5 ## 3; Incorrect syntax: # is not a prefix operator 5 ## ^ (%i9) "##" (5, 3); (%o9) ##(5, 3)
Próximo: Funções e Variáveis Definidas para Expressões, Anterior: Desigualdade, Acima: Expressões [Conteúdo][Índice]