File: installAssignmentMethod-doc.m2

package info (click to toggle)
macaulay2 1.25.05%2Bds-2
  • links: PTS, VCS
  • area: main
  • in suites: experimental
  • size: 172,152 kB
  • sloc: cpp: 107,824; ansic: 16,193; javascript: 4,189; makefile: 3,899; lisp: 702; yacc: 604; sh: 476; xml: 177; perl: 114; lex: 65; python: 33
file content (83 lines) | stat: -rw-r--r-- 3,254 bytes parent folder | download | duplicates (2)
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
document { 
    Key => {
	"installing assignment methods",
	 installAssignmentMethod,
	  (installAssignmentMethod,Symbol,HashTable,Option),
	  (installAssignmentMethod,Symbol,HashTable,HashTable,Option),
	  (installAssignmentMethod,Symbol,HashTable,Function),
	  (installAssignmentMethod,Symbol,HashTable,HashTable,Function)},
     Headline => "install methods assignment to the value of an operator",
     Usage => "installAssignmentMethod(op,X,Y,f)",
     Inputs => {
	  "op" => Keyword => "the symbol for a binary operator",
	  "X" => Type => "the type of the left-hand operand",
	  "Y" => Type => "the type of the right-hand operand",
	  "f" => Function => "the method function that will perform the assignment"
	  },
     Consequences => { { "If the operator to be used is ", TT "**", ", say, then ", TT "op", " should be ", TT "symbol **", ".
	       After installing the assignment method, assignments of the form ", TT "x**y=v", " will be
	       handled by evaluating ", TT "f(x,y,v)", "." }},
     PARA { "If the operator is a unary operator, just omit ", TT "X", " and its comma." },
     PARA { "We illustrate this function by defining a type of mutable list whose elements can be both extracted and replaced 
	  using the operator ", TT "_", ".  We also install a method for ", TO "net", " so objects of the class can be printed."
	  },
     EXAMPLE lines ///
	  M = new Type of MutableList
	  net M := m -> peek m
	  M _ ZZ := (x,i) -> x#i
	  installAssignmentMethod(symbol _, M, ZZ, (x,i,v) -> x#i = v);
	  y = new M from (a..z)
	  y_12
	  y_12 = foo
	  y
	  y_12
     ///,
     "For sample applications of this facility, see ", TO ((symbol _,symbol =),Symbol,Thing), " and 
     ", TO ((symbol _,symbol =),MutableMatrix,Sequence), ".",
     SeeAlso => {MutableList, (symbol #,BasicList,ZZ)},
     Caveat => { "The syntax involved here is not pleasant, so we may change it to something briefer, something involving yet another
	  assignment operator, distinct from ", TT "=", " and ", TT ":=", "." }
     }

document {
     Key => ((symbol _,symbol =),Symbol,Thing),
     -- this node documents the assignment method for x_a=v where x is a symbol
     Usage => "x_a = v",
     Headline => "assignment to an indexed variable",
     Inputs => { "x", "a", "v" },
     Outputs => { "v" },
     Consequences => { 
	  { "the indexed variable ", TT "x_a", " is assigned the value ", TT "v", "." }
	  },
     EXAMPLE lines ///
     	  x_a
          x_a = b
	  x_a
	  x_c
	  x_c = d
	  x_c
     ///,
     "The source code explains how it works, behind the scenes.",
     PRE ("    " | net code {(symbol _,Symbol,Thing),((symbol _,symbol =),Symbol,Thing)}),
     EXAMPLE lines ///
	  peek x
     ///,
     SeeAlso => { IndexedVariable },
     }

document {
     Key => ((symbol _,symbol =),MutableMatrix,Sequence),
     Headline => "assignment to an element of a mutable matrix",
     Usage => "f_(i,j) = r",
     Inputs => { "f", Nothing => { "a pair ", TT "(i,j)", " of integers" }, "r" },
     Consequences => {
	  { "the ", TT "(i,j)", " entry of ", TT "f", " is replaced by the ring element ", TT "r" }
	  },
     EXAMPLE lines ///
          R = QQ[a..d]
	  f = mutableMatrix vars R
	  f_(0,2)
     	  f_(0,2) = 7*c^2
     	  f
     ///
     }