-
Notifications
You must be signed in to change notification settings - Fork 0
/
example.sf
50 lines (34 loc) · 1.35 KB
/
example.sf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#!/usr/bin/ruby
# Daniel "Trizen" Șuteu
# License: GPLv3
# Date: 25 February 2017
# https://github.com/trizen
# Experimental implementation of symbolic mathematical identities.
include('lib/bacovia.sf')
var x = Symbol('x')
var y = Symbol('y')
say x+y #=> Sum(Symbol('x'), Symbol('y'))
say x-y #=> Difference(Symbol('x'), Symbol('y'))
say x*y #=> Product(Symbol('x'), Symbol('y'))
say x/y #=> Fraction(Symbol('x'), Symbol('y'))
say x**y #=> Power(Symbol('x'), Symbol('y'))
say Log(x) #=> Log(Symbol('x'))
say Log(x)+Log(y) #=> Log(Product(Symbol('x'), Symbol('y')))
say Exp(x) #=> Exp(Symbol('x'))
say Exp(x)*Exp(y) #=> Exp(Sum(Symbol('x'), Symbol('y')))
say "\n=> Sum:"
var sum = Fraction(0, 1)
for n in (1..10) {
sum += Fraction(1, n)
}
say sum #=> Fraction(10628640, 3628800)
say sum.numeric.as_frac #=> 7381/2520
say "\n=> Product:"
var prod = Fraction(1, 1)
for n in (0..3) {
prod *= Exp(Fraction(1, n!))
}
say prod #=> Product(Fraction(1, 1), Exp(Fraction(1, 1)), Exp(Fraction(1, 1)), Exp(Fraction(1, 2)), Exp(Fraction(1, 6)))
say prod.numeric #=> 14.39191609514989...
say "\n=> Alternative representations:"
Power(3, 5).alternatives.each { .say } #=> [Exp(Product(Log(3), 5)), Power(3, 5), 243]