diff options
| author | eunhhu <[email protected]> | 2026-09-26 11:35:20 +0100 |
|---|---|---|
| committer | eunhhu <[email protected]> | 2026-09-26 11:35:20 +0100 |
| commit | 92f5545efb7aab0b3a4a4c73a65364ef519cd5d4 (patch) | |
| tree | 10633f366478737d6bb25286ac074e7f4ded7b20 /docs | |
| parent | 6ca1a1e598b9aa2f0b8f3947c27883b45b366346 (diff) | |
| download | pure-92f5545efb7aab0b3a4a4c73a65364ef519cd5d4.tar.gz pure-92f5545efb7aab0b3a4a4c73a65364ef519cd5d4.zip | |
Add first: the index of the first item a block keeps
A fifth fold kind, first, runs its block over the items until one leaves
a non-zero number and pushes that item's index, typed as an index of the
list, or fails not_found when none does. Handlers can so find the item to
change by a condition, as a message naming a task by its title would.
Diffstat (limited to 'docs')
| -rw-r--r-- | docs/design/008-module-format.md | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/docs/design/008-module-format.md b/docs/design/008-module-format.md index 7ced5e7..ab42542 100644 --- a/docs/design/008-module-format.md +++ b/docs/design/008-module-format.md @@ -96,7 +96,7 @@ v5는 값을 가진 채 합류하는 분기(조건식)와, 리스트 항목마� | 62 | ROW | → i | 열이 계산하는 행. `인자`는 그 표의 리스트 상태. 열 전용 | | 63 | PICK | … → … v | `인자`개 아래의 값을 복사해 올린다(0이면 맨 위). 타입과 대상도 그대로 | | 64 | SLIDE | … v → v | 맨 위 값 아래의 `인자`개(1 이상)를 버린다 | -| 65 | FOLD | → n | 집계. `인자`의 비트 0–7은 종류(0 count, 1 sum, 2 max, 3 min), 8–15는 리스트 상태, 16–31은 뒤따르는 블록의 길이 L. 그 L개 명령이 항목마다 그 리스트의 열처럼 돈다(`ROW`가 항목). count는 블록이 남긴 수가 0이 아닌 항목을 세고, sum·max·min은 블록이 남긴 값과 포함 여부(0이 아니면 포함)로 계산한다. 포함된 항목이 없으면 count·sum은 0, max·min은 `not_found` | +| 65 | FOLD | → n 또는 i | 집계. `인자`의 비트 0–7은 종류(0 count, 1 sum, 2 max, 3 min, 4 first), 8–15는 리스트 상태, 16–31은 뒤따르는 블록의 길이 L. 그 L개 명령이 항목마다 그 리스트의 열처럼 돈다(`ROW`가 항목). count는 블록이 남긴 수가 0이 아닌 항목을 세고, sum·max·min은 블록이 남긴 값과 포함 여부(0이 아니면 포함)로 계산한다. first는 블록이 0이 아닌 수를 남긴 첫 항목의 인덱스(그 리스트의 인덱스)이고 거기서 멈춘다. 포함된 항목이 없으면 count·sum은 0, max·min·first는 `not_found` | `f`는 레코드 필드의 타입(수 또는 text)이다. 수 연산 결과가 유한하지 않으면 실패한다. 실패하면 그 이벤트의 모든 핸들러가 한 일이 취소된다. @@ -119,8 +119,8 @@ v5는 값을 가진 채 합류하는 분기(조건식)와, 리스트 항목마� 합류 지점에는 모든 경로가 같은 스택(높이, 타입, 커서·인덱스의 대상)을 가져와야 한다. 그래서 조건식처럼 값이 합류를 건너가도 타입이 섞이지 않는다. 앞에 남은, 값을 가진 합류는 한 번에 8개까지다. 모든 명령에 도달할 수 있어야 하고, 핸들러는 값을 남기지 않으며 보기와 열은 자기 타입의 값 하나를 남긴다. -- 집계(FOLD)의 블록은 그 리스트의 열로 따로 검증한다. 읽기만 하고(효과는 거절), count는 수 하나, sum·max·min은 수 둘을 - 남긴다. 블록 안에 다시 집계를 둘 수 없다(비용 상한). 둘레의 블록은 FOLD와 그 블록을 명령 하나로 보고, 앞의 분기가 +- 집계(FOLD)의 블록은 그 리스트의 열로 따로 검증한다. 읽기만 하고(효과는 거절), count·first는 수 하나, sum·max·min은 + 수 둘을 남긴다. first의 결과는 그 리스트의 인덱스 타입이다. 블록 안에 다시 집계를 둘 수 없다(비용 상한). 둘레의 블록은 FOLD와 그 블록을 명령 하나로 보고, 앞의 분기가 블록 안으로 들어오지 못한다. 블록은 둘레 블록 안에 끝나야 한다. - 걸러진 표의 필터 블록은 그 리스트의 열로 검증한다. 읽기만 하고 수 하나를 남기며, 안에 집계를 둘 수 없다. 타입 다음 바이트는 표에만 쓸 수 있다. |
