程序、数据和结果之间三元关系的有意义的字段名称?
A meaningful field name for the ternary relation between program, data, and result?
我有代表软件程序的签名:
sig Program {
???: Data -> Result
}
每个程序将输入数据映射到输出结果。所以,存在三元关系(Program -> Data -> Result)。
注意字段名称的问号。您建议使用什么字段名称?
IO这个名字挺好听的:
sig Program {
IO: Data -> Result
}
那我就可以写出优雅的表达方式如:
all p: Program | p.IO ...
但是,名称 IO 仅对(数据 -> 结果)有意义,对(程序 -> 数据 -> 结果)没有意义。
我卡住了。你有什么建议?
恕我直言,字段的名称大部分时间都与声明它们的签名相关联,这确实是一件好事。
如果您查看 Alloy 中的随机示例模块(例如 module examples/puzzle/farmer
),您会发现字段并不总是在其各自的签名之外具有意义:
sig State {
near: set Object,
far: set Object
}
在这里,远近并没有真正传达出它们 "temporal" 性质的暗示。
长话短说,为了简洁起见,我会坚持使用 io。
的确,我更喜欢 :
- 字段、事实、预测、断言、参数,.. 小写
- 要大写的签名
- 枚举(outer let),以及大写的单例签名
我有代表软件程序的签名:
sig Program {
???: Data -> Result
}
每个程序将输入数据映射到输出结果。所以,存在三元关系(Program -> Data -> Result)。
注意字段名称的问号。您建议使用什么字段名称?
IO这个名字挺好听的:
sig Program {
IO: Data -> Result
}
那我就可以写出优雅的表达方式如:
all p: Program | p.IO ...
但是,名称 IO 仅对(数据 -> 结果)有意义,对(程序 -> 数据 -> 结果)没有意义。
我卡住了。你有什么建议?
恕我直言,字段的名称大部分时间都与声明它们的签名相关联,这确实是一件好事。
如果您查看 Alloy 中的随机示例模块(例如 module examples/puzzle/farmer
),您会发现字段并不总是在其各自的签名之外具有意义:
sig State {
near: set Object,
far: set Object
}
在这里,远近并没有真正传达出它们 "temporal" 性质的暗示。
长话短说,为了简洁起见,我会坚持使用 io。
的确,我更喜欢 :
- 字段、事实、预测、断言、参数,.. 小写
- 要大写的签名
- 枚举(outer let),以及大写的单例签名