node dispatcher (credit:int) returns (gum:bool); let /* PRE turns the program causal */ gum = (0 -> pre credit) >= 15; /* true when ((0 -> pre credit) >= 15); */ /* it is rejected by the lustre compiler */ tel; node accumulator (nickel,dime,gum:bool) returns (credit:int); var nickelamount,dimeamount,gumamount:int; let nickelamount = if nickel then 5 else 0; dimeamount = if dime then 10 else 0; gumamount = if gum then -15 else 0; credit = (0 -> pre credit) + nickelamount + dimeamount + gumamount; /* PRE enables memory */ tel; node vendingMachine (nickel,dime:bool) returns (gum:bool); var credit:int; let credit = accumulator(nickel, dime, gum); gum = dispatcher(credit); tel;