상위 질문
타임라인
채팅
관점
Fold (고차 함수)
위키백과, 무료 백과사전
Remove ads
함수형 프로그래밍에서 fold란 고차 함수의 계열 중 하나이다. reduce, accumulate, compress 혹은 inject 등 다양하게 알려져 있다. 재귀적인 자료 구조를 분석하고, 전달받은 결합된 명령들을 사용하여 재결합하며, 재귀적으로 수행된 그 결과들로 반환 값(return value)을 만들어낸다. 보통 fold는 함수를 자료 구조의 최상위 노드의 조합 함수의 형태로 표현되며, 특정 조건 하에서 사용할 수 있는 어떤 기본 값(default values)을 가질 수 있다. 그리고 계통적인 방식으로 그 함수를 사용하여 자료 구조의 위계 상의 요소들을 조합하는 과정을 진행한다.
언어별 비교
자세한 정보 언어, Left fold ...
언어 | Left fold | Right fold | Left fold (초기값 없음) | Right fold (초기값 없음) | Unfold |
---|---|---|---|---|---|
APL | func⍨/⌽initval,vector |
func/vector,initval |
func⍨/⌽vector |
func/vector |
|
C# 3.0 | ienum |
ienum.Reverse() |
ienum |
ienum.Reverse() |
|
C++ | std::accumulate( |
std::accumulate( |
|||
C++17 | (initval op ... op pack) |
(pack op ... op initval) |
(... op pack) |
(pack op ...) |
|
CFML | obj.reduce(func,initial) |
obj.reduce(func) |
|||
Clojure | (reduce func initval list) |
(reduce func initval (reverse list')) |
(reduce func list) |
(reduce func" (reverse list)) |
|
Common Lisp | (reduce func list :initial-value initval) |
(reduce func list :from-end t :initial-value initval) |
(reduce func list) |
(reduce func list :from-end t) |
|
Curl | {{TreeNode.default treeNode ...} .to-Iterator} |
{{TreeNode.default treeNode ...} .reverse} |
{for {treeNode |
{for {{treeNode.reverse} |
|
D | reduce!func(initval, list) |
reduce!func(initval, list |
reduce!func(list) |
reduce!func( |
|
Elixir | List.foldl(list, acc, fun) |
List.foldr(list, acc, fun) |
|||
Elm | List.foldl(Fun, Accumulator, List) |
List.foldr(Fun, Accumulator, List) |
|||
Erlang | lists:foldl(Fun, Accumulator, List) |
lists:foldr(Fun, Accumulator, List) |
|||
F# | Seq/List.fold func initval list |
List.foldBack func list initval |
Seq/List.reduce func list |
List.reduceBack func list |
Seq.unfold func initval |
Gosu | Iterable.fold(f(agg, e)) |
||||
Groovy | list |
list.reverse() |
list |
list.reverse() |
|
Haskell | foldl func initval list |
foldr func initval list |
foldl1 func list |
foldr1 func list |
unfoldr func initval |
Haxe | Lambda.fold(iterable, func, initval) |
||||
J | verb~/|. initval,array |
verb/ array,initval |
verb~/|. array |
verb/ array |
|
Java 8+ | stream.reduce |
stream.reduce |
|||
JavaScript 1.8 ECMAScript 5 |
array.reduce |
array.reduce |
|||
Julia | foldl(op, itr; [init]) |
foldr(op, itr; [init]) |
foldl(op, itr) |
foldr(op, itr) |
|
Kotlin | Iterable.fold |
Iterable.foldRight |
Iterable.reduce(func) |
Iterable .reduceRight(func) |
|
LFE | (lists:foldl func accum list) |
(lists:foldr func accum list) |
|||
Logtalk | fold_left(Closure, Initial, List, Result) |
fold_right(Closure, Initial, List, Result) |
|||
Maple | foldl(func, initval, sequence) |
foldr(func, initval, sequence) |
|||
Mathematica | Fold[func, initval, list] |
Fold[func, initval, Reverse[list]] |
Fold[func, list] |
Fold[func, Reverse[list]] |
NestWhileList[func,, initval, predicate] |
MATLAB | fold(@func, list, defaultVal) |
fold(@func, flip(list), defaultVal) |
fold(@func, list) |
fold(@func, flip(list)) |
|
Maxima | lreduce(func, list, initval) |
rreduce(func, list, initval) |
lreduce(func, list) |
rreduce(func, list) |
|
Mythryl | fold_left func initval list |
fold_right func initval list |
|||
OCaml | List.fold_left func initval list |
List.fold_right func list initval |
Base.Sequence.unfold ~init ~f [1] | ||
Oz | {FoldL List Func InitVal} |
{FoldR List Func InitVal} |
|||
PARI/GP | fold( f, A ) |
||||
Perl | reduce block initval, list |
reduce block list |
|||
PHP | array_reduce(array, func, initval) |
array_reduce( |
array_reduce(array, func) |
array_reduce( |
|
Python 2.x | reduce(func, list, initval) |
reduce(lambda x,y: func(y,x), reversed(list), initval) |
reduce(func, list) |
reduce(lambda x,y: func(y,x), reversed(list)) |
|
Python 3.x | functools.reduce(func, list, initval) |
functools.reduce(lambda x,y: func(y,x), reversed(list), initval) |
functools.reduce(func, list) |
functools.reduce(lambda x,y: func(y,x), reversed(list)) |
|
R | Reduce(func, list, initval) |
Reduce(func, list, initval, right=TRUE) |
Reduce(func, list) |
Reduce(func, list, right=TRUE) |
|
Ruby | enum |
enum.reverse_each |
enum |
enum.reverse_each |
|
Rust | iterator.fold(initval, func) |
iterator.rev().fold(initval, func) |
|||
Scala | list.foldLeft(initval)(func) (initval /: list)(func) |
list.foldRight(initval)(func) (list :\ initval)(func) |
list.reduceLeft(func) |
list.reduceRight(func) |
|
Scheme R6RS | (fold-left func initval list) |
(fold-right func initval list) |
(reduce-left func defaultval list) |
(reduce-right func defaultval list) |
(unfold p f g seed [tail-gen]) unfold-right p f g seed [tail] (vector-unfold f length initial-seed ···) (vector-unfold-right f length initial-seed ···) |
스몰토크 | aCollection inject: aValue into: aBlock |
aCollection reduce: aBlock |
|||
Standard ML | foldl func initval list |
foldr func initval list |
|||
Swift | array.reduce(initval, func) |
array.reverse() |
|||
XPath 3.1 | array:fold-left(
$array as array(*),
$zero as item()*,
$f as function(
item()*, item()*
} as item()*
) as item()*
fn:fold-left(
$seq as item()*,
$zero as item()*,
$f as function(
item()*, item()
) as item()*
) as item()*
|
array:fold-right(
$array as array(*),
$zero as item()*,
$f as function(
item()*, item()*
} as item()*
) as item()*
fn:fold-right(
$seq as item()*,
$zero as item()*,
$f as function(
item(), item()*
) as item()*
) as item()*
|
|||
Xtend | iterable.fold(initval,[func]) |
iterable.reduce[func] |
닫기
Remove ads
같이 보기
각주
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads
Remove ads