華和梨の集合演算式というものの存在を初めて知ったので
06/01は集合演算記念日
YAYAで書いてみた
// 和集合演算関数 entry.plus { _entry1 = EVAL(_argv[0]) _entry2 = EVAL(_argv[1]) _ret = _entry1 foreach _entry2; _e { if !(ASEARCH(_e, _ret) >= 0) { _ret ,= _e } } _ret } // 差集合演算関数 entry.minus { _entry1 = EVAL(_argv[0]) _entry2 = EVAL(_argv[1]) _ret = IARRAY() foreach _entry1; _e { if !(ASEARCH(_e, _entry2) >= 0) { _ret ,= _e } } _ret } // 積集合演算関数 entry.product { _entry1 = EVAL(_argv[0]) _entry2 = EVAL(_argv[1]) _ret = IARRAY() foreach _entry1; _e { if ASEARCH(_e, _entry2) >= 0 { _ret ,= _e } } _ret } /** * 和集合を使った例 */ foo { _plus = entry.plus('野菜', '果物') _ret = '' foreach _plus; _p { _ret += _p + ', ' } '\0\_q' + _ret + '\e' // => \0\_qきゅうり, なす, スイカ, トマト, りんご, みかん, なし, \e } 野菜 : array { 'きゅうり' 'なす' 'スイカ' 'トマト' } 果物 : array { 'りんご' 'みかん' 'なし' 'スイカ' 'トマト' }
あまりスマートじゃないですね。
EVALは邪道。