Obtendo ajuda
Para obter informações sobre uma função ou constante (por exemplo) é só digitar o seu nome seguido do símbolo de interrogação:
sage: pi?
Type: Expression
Base Class: <type 'sage.symbolic.expression.Expression'>
String Form: pi
Namespace: Interactive
Length: 0
File: /opt/sage-4.8/local/lib/python2.6/site-packages/sage/symbolic/expression.so
Definition: pi(self, *args, **kwds)
Docstring:
Nearly all expressions are created by calling
new_Expression_from_*, but we need to make sure this at least
doesn't leave self._gobj uninitialized and segfault.
TESTS:
Type: Expression
Base Class: <type 'sage.symbolic.expression.Expression'>
Type: Expression
Base Class: <type 'sage.symbolic.expression.Expression'>
String Form: pi
Namespace: Interactive
Length: 0
File: /opt/sage-4.8/local/lib/python2.6/site-packages/sage/symbolic/expression.so
Definition: pi(self, *args, **kwds)
Docstring:
Nearly all expressions are created by calling
new_Expression_from_*, but we need to make sure this at least
doesn't leave self._gobj uninitialized and segfault.
TESTS:
sage: sage.symbolic.expression.Expression(SR)
0
sage: sage.symbolic.expression.Expression(SR, 5)
5
We test subclassing "Expression":
sage: from sage.symbolic.expression import Expression
sage: class exp_sub(Expression): pass
sage: f = function('f')
sage: t = f(x)
sage: u = exp_sub(SR, t)
sage: u.operator()
f
Constructor Docstring:
Nearly all expressions are created by calling
new_Expression_from_*, but we need to make sure this at least
doesn't leave self._gobj uninitialized and segfault.
.
.
.
sage: sin?
Type: Function_sin
Base Class: <class 'sage.functions.trig.Function_sin'>
String Form: sin
Namespace: Interactive
File: /opt/sage-4.8/local/lib/python2.6/site-packages/sage/functions/trig.py
Definition: sin(self, *args, coerce=True, hold=False, dont_call_method_on_arg=False)
Docstring:
The sine function.
EXAMPLES:
sage: sin(0)
0
sage: sin(x).subs(x==0)
0
sage: sin(2).n(100)
0.90929742682568169539601986591
sage: loads(dumps(sin))
sin
We can prevent evaluation using the "hold" parameter:
sage: sin(0,hold=True)
sin(0)
To then evaluate again, we currently must use Maxima via
"sage.symbolic.expression.Expression.simplify()":
sage: a = sin(0,hold=True); a.simplify()
0
TESTS:
sage: conjugate(sin(x))
sin(conjugate(x))
Constructor Docstring:
The sine function.
EXAMPLES:
sage: sin(0)
0
.
.
.
é possível completar as funções/comandos do Sage usando a tecla TAB.
Funções, Indentação e Contagem
sage: def par(n):
....: return n%2==0
....:
sage: par(3)
False
sage: par(6)
True
Não é necessário especificar o tipo de qualquer argumento de entrada e as funções podem ter múltiplos argumentos. Cada argumento pode ter um valor padrão, que é usado caso não for passado nenhum outro valor. Ex:
sage: def divisivel_por(numero,divisor=3):
....: return numero%divisor==0
....:
sage: divisivel_por(4,2)
True
sage: divisivel_por(4)
False
sage: divisivel_por(6)
True
Como o Sage é uma interface em Python, os blocos de código não são indicados por chaves ou qualquer sinalizador de inicio e fim mas sim pela própria indentação. Ex
(sem erro de indentação)
sage: def pares_ate(n):
....: v=[]
....: for i in range(3,n):
....: if i%2==0:
....: v.append(i)
....: return v
....:
sage: pares_ate(12)
[4, 6, 8, 10]
(com erro de indentação)
sage: def pares_ate(n):
....: v=[]
....: for i in range(3,n):
....: if i%2==0:
....: v.append(i)
....: return v
------------------------------------------------------------
File "<ipython console>", line 6
return v
^
SyntaxError: invalid syntax
Ponto e virgula (;) no final de atribuições de variáveis, por exemplo, não é necessário, quando as declarações são feitas em linhas separadas. No caso de fazer mais de uma declaração na mesma linha é preciso usar o ponto e vírgula.
sage: a=3
sage: b=a+2
sage: b
5
sage: a=4; b=a-1; b
3
Caso queira que uma linha de código continue na próxima, é só usar a barra invertida (\):
sage: 5 + \
....: 6
11
No Sage é possível fazer uma contagem iterando no domínio dos inteiros. Por exemplo, a iteração for(i=0; i<5; i++) no C++ ou Java, no Sage, fica:
sage: for i in range(5):
....: print i
....:
0
1
2
3
4
Se quisermos que a iteração comece de um número diferente de zero:
sage: for i in range(3,5):
....: print i
....:
3
4
Se quisermos especificar também o passo da iteração, acrescentamos mais um argumento:
sage: for i in range(2,7,2):
....: print i
....:
2
4
6
A estrutura mais básica no Sage é uma lista. Um lista pode ser criada, por exemplo, pelo comando range:
sage: range(1,10)
[1, 2, 3, 4, 5, 6, 7, 8, 9]
Uma lista pode ser armazenada em uma variável e ela pode ter não só números, mas textos e funções, por exemplo:
sage: w = [3, "oi", 5/3, tan(x^2)]
sage: w
[3, 'oi', 5/3, tan(x^2)]
A indexação da lista começa do zero:
sage: w[0]
3
Use len(w) para obter o comprimento de w, use w.append(obj) para acrescentar um novo objeto no final da lista w, e use del w[i] para deletar a i-ésima entrada de w.
sage: len(w)
4
sage: w.append(e^2)
sage: w
[3, 'oi', 5/3, tan(x^2), e^2]
sage: del w[3]
sage: w
[3, 'oi', 5/3, e^2]
Outra estrutura de dados importante é o dicionário. Ele funciona como uma lista, exceto que pode ser indexado por quase qualquer objeto e é delimitado por chaves:
sage: k = {'oi':5, 9.9:e, pi:'teste'}
sage: k[9.9]
e
sage: k['oi']
5
sage: k[pi]
'teste'