Coronavirus (Covid-19): Latest updates and information
Skip to main content Skip to navigation

Lab 6 - Implementing the DMT in EDEN

The instructions for this lab can be found at

The lab was compiled by Antony Harfield, Russell Boyatt and Charlie Care for CS405 in 2006. The resources for the lab can be found in the directory:

/dcs/emp/empublic/teaching/cs405-2006/lab5/

which has been linked from the directory

/dcs/emp/empublic/teaching/cs405-2012/lab6/

In 2006, this lab followed four previous labs dedicated to traditional EDEN (at that stage no other tool was used in the labs). For that reason, it may be somewhat challenging. This README provides some additional information that you may find helpful.

1. Section 1 of the labsheet relates to Wong's Dependency Modelling Tool. There are two version of this - I have typically demonstrated an earlier version (dmt072.jar), rather than the later version (dmt075.jar) referred to here. Wong's DMT is written in java. The rest of the labsheet is devoted to guiding you through the construction of a DMT implemented solely in EDEN.

2. Note that in Section 2, where definitions of the observables 'nodes' and 'links' are displayed, you should in fact use the names by which these observables are referenced in the text, viz. graph_nodes and graph_links. (In passing, you may note that there is a so-called Virtual Agency feature of EDEN that was introduced to support the use of the distributed form of EDEN - "dtkeden". By entering

>>graph

into the EDEN Input Window, you establish a context in which observable names such as 'nodes' and 'links' actually refer to observables graph_nodes and graph_links. To return to the normal input context, you can then enter

>>

The use of this feature, which was necessary in using dtkeden, is otherwise deprecated. The motivation for it nevertheless becomes clear when you have some experience of the problems of replicating patterns of dependency in a script!)

3. Note that the function symboldetail() takes as its argument either an observable name as a string - as in "obsname", or a pointer to the observable - as in &obsname. You can inspect the value returned by the symboldetail() function by using

writeln(symboldetail(&obsname));

etc. (This feature of EDEN is used in the syminfo tool mentioned in Lab 2.) It should also be noted that symboldetail() can't be used on the RHS of a definition to maintain a dependency - in this respect, it is a somewhat anomalous EDEN function.

4. The technical work with EDEN here is not as straightforward as the more characteristic 'modelling with definitive scripts' that was considered in Labs 1, 2 and 3. It is useful nonetheless, as your work with scripts does require some supporting more traditional programming in EDEN such as is needed to add new functions and actions. In your coursework, you should keep in mind the idea of definitive scripts as providing the environment for agency from various perspectives, and making use of user-defined functions to supply operators on the RHS of definitions. EDEN actions (or 'triggered procedures') are then used to automate agency where appropriate. In this lab, you are learning some of the complementary technical skills that you will find useful in supporting this vision.

5. Note that, if you are struggling to carry out the Tasks unaided, you can cheat! The resources for the lab include a file that provides solutions to most of the tasks, and you may find it instructive to tackle the tasks by studying the solutions.