1: #line 1977 "./lpsrc/flx_regress.pak"
2:
3: open List;
4:
5:
6: fun eq[T]: T * T -> bool = "$1==$2";
7:
8: fun eql[T] (x:T) (y:T):bool => eq(x, y);
9:
10: proc print[T]:T="std::cout << $1;";
11:
12:
13:
14:
15:
16:
17: class DLL_List[T] {
18: var next : DLL_List[T];
19: var prev : DLL_List[T];
20: var item : T;
21:
22: ctor (n:T)
23: {
24: item = n;
25: }
26:
27: proc add_Link (nxt:DLL_List[T])
28: {
29: nxt.prev = this;
30: nxt.next = next;
31: nxt.next.prev = nxt;
32: next = nxt;
33: }
34:
35: proc pr_list()
36: {
37: proc aux(head:DLL_List[T], been: list[DLL_List[T]])
38: {
39: print "Listn(";
40: print[T] item;
41: print ")->";
42: if (mem (eql this) been) == false do
43: aux (next, Cons[DLL_List[T]](this, been));
44: else
45: print "Loop\n";
46: done;
47: }
48: aux(this,Empty[DLL_List[T]]);
49: }
50: }
51: var lst1 <- new DLL_List[int](11);
52: var lst2 <- new DLL_List[int](11);
53:
54: lst1.pr_list();
55: endl;
56: var xx = (eql lst1);
57: print (xx lst1);
58: endl;
59: print (xx lst2);
60: endl;
61: