take — 先頭 n 点の打ち切り(COUNT 相当)
分類: ストライド(本体層 core・選択子と別族) / シグネチャ: take(n, from:) : Stream -> Stream / 名は確定(ADR-49)
意味
from: 以後(from: の点を含む)の入力点のうち、先頭 n 点だけを通す。stride が
「点で数えて間引く」なら、take は「点で数えて打ち切る」——RRULE の COUNT 相当を、除外や
振替と合成できる形で持つ(ADR-49)。
起点 from: は必須(ADR-31。stride 一族共通の規則)。出力は(入力・n・from:)だけの純関数で、
評価範囲はその外延の切り取り窓——範囲を狭めても数え直さない。
例
全 5 回の講座。休講が出ても合計 5 回になる(除外→数える、の合成順が補充を生む):
# eval: 2026-04-01..2026-08-01
@JP
lessons = everyDay |> filter(d => weekday(d) == Tue)
cancelled = [2026-04-14, 2026-05-05] covering: 2026-04-01..2026-07-01
(lessons \ cancelled) |> take(5, from: 2026-04-01)
#=> 2026-04-07 2026-04-21 2026-04-28 2026-05-12 2026-05-19
RRULE の COUNT=5+EXDATE 2 件は除外前の生成集合を数えるため 3 回に痩せる(rrule.js
#456 の報告そのもの)。take には「除外前」という概念が式に存在しない——5/12・5/19 へ自然に
補充される。
落とし穴
- 窓付き入力は静的エラー。「毎月最初の 3 営業日」を
within(month) |> take(3, …)と書いては いけない(take は通し数え=1 月の 3 点で止まる)。窓ごとの先頭 N はwithinの 後のnth(第 N)かordinalInの述語で。 - 期間限定は take の守備ではない。「6/29〜12/30 の毎日」は評価範囲の分離(定義は無時制・
評価は有界範囲)が正道——
take(180)は日数の暗算を式に埋める誤用。 take(0)・負値は静的エラー(stride(0)の「黙って空」根絶と同規約。ADR-38 判断 12)。- 第 n 点より後は正当な空(註釈なし——ADR-37 判断 2)。逆に covering が第 n 点より前で 尽きると、以後すべてに範囲外註釈が立つ(順位が暫定であることの可観測化。休講データの covering の尾は運用上つねに「今」の近傍にある——註釈が消えないのは正常で、覆域を延ばすのが正しい応答)。
- 「後ろから N 個」は無い(終端起点の数えは covering 依存になるため導入しない。ADR-49)。
関連
stride(間引く)・strideBy(幅で刻む)・nth(窓相対の
「第 N」=双対)・filter・ADR-31/38/49。