@@ -40,27 +40,26 @@ pub fn exec(
40
40
"ceil" => ceil ( & lst, & ram) ,
41
41
"floor" => floor ( & lst, & ram) ,
42
42
"round" => round ( & lst, & ram) ,
43
- "norm" => norm ( & lst, & ram, functions) ,
43
+ "norm" => norm ( & lst, & ram, & functions) ,
44
44
"transpose_vector" => transpose_vectors ( & lst, & ram) ,
45
45
"transpose" => transpose_matrices ( & lst, & ram) ,
46
46
"det" => det_matrix ( & lst, & ram) ,
47
47
"invert" => inverse_matrix ( & lst, & ram) ,
48
- "plot" => plot_fn ( & lst, & ram, functions, false ) ,
49
- "termplot" => plot_fn ( & lst, & ram, functions, true ) ,
50
- "diff" => diff ( & lst, & ram, functions) ,
48
+ "plot" => plot_fn ( & lst, & ram, & functions, false ) ,
49
+ "termplot" => plot_fn ( & lst, & ram, & functions, true ) ,
50
+ "diff" => diff ( & lst, & ram, & functions) ,
51
51
s => {
52
52
let mut sram: HashMap < String , Parameters > = HashMap :: new ( ) ;
53
53
sram. insert ( "pi" . to_string ( ) , Float ( PI ) ) ;
54
54
sram. insert ( "e" . to_string ( ) , Float ( E ) ) ;
55
55
match functions. cloned ( ) {
56
- None => Identifier ( "This function is unknown" . to_string ( ) ) ,
56
+ None => Identifier ( "@ This function is unknown" . to_string ( ) ) ,
57
57
Some ( mut f) => {
58
- let fs = f. get_mut ( s) ;
59
- let ( vec, ast) : ( & mut Vec < Ast > , & mut Ast ) = match fs {
58
+ let ( vec, ast) : ( Vec < Ast > , Ast ) = match f. get ( s) {
60
59
None => {
61
- return Identifier ( "This function is unknown" . to_string ( ) ) ;
60
+ return Identifier ( "@ This function is unknown" . to_string ( ) ) ;
62
61
}
63
- Some ( ( a, b) ) => ( a, b) ,
62
+ Some ( ( a, b) ) => ( a. clone ( ) , b. clone ( ) ) ,
64
63
} ;
65
64
66
65
let mut names = Vec :: new ( ) ;
@@ -88,7 +87,7 @@ pub fn exec(
88
87
. for_each ( |( name, param) | {
89
88
sram. insert ( name. to_string ( ) , param) ;
90
89
} ) ;
91
- interpret ( ast, & mut sram, & mut HashMap :: new ( ) )
90
+ interpret ( & ast, & mut sram, & mut f )
92
91
}
93
92
}
94
93
}
@@ -1299,7 +1298,7 @@ pub fn round(p: &Vec<Parameters>, ram: &Option<&mut HashMap<String, Parameters>>
1299
1298
pub fn norm (
1300
1299
p : & Vec < Parameters > ,
1301
1300
ram : & Option < & mut HashMap < String , Parameters > > ,
1302
- function : Option < & mut HashMap < String , ( Vec < Ast > , Ast ) > > ,
1301
+ function : & Option < & mut HashMap < String , ( Vec < Ast > , Ast ) > > ,
1303
1302
) -> Parameters {
1304
1303
if p. len ( ) < 1 {
1305
1304
return Null ;
@@ -1556,7 +1555,7 @@ pub fn inverse_matrix(
1556
1555
pub fn diff (
1557
1556
p : & Vec < Parameters > ,
1558
1557
ram : & Option < & mut HashMap < String , Parameters > > ,
1559
- function : Option < & mut HashMap < String , ( Vec < Ast > , Ast ) > > ,
1558
+ function : & Option < & mut HashMap < String , ( Vec < Ast > , Ast ) > > ,
1560
1559
) -> Parameters {
1561
1560
let color = match load ( ) {
1562
1561
Ok ( cfg) => load_config ( cfg) . general_color ,
@@ -1645,7 +1644,7 @@ pub fn diff(
1645
1644
p. to_string ( ) ,
1646
1645
vec ! [ Identifier ( "x" . to_string( ) ) ] ,
1647
1646
Some ( & mut c) ,
1648
- function ,
1647
+ Some ( & mut s ) ,
1649
1648
) ;
1650
1649
match param {
1651
1650
Identifier ( _) => Int ( 1 ) ,
@@ -1654,20 +1653,21 @@ pub fn diff(
1654
1653
y - 1 ,
1655
1654
z,
1656
1655
) ,
1656
+
1657
1657
Plus ( x, y) => other_add (
1658
- diff ( & vec ! [ * x. clone( ) ] , & Some ( & mut c) , Some ( & mut s) ) ,
1659
- diff ( & vec ! [ * y. clone( ) ] , & Some ( & mut c) , Some ( & mut s) ) ,
1658
+ diff ( & vec ! [ * x. clone( ) ] , & Some ( & mut c) , & Some ( & mut s) ) ,
1659
+ diff ( & vec ! [ * y. clone( ) ] , & Some ( & mut c) , & Some ( & mut s) ) ,
1660
1660
Some ( & c) ,
1661
1661
) ,
1662
1662
Mul ( x, y) => other_add (
1663
1663
mult (
1664
1664
* x. clone ( ) ,
1665
- diff ( & vec ! [ * y. clone( ) ] , & Some ( & mut c) , Some ( & mut s) ) ,
1665
+ diff ( & vec ! [ * y. clone( ) ] , & Some ( & mut c) , & Some ( & mut s) ) ,
1666
1666
Some ( & c) ,
1667
1667
) ,
1668
1668
mult (
1669
1669
* y. clone ( ) ,
1670
- diff ( & vec ! [ * x. clone( ) ] , & Some ( & mut c) , Some ( & mut s) ) ,
1670
+ diff ( & vec ! [ * x. clone( ) ] , & Some ( & mut c) , & Some ( & mut s) ) ,
1671
1671
Some ( & c) ,
1672
1672
) ,
1673
1673
Some ( & c) ,
@@ -1676,24 +1676,24 @@ pub fn diff(
1676
1676
Box :: from ( other_add (
1677
1677
mult (
1678
1678
* x. clone ( ) ,
1679
- diff ( & vec ! [ * y. clone( ) ] , & Some ( & mut c) , Some ( & mut s) ) ,
1679
+ diff ( & vec ! [ * y. clone( ) ] , & Some ( & mut c) , & Some ( & mut s) ) ,
1680
1680
Some ( & c) ,
1681
1681
) ,
1682
1682
mult (
1683
1683
mult ( Int ( -1 ) , * y. clone ( ) , Some ( & c) ) ,
1684
- diff ( & vec ! [ * x. clone( ) ] , & Some ( & mut c) , Some ( & mut s) ) ,
1684
+ diff ( & vec ! [ * x. clone( ) ] , & Some ( & mut c) , & Some ( & mut s) ) ,
1685
1685
Some ( & c) ,
1686
1686
) ,
1687
1687
Some ( & c) ,
1688
1688
) ) ,
1689
1689
Box :: from ( mult ( * y. clone ( ) , * y. clone ( ) , Some ( & c) ) ) ,
1690
1690
) ,
1691
1691
Call ( name, pst) => {
1692
- let prefix = diff ( & vec ! [ * pst. clone( ) ] , & Some ( & mut c) , Some ( & mut s) ) ;
1692
+ let prefix = diff ( & vec ! [ * pst. clone( ) ] , & Some ( & mut c) , & Some ( & mut s) ) ;
1693
1693
let call = diff (
1694
1694
& vec ! [ Identifier ( name) , * pst. clone( ) ] ,
1695
1695
& Some ( & mut c) ,
1696
- Some ( & mut s) ,
1696
+ & Some ( & mut s) ,
1697
1697
) ;
1698
1698
mult ( prefix, call, Some ( & c) )
1699
1699
}
@@ -1707,19 +1707,19 @@ pub fn diff(
1707
1707
z. clone ( ) ,
1708
1708
) ,
1709
1709
Plus ( x, y) => other_add (
1710
- diff ( & vec ! [ * x. clone( ) ] , & Some ( & mut c) , Some ( & mut s) ) ,
1711
- diff ( & vec ! [ * y. clone( ) ] , & Some ( & mut c) , Some ( & mut s) ) ,
1710
+ diff ( & vec ! [ * x. clone( ) ] , & Some ( & mut c) , & Some ( & mut s) ) ,
1711
+ diff ( & vec ! [ * y. clone( ) ] , & Some ( & mut c) , & Some ( & mut s) ) ,
1712
1712
Some ( & c) ,
1713
1713
) ,
1714
1714
Mul ( x, y) => other_add (
1715
1715
mult (
1716
1716
* x. clone ( ) ,
1717
- diff ( & vec ! [ * y. clone( ) ] , & Some ( & mut c) , Some ( & mut s) ) ,
1717
+ diff ( & vec ! [ * y. clone( ) ] , & Some ( & mut c) , & Some ( & mut s) ) ,
1718
1718
Some ( & c) ,
1719
1719
) ,
1720
1720
mult (
1721
1721
* y. clone ( ) ,
1722
- diff ( & vec ! [ * x. clone( ) ] , & Some ( & mut c) , Some ( & mut s) ) ,
1722
+ diff ( & vec ! [ * x. clone( ) ] , & Some ( & mut c) , & Some ( & mut s) ) ,
1723
1723
Some ( & c) ,
1724
1724
) ,
1725
1725
Some ( & c) ,
@@ -1728,12 +1728,12 @@ pub fn diff(
1728
1728
Box :: from ( other_add (
1729
1729
mult (
1730
1730
* x. clone ( ) ,
1731
- diff ( & vec ! [ * y. clone( ) ] , & Some ( & mut c) , Some ( & mut s) ) ,
1731
+ diff ( & vec ! [ * y. clone( ) ] , & Some ( & mut c) , & Some ( & mut s) ) ,
1732
1732
Some ( & c) ,
1733
1733
) ,
1734
1734
mult (
1735
1735
Mul ( Box :: from ( Int ( -1 ) ) , y. clone ( ) ) ,
1736
- diff ( & vec ! [ * x. clone( ) ] , & Some ( & mut c) , Some ( & mut s) ) ,
1736
+ diff ( & vec ! [ * x. clone( ) ] , & Some ( & mut c) , & Some ( & mut s) ) ,
1737
1737
Some ( & c) ,
1738
1738
) ,
1739
1739
Some ( & c) ,
@@ -1742,11 +1742,11 @@ pub fn diff(
1742
1742
) ,
1743
1743
1744
1744
Call ( name, pst) => {
1745
- let prefix = diff ( & vec ! [ * pst. clone( ) ] , & Some ( & mut c) , Some ( & mut s) ) ;
1745
+ let prefix = diff ( & vec ! [ * pst. clone( ) ] , & Some ( & mut c) , & Some ( & mut s) ) ;
1746
1746
let call = diff (
1747
1747
& vec ! [ Identifier ( name. to_string( ) ) , * pst. clone( ) ] ,
1748
1748
& Some ( & mut c) ,
1749
- Some ( & mut s) ,
1749
+ & Some ( & mut s) ,
1750
1750
) ;
1751
1751
mult ( prefix, call, Some ( & c) )
1752
1752
}
@@ -1757,7 +1757,7 @@ pub fn diff(
1757
1757
pub fn plot_fn (
1758
1758
p : & Vec < Parameters > ,
1759
1759
ram : & Option < & mut HashMap < String , Parameters > > ,
1760
- functions : Option < & mut HashMap < String , ( Vec < Ast > , Ast ) > > ,
1760
+ functions : & Option < & mut HashMap < String , ( Vec < Ast > , Ast ) > > ,
1761
1761
terminal : bool ,
1762
1762
) -> Parameters {
1763
1763
let color = match load ( ) {
0 commit comments