std: F5 해결(List.enumerate), F4·F8은 넣지 않는 것으로 닫음
F5 — "튜플이 없어서 enumerate가 불가능하다"고 적었는데 틀렸다. 제네릭 struct 하나면 된다. fold_indexed보다 이쪽이 낫다: enumerate 하나가 기존 each/map/filter/fold 전부와 조합되고, fold_indexed를 만들면 map_indexed, each_indexed가 따라와 "한 개념 한 방식"을 깬다. samples/app에서 Numbered struct가 사라졌다 (244줄 → 232줄). F2에 이어 두 번째로 관찰자가 틀린 사례다. 마찰 8건 중 2건이 "언어가 못 한다"고 적었다가 확인해 보니 되는 것이었다. F4 — 넣지 않는다. 전체 나열이 귀찮은 것은 맞지만 그 귀찮음이 값을 한다. 필드를 추가하면 모든 생성 지점이 컴파일 오류를 내고, 컴파일러가 전부 방문하도록 강제한다. ..base는 그것을 없앤다. "오류를 더 빨리 잡는다"가 1번 목표인데 F4는 정확히 그것을 깎는 거래다. F8 — 넣지 않는다. 진짜 질문은 "미사용 지역 변수를 잡을 것인가"가 아니라 "경고 등급을 만들 것인가"였다. 오류로 넣으면 성가시고, 경고로 넣으면 경고 등급의 첫 입주자가 된다. 경고가 없다는 것은 이 언어의 좋은 성질이고 죽은 지역 변수 하나 때문에 팔 것이 아니다. 둘 다 "보류"가 아니라 "닫음"으로 적는다. 근거를 적어두지 않으면 다음에 같은 논의를 처음부터 다시 한다. 다시 열 조건도 함께 적었다. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019ZVDeU6KLuUVL3gs18Hm3E
This commit is contained in:
@@ -18,6 +18,16 @@ pub fn first[a](xs: List[a]) -> Option[a]
|
||||
|
||||
pub fn nth[a](xs: List[a], i: Int) -> Option[a]
|
||||
|
||||
// 번호를 붙인 값. fold에 인덱스를 넣는 대신 이것 하나를 둔다 —
|
||||
// fold_indexed를 만들면 map_indexed, each_indexed가 따라오고 그것이
|
||||
// "한 개념 한 방식"을 깨는 방향이다. enumerate는 기존 각 함수와 조합된다.
|
||||
pub copyable struct Indexed[a] {
|
||||
i: Int,
|
||||
value: a,
|
||||
}
|
||||
|
||||
pub fn enumerate[a](xs: List[a]) -> List[Indexed[a]]
|
||||
|
||||
// 뒤에 하나 붙인 새 리스트. 제자리 수정이 아니다.
|
||||
pub fn push[a](xs: List[a], x: a) -> List[a]
|
||||
|
||||
|
||||
Reference in New Issue
Block a user