-
Notifications
You must be signed in to change notification settings - Fork 90
Mutual definitions with records
CodingUnit edited this page Nov 30, 2011
·
2 revisions
Mutual Definitions with records
-
Category: Defining Types
-
Link: see Recursive definitions with variant for example of use variant as recursive collections
-
Description: Records can be defined simultaneously to give mutually recursive collections of types.
using System;
using System.Console;
using Nemerle;
// define mutually recursive collections with the class and Record macro
[Record]
class Airport
{
public Name : string;
public Connections : list[AirportConnection];
public override ToString() : string
{
$"Name: $Name; Connections: $Connections"
}
}
variant AirportConnection
{
| Connection {Airport : Airport;}
| None
public override ToString() : string
{
match (this)
{
| Connection(a) => $"Airport: $a"
| _ => "no connection"
}
}
}
module MutualDefinition2
{
Main() : void
{
def lax = Airport("Los Angeles Intl Airport", [AirportConnection.None()]);
def dtw = Airport(name = "Detroit Metro Wayne County", connections = [AirportConnection.None()]);
def sea = Airport("Seattle-Tacoma Intl Airport", connections = [AirportConnection.Connection(dtw), AirportConnection.Connection(lax)]);
WriteLine(lax);
WriteLine(dtw);
WriteLine(sea);
}
}
Name: Los Angeles Intl Airport; Connections: [no connection]
Name: Detroit Metro Wayne County; Connections: [no connection]
Name: Seattle-Tacoma Intl Airport; Connections: [Airport: Name: Detroit Metro Wayne County; Connections: [no connection], Airport: Name: Los Angeles Intl Airport; Connections: [no connection]]
[Copyright ©](Terms of use, legal notice)