SML에서 k-out-of-N을 구현하려고 했으므로 "pick (3, [1,2,3,4])"는 [[1,2,3 ], [1,3,4] ...] (N 개의 모든 K 크기 선택)K 구현 on N 구현 - SML
나는 List.map을 사용하여 함수를 호출하고 각 요소에 적용한다고 생각했습니다.
실제로 "pick (3, [1,2,3,4,5])"입력을 입력 할 때 왜 빈 목록을 반환하는지 알 수 없습니다.
첫 번째 생각은 초기 조건 (choose (_, []) = [])으로 인한 것입니다. 하지만 변경하는 것도 효과가 없었습니다.
서명이 괜찮습니다 (val pick = fn : int * '목록 ->'목록 목록). 기본 케이스는 그들이 항상 빈리스트를 생산한다는 점에서 정확하고 빈리스트 상에 매핑 fn x => hd::x
는 빈리스트를 생성 -
fun pick (_,[]) = []
| pick (0,_) = []
| pick (n,hd::tl) =
let
val with_hd = List.map (fn x => hd::x) (pick(n-1,tl))
val without_hd = pick(n,tl)
in
[email protected]_hd
end;
대단히 감사합니다! :) – Zooly92