나는 F #을 많이 사용합니다. F #의 모든 기본 콜렉션은 IEumberable 인터페이스를 구현하므로 F #에서 단일 Seq
모듈을 사용하여 액세스하는 것은 자연스러운 일입니다. OCaml에서 가능합니까?IEnumerable <T> in OCaml
다른 질문은 F #에서 'a seq
이 게으른 것입니다. 좀 더 자세하게 {1..100}
이상을 사용 100
에 1
에서 시퀀스를 만들 수 있습니다
seq { for i=1 to 100 do yield i }
, 내가 찾을 자신이이 기능을 해결하려면 다음 두 가지 방법을 사용하여 :
이 목록을 생성 :
let rec range a b = if a > b then [] else a :: range (a+1) b;;
또는 명시 적 재귀 함수에 의지하십시오.
첫 번째는 추가 목록을 생성합니다. 두 번째는 map
및 fold
과 같은 고차 함수를 사용하여 시퀀스 수준에서 작동해야하므로 추상화를 중단합니다.
OCaml 라이브러리에는 Stream 모듈이 있다는 것을 알고 있습니다. 그러나 그것의 기능은 F #에서 'a seq
만큼 일반적이지 않은 것처럼 보입니다.
나는 최근에 OCaml을 사용하여 프로젝트 오일러 문제를 재생하고 있습니다. 그래서 몇 가지 시퀀스 연산이 있습니다. 명령형 언어는 복잡한 몸체를 가진 루프 일 것입니다.
귀하의 두 번째 질문에 대한 귀하의 유일한 옵션은 그렇게 할 자신의 함수를 만드는 것입니다 생각합니다. 비록 당신이 꼬리 재귀 있는지 확인하고 싶지만. –