我有两个完全平行的例程。我希望Snowball执行它们并选择具有最长匹配的那个。
目前,我使用or
运行它们。这意味着执行第一个,如果失败则执行第二个。
我想为两个例程执行测试得到匹配的长度,将其存储在变量中,然后比较它们并执行具有最长匹配的例程。
是否有标准指令要做或更好的解决方案?
伪代码:
Verb_Suffixes
or
Noun_Suffixes
真实代码
//Suffixes for verbs
(
is_verb
(
(
(atleast 1 Suffix_Verb_Step1)
( Suffix_Verb_Step2a or Suffix_Verb_Step2c or next)
)
or Suffix_Verb_Step2b
or Suffix_Verb_Step2a
)
)
//Suffixes for nouns
or (
is_noun
(
try (
Suffix_Noun_Step2c2
or (not is_defined Suffix_Noun_Step1a (
Suffix_Noun_Step2a
or Suffix_Noun_Step2b
or Suffix_Noun_Step2c1
or next))
or (Suffix_Noun_Step1b (
Suffix_Noun_Step2a
or Suffix_Noun_Step2b
or Suffix_Noun_Step2c1))
or (not is_defined Suffix_Noun_Step2a)
or (Suffix_Noun_Step2b)
)
Suffix_Noun_Step3
)
)
答案 0 :(得分:0)
没有标准的指令,但可以通过在每个例程之后获取光标值来完成,而不是比较它们并返回它应该的位置:
$c = 0
do test (Verb_Suffixes $c = cursor)
do test (Noun_Suffixes ($c < cursor $c = cursor))
tomark c
($c < cursor $c = cursor)
表示if ($c < cursor) $c = cursor
对于test
,来自雪球手册的定义:
测试C
这确实命令C但没有推进c。其信号与C的信号相同,但在信号t之后,c被回退 它的旧价值。