그래서 목록 내에 VarDecl
을 포함하는 stmt
(대수 유형) 목록이 있습니다. stmt list
에서 VarDecl list
으로 목록을 축소하고 싶습니다. List.filter
을 사용할 때 다른 유형은 모두 제거 할 수 있지만 여전히 stmt list
으로 남습니다.OCaml 목록을 하나의 변형으로 필터링
폴딩으로 형식 변경뿐만 아니라 필터링도 할 수 있었지만 일반화하는 방법을 알 수는 없습니다. (프로젝트에서이 패턴이 필요합니다.)
let decls = List.fold_left
(fun lst st -> match st with
| VarDecl(vd) -> vd :: lst
| _ -> lst
) [] stmts in
필터를 수행하고 목록 유형의 변형에 캐스트하는 더 좋은 방법이 있습니까?
죄송합니다. 더 구체적으로 설명해야합니다. 인수 목록은 변형 그룹의 그룹이며 하나의 변형으로 축소하려고합니다. –
변형이 하나뿐이라면 형식은 여전히 'stmt list'입니다. 유형을 변경하지 않으며, 이는 사용자가 요청하는 것처럼 들립니다. –