Elixir Language
엘릭서의 기능적 프로그래밍
수색…
소개
엘릭서를 사용하여지도와 같은 기본 주문 기능을 구현해 보겠습니다.
지도
Map은 배열과 함수를 취하여 해당 함수를 해당 목록의 각 요소 에 적용한 후 배열을 반환하는 함수입니다.
defmodule MyList do
def map([], _func) do
[]
end
def map([head | tail], func) do
[func.(head) | map(tail, func)]
end
end
iex
붙여 넣기를 복사하고 다음을 실행합니다 :
MyList.map [1,2,3], fn a -> a * 5 end
속기 구문은 MyList.map [1,2,3], &(&1 * 5)
줄이다
Reduce는 배열, 함수 및 누산기를 취하고 누적 기 (accumulator)를 시드로 사용 하여 다음 누적기를 제공하는 첫 번째 요소로 반복을 시작하고 배열의 모든 요소에 대해 반복을 수행 하는 함수입니다 (아래 예제 참조)
defmodule MyList do
def reduce([], _func, acc) do
acc
end
def reduce([head | tail], func, acc) do
reduce(tail, func, func.(acc, head))
end
end
위 스 니펫을 iex에 복사하여 복사합니다.
- 배열의 모든 숫자를 추가하려면 :
MyList.reduce [1,2,3,4], fn acc, element -> acc + element end, 0
- 배열의 모든 숫자를 mutliply하려면 :
MyList.reduce [1,2,3,4], fn acc, element -> acc * element end, 1
예 1에 대한 설명 :
Iteration 1 => acc = 0, element = 1 ==> 0 + 1 ===> 1 = next accumulator
Iteration 2 => acc = 1, element = 2 ==> 1 + 2 ===> 3 = next accumulator
Iteration 3 => acc = 3, element = 3 ==> 3 + 3 ===> 6 = next accumulator
Iteration 4 => acc = 6, element = 4 ==> 6 + 4 ===> 10 = next accumulator = result(as all elements are done)
reduce를 사용하여 목록 필터링
MyList.reduce [1,2,3,4], fn acc, element -> if rem(element,2) == 0 do acc else acc ++ [element] end end, []
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow