日本語 · English

shift — 単位 n 個ぶん動かす

分類: 点変換(本体層 core) / シグネチャ: shift(n, unit: U) : Stream -> Stream / 名は確定(spec §5.4)

意味

各点を、単位 Un 個ぶん動かす。方向は符号で表し、方向語(back: 等)は採らない——n を 変数化したとき方向が語と符号に二重化するため(ADR-21)。

U は premise 相対の軸名で、二つの顔がある:

月末の 3 営業日前(代表例 §7.1。1 月: 月末 1/31 土 → roll で 1/30 金 → 3 営業日戻って 1/27 火):

# eval: 2026-01-01..2026-02-01
@JP
monthEnd |> roll(Preceding, on: bizDay) |> shift(-3, unit: bizDay)
#=> 2026-01-27
#~> 範囲外 2026-01-01..2026-01-02(holidays2026 covering 2026-01-01..2026-12-31, asof 2026-01-05)

窓単位はオフセット保存——八十八夜(立春の瞬間 2/4 05:02 の 87 日後)は時刻ごと動く:

# eval: 2026-01-01..2026-06-01
@JP
sekki = [2026-01-05T17:23, 2026-01-20T10:45, 2026-02-04T05:02]
  covering: 2026..2026
  labels: [小寒, 大寒, 立春]
sekki |> filter(s => sekki(s) == 立春) |> shift(+87, unit: day)
#=> 2026-05-02T05:02
#~> 範囲外 2026-01-01..2026-03-29(sekki covering 2026-01-01..2026-12-31)

日付に落とすなら後段に snapTo(day) を足す。

落とし穴

関連

rollsnapTostride(動かすのでなく間引く)・ADR-21。