日本語 · English

shift — 単位 n 個ぶん動かす

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

roll と shift の違い。上は 10/25(日曜)が営業日の軸に無いので、Preceding なら 10/23、Following なら 10/26 へ寄る。下は 9/30 から営業日の目盛りで 3 つ戻ると、土日を数えずに 9/25 に着く。

意味

各点を、単位 U で n 個ぶん動かす。方向は符号で表し、方向語(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) を足す。

落とし穴

関連

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