記事一覧

YAYAで集合演算

華和梨の集合演算式というものの存在を初めて知ったので

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は邪道。