華和梨の集合演算式というものの存在を初めて知ったので
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は邪道。