Draw arrows to build models

Revision as of 03:18, 23 September 2008 by Max (talk | contribs) (Correct and expanded)

These new and improved features let you build and modify model expressions just by drawing arrows between variables -- without typing:

Draw arrow from index into Table node
Suppose variable A defined as a Table (or a ProbTable, DetermTable) and you draw an arrow from Index I to node A: If I is not an index of A, it asks if you want to add I as an extra dimension of A. If yes, it adds I as a dimension, and copies the existing array value of A into each new element over I. If I is already an index of A, it asks if you want to remove it, and warn that doing so will lose data. If yes, it the new definition of A is the first slice over I of the old array.
Redraw or delete an arrow
If you draw an arrow from variable A to B and A is already in the definition of B, it asks if you want to remove A from the Definition of B. If yes, it puts comment brackets around A, {A}, in the definition of B, so you can see what was removed. The resulting definition will often not parse, so the node for B becomes cross-hatched. It does the same if you delete an arrow -- select the arrow and press the "delete" key.
Redraw a deleted arrow
If you delete an input to B as above, and then redraw an arrow from A to B, it restores the original definition by removing the comment brackets {A} around the variable, A.
Arrow into a list
If you draw an arrow from A to B, and B contains a list, enclosed in square brackets, such as
 B := Sum([X])
  • It adds A into the list (if it wasn't already in it)"
  B := Sum([X, A]) 
  • Or if you draw an arrow from a variable X into B that is already in the list, it removes the origin variable from the list:
 B := Sum([A])
Repeated parameters
If B uses a function whose first parameter is Repeated (ellipsis or "..."), it behaves much the same as an explicit list in square brackets. For example,
Function ObjList(vars: ... Variable)
B := Objlist(X)
   draw an arrow from A to B
B := Objlist(X, A)

Note: "Repeated" usually means one or more elements. If you remove the last input by redrawing an arrow from A to B, it replaces it by "expr", which will not parse. If you want zero or more elements, you should qualify the parameter with Optional along with "...", for example:

 Function ObjList(vars: ... Optional Variable)

By using these methods, you can define functions that let you wire together complex models simply by drawing arrows between nodes -- without having to edit their definitions explicitly.

Comments


You are not allowed to post comments.