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:
+5
-17
@@ -103,23 +103,11 @@ pub fn add_problem(cfg: Config, no: Int, msg: String) -> Config {
|
||||
}
|
||||
|
||||
pub fn parse(text: String) -> Config {
|
||||
let lines = String.split(text, "\n")
|
||||
let start = Numbered {
|
||||
no: 1,
|
||||
cfg: Config { entries: [], problems: [] },
|
||||
}
|
||||
List.fold(lines, start, fn(acc, line) {
|
||||
Numbered {
|
||||
no: acc.no + 1,
|
||||
cfg: parse_line(acc.cfg, acc.no, line),
|
||||
}
|
||||
}).cfg
|
||||
}
|
||||
|
||||
// 줄 번호를 같이 나르기 위한 것. fold에 인덱스가 없으니 직접 센다.
|
||||
pub copyable struct Numbered {
|
||||
no: Int,
|
||||
cfg: Config,
|
||||
let lines = List.enumerate(String.split(text, "\n"))
|
||||
let empty = Config { entries: [], problems: [] }
|
||||
List.fold(lines, empty, fn(cfg, l) {
|
||||
parse_line(cfg, l.i + 1, l.value)
|
||||
})
|
||||
}
|
||||
|
||||
// 이름으로 찾는다. 없으면 Err — 못 찾은 것은 오류지 빈 값이 아니다.
|
||||
|
||||
Reference in New Issue
Block a user