annotate pair.rhope @ 75:0083b2f7b3c7

Partially working implementation of List. Modified build scripts to allow use of other compilers. Fixed some bugs involving method implementations on different types returning different numbers of outputs. Added Fold to the 'builtins' in the comipler.
author Mike Pavone <pavone@retrodev.com>
date Tue, 06 Jul 2010 07:52:59 -0400
parents 76568becd6d6
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1 /*
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
2 This example program defines a new object type Pair with two properties and one worker
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
3 */
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
4
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
5 //We're importing extendlib for access to Pretty Print
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
6 Import extendlib.rhope
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
7
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
8 //Blueprint statements define new object types
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
9 Blueprint Pair
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
10 {
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
11 //We define two fields here First and Second
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
12 First
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
13 Second
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
14 }
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
15
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
16 //There's nothing special about worker's named New. It's just a convention.
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
17 New@Pair[first,second:out]
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
18 {
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
19 //The Build worker creates a new unpopulated object of a given type based on its blueprint
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
20 out <- [[Build["Pair"]
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
21 //Here we set the properties of the new object, First and Second, to the values passed to the constructor
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
22 ]First <<[first]
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
23 ]Second <<[second]
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
24 }
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
25
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
26 //Rhope has no concept of operators; everything is a worker. Here we define a worker for adding two Pairs
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
27 +@Pair[left,right:sum]
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
28 {
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
29 //Get the sum of the two fields
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
30 first <- [[left]First >>] + [[right]First >>]
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
31 second <- [[left]Second >>] + [[right]Second >>]
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
32 //Return a modified Pair
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
33 sum <- [[left]First <<[first]]Second <<[second]
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
34 }
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
35
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
36 Main[]
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
37 {
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
38 a <- New@Pair[2,3]
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
39 b <- New@Pair[5,-1]
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
40 //Pretty Print can print out user defined objects and most builtin objects in a readable format
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
41 Pretty Print[[a]+[b], ""]
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
42 }