0

我对 Mathematica 的 SimilarityRules 定义有疑问(例如 SequenceAlignment 函数)。所以帮助中心清楚地代表

“SimilarityRules -> {{a_, a_} -> 1, {a_, b_} -> -1},任何一对相同元素的得分为 +1,任何不匹配、删除或插入。”

好的,我明白了,但是如果我想为不匹配给出不同的分数,而为 indeles 给出不同的分数呢?我试过了:

SimilarityRules -> {{a_, a_} -> 3, {{a_, b_} && {{a_!=""} && {b_ != ""}}} -> -8} 和许多其他组合 {} , && 位置,但它似乎没有帮助。任何建议,这只是我正在做的一个错字,还是这样定义它是一个相当愚蠢的想法?

4

1 回答 1

0

编辑.. 抱歉回答得太快:SequenceAlignment 似乎不适用于此类条件.. 我建议您在mathematica.stackexchange.com 上询问。我还建议您提供输入和预期输出的示例,以阐明您要完成的工作。

你的问题真的是关于模式测试..这里有两种方法可以用模式做你想做的事情..

{{"A", "A"}, {"A", "B"}, {"A", ""}} /. {
         {a_, b_} /; a == b -> 1,
         {a_, b_} /; (a != b && b != "" && a != "") -> -8,
         {a_, b_} /; (a != b ) -> -1
   }

{{"A", "A"}, {"A", "B"}, {"A",  ""}} /. {
   {_, _}?((#[[1]] == #[[2]]) &) -> 1,
   {_, _ }?((#[[1]] != #[[2]] && #[[1]] != "" && #[[2]] !=  "") &) -> -8,
   {_, _}?((#[[1]] != #[[2]]) &) -> -1
      }

这些都在做同样的事情并产生 {1,-8,-1} 基本上语法略有不同,请参阅手册中的Pattern TestCondition

于 2013-07-29T18:57:51.930 回答