Difference between revisions of "Draw arrows to build models"
(new page copied and edited from release notes) |
(Correct and expanded) |
||
Line 1: | Line 1: | ||
These new and improved features let you build and modify model expressions just by drawing arrows between variables -- without typing: | 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]) | B := Sum([X]) | ||
− | draw an arrow from | + | * It adds A into the list (if it wasn't already in it)" |
− | B := Sum([ | + | 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) | |
− | |||
− | |||
− | |||
− | Function ObjList(vars: ... | ||
B := Objlist(X) | B := Objlist(X) | ||
draw an arrow from A to B | draw an arrow from A to B | ||
B := Objlist(X, A) | 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. |
Revision as of 03:18, 23 September 2008
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
Enable comment auto-refresher