kiyo_hikoのブログ

メモ+日記?

データの集合から条件を満たす部分集合の出現回数を求める

なんとなく思いついたメモル。思いついただけで試してない

例えば売り上げ10万以上あった連続する日付の出現回数カウントしてみる。
カウント部分は述語分けとくと応用力あってラクい

my @gts = qw/108000 99500 75600 112000 85600/;

sub countTerms {
  (2 < @_) or return;
  my ($fun, $car, @cdr) = @_;
  my ($n, $con) = $fun->($car) ? (1, 1) : (0, 0);
  for (@cdr) {! $con and ($con = $fun->($_)) and $n++}
  $n}

print ::countTerms sub {100000 <= $_[0]}, @gts;

型安全性の薄いLLは基本的に好きじゃないけど、こうしてみると式がブールのリテラルに評価できるってなると処理をただの整論理式に落とせてしまうからとても楽