【发布时间】:2023-03-15 13:59:01
【问题描述】:
我想声明一个所有状态的图,其中边缘表示连续状态。我认为我正在尝试做的事情可能被称为“打结”(虽然不确定)。它没有像我预期的那样工作,我有几个问题。
首先,我想要一个包含字符串名称和连续状态列表的 State 类型。但是这个声明给出了编译器错误“...立即循环引用...”:
type State = string * (State list)
这种方式有效:
type State(name:string, contigs: (State list)) =
let name = name
let contigs = contigs
但实际上并不需要为成员命名。一个元组很好。我怎样才能使这种简洁的语法起作用?
其次,以下代码尝试声明应该是三个连续状态图(HI 和 AK 是由单个节点组成的图,所有剩余状态构成最后一个图),然后是所有节点的列表。 (为简洁起见,我实际上只在这里声明了少数几个州):
let rec hi = State("hi", [])
and mo = State("mo", [il ia])
and il = State("il", [mo])
and ia = State("ia", [mo])
and states = [hi,mo,il,ia]
这会产生各种错误,包括“mo 最终将作为它自己定义的一部分进行评估”和“表达式应该具有类型 'a->'b 但这里有类型 State”。我认为 'rec' 和 'and' 关键字会允许这个工作。我可以定义这个自引用图吗?如果有,怎么做?
【问题讨论】:
标签: f# circular-reference