대부분의 함수형 프로그래밍 언어 (예 : 커먼 리스프, 계획 / 라켓, Clojure의, 하스켈, 스칼라, OCaml로, SML)은 같은 목록에 몇 가지 일반적인 higher-order 함수, 지원 map
, filter
, takeWhile
, dropWhile
, foldl
, foldr
등 (참조 , 커먼 리스프, 계획 / 라켓을 Clojure 단계별 참조 시트 , Haskell , Scala , OCaml 및 SML 설명서.)
C ++ 11에는 목록에 동등한 표준 메소드 또는 함수가 있습니까? 예를 들어, 다음 Haskell 스 니펫을 고려하십시오.
let xs = [1, 2, 3, 4, 5]
let ys = map (\x -> x * x) xs
현대 표준 C ++에서 두 번째 표현을 어떻게 표현할 수 있습니까?
std::list<int> xs = ... // Initialize the list in some way.
std::list<int> ys = ??? // How to translate the Haskell expression?
위에서 언급 한 다른 고차 함수는 어떻습니까?
C ++로 직접 표현할 수 있습니까?
"비교적 추악합니다."
—
Giorgio
아마도 당신이 옳을 수도 있지만,이 질문의 주제는 C ++에서 공통 목록 고차 함수를 표현하는 방법이 아니라 Haskell의 Data.Sequence에서 유사한 함수를 구현하는 방법이 아닙니다.
—
Giorgio
@delnan 나는 Haskell이 그 접근 방식에 훨씬 일반적 이라고 주장합니다 .
—
Alec
Functor
, Foldable
그리고 Traversable
내가 생각할 수있는 것처럼 추상적 인 방법으로 이것을 달성하십시오. Data.Sequence
이 모든 것의 인스턴스이므로 할 수 있습니다 fmap (\x -> x * x) xs
. map
되어 fmap
초보자를위한 전문.
Data.Sequence
Haskell에서 이러한 작업을 시도한 적이 있습니까? 비교적 추악합니다.