3.27 iif : アイテム比較による選択

書式

$obj$.iif(zdd1,zdd2) $\rightarrow $ $zdd3$

説明

$zdd1$から$obj$に含まれるアイテム集合の項を選択し、 $zdd2$から$obj$に含まれないアイテム集合の項を選択し、 それら選択された項で構成されるZDDオブジェクト$zdd3$を返す。 $obj$に含まれるアイテム集合の重みは動作に影響しない。

例1: 基本例

> require 'zdd'
> a=ZDD::itemset("a")
> b=ZDD::itemset("b")
> c=ZDD::itemset("c")
> d=ZDD::itemset("d")

# iifの第1引数の各項から、(a+b)に含まれるアイテム集合a,bの項2a,3bを選択し、
# iifの第2引数の各項から、(a+b)に含まれるアイテム集合a,bの項を除外した項8c,9dを選択する。
> f=(a+b).iif(2*a+3*b+4*c+5*d,6*a+7*b+8*c+9*d)
> f.show
 2 a + 3 b + 8 c + 9 d

# 典型的には比較演算子と組み合わせて以下のように利用する。
> x=3*a+2*b+2*c
> y=2*a+2*b+4*c
> x.show
 3 a + 2 b + 2 c
> y.show
 2 a + 2 b + 4 c

# xとyを比較し、yより大きい重みを持つ項をxから、それ以外をyから選ぶ。
# x>yの結果はaであり、第1引数xから3aが選択され、
# その他のアイテム集合は第2引数yから2b,4cが選ばれる。
> r1=(x>y).iif(x,y)
> r1.show
 3 a + 2 b + 4 c

# xとyを比較し、yより大きい重みを持つ項をxから選ぶ。\\
# 上の例と同様であるが、第2引数が0なのでa以外のアイテム集合は何も選択されない。\\
> r2=(x>y).iif(x,0)
> r2.show
 3 a

# xとyを比較し、yと同じ重みを持つ項をxから選ぶ。
> r3=(x==y).iif(x,0)
> r3.show
 2 b

関連

==, $<$, $<=$, $>$, $>=$, ne? : 各種比較演算