19.6.80. Match(查找对象匹配)
语法 :
Match ( SearchPackage, Op1, MatchObject1, Op2, MatchObject2, StartIndex ) => Ones \| Integer
参数
SearchPackage 被求值为一个包对象,并被视为一维数组。每个包元素都必须求值为整数、字符串或 buffer 之一。未初始化的包元素以及不能求值为整数、字符串或 buffer 的元素将被忽略。Op1 和 Op2 是匹配运算符。MatchObject1 和 MatchObject2 是要匹配的对象,它们各自都必须求值为整数、字符串或 buffer 之一。StartIndex 是 SearchPackage 中的起始索引。
说明
从 StartIndex 指示的索引值开始(0 是第一个元素),对包的每个元素执行比较。如果与之比较的 SearchPackage 元素称为 P[i],则比较为:
If (P[i] Op1 MatchObject1) and (P[i] Op2 MatchObject2) then Match => i is returned.
如果比较成功,则返回成功元素的索引;否则,返回常量对象 Ones。MatchObject 的数据类型决定了包元素所需的类型。如有必要,包元素将被隐式转换以匹配 MatchObject 的类型。如果隐式转换因任何原因失败,则忽略该包元素(不匹配)。
Op1 和 Op2 的取值及含义列于下表中。
表 19.35 Match Term 运算符含义
| 运算符 | 编码 | 宏 |
|---|---|---|
| TRUE - 不关心,总是返回 TRUE | 0 | MTR |
| EQ - 如果 P[i] == MatchObject 则返回 TRUE | 1 | MEQ |
| LE - 如果 P[i] <= MatchObject 则返回 TRUE | 2 | MLE |
| LT - 如果 P[i] < MatchObject 则返回 TRUE | 3 | MLT |
| GE - 如果 P[i] >= MatchObject 则返回 TRUE | 4 | MGE |
| GT - 如果 P[i] > MatchObject 则返回 TRUE | 5 | MGT |
示例
以下是 Match 的一些使用示例:
Name (P1,
Package () {1981, 1983, 1985, 1987, 1989, 1990, 1991, 1993, 1995, 1997, 1999, 2001}
)
// match 1993 == P1[i]
Match (P1, MEQ, 1993, MTR, 0, 0) // -> 7, since P1[7] == 1993
// match 1984 == P1[i]
Match (P1, MEQ, 1984, MTR, 0, 0) // -> ONES (not found)
// match P1[i] > 1984 and P1[i] <= 2000
Match (P1, MGT, 1984, MLE, 2000, 0) // -> 2, since P1[2]>1984 and P1[2]<=2000
// match P1[i] > 1984 and P1[i] <= 2000, starting with 3rd element
Match (P1, MGT, 1984, MLE, 2000, 3) // -> 3, first match at or past Start