두개의 데이터를 스왑해야하는 예시.


a와 b의 값을 바꿀때 보통 어떻게 바꿀까요?


let t = a

a = b

b = a


가 정석이라고 생각합니다.


좀 똑똑한 친구들은


a = a ^ b

b = a ^ b

a = a ^ b


를 떠올리기도 합니다.



여기서, 함수형은 데이터를 어떻게 스왑할까요?

위 맥락에서는 이 질문 자체가 성립하질 않습니다.

두개의 값을 서로의 값으로 변경하는데, 함수형이라뇨... 주어진 질문 자체가 함수형스럽지 않은데 이걸 함수형으로 처리하라니 질문자체가 이상해보입니다.



하지만, 이 답변을 들으면 "아! 이게 함수형이구나!!" 싶을만 한데요,


바로


\(a, b) -> (b, a) 입니다.


이 얘기를 들으면 반응이 두가지일거라고 생각하는데요.


첫째는 "이렇게 단순한걸 왜 고민하고 있었지? 충격이다" 랑

둘째는 "이건 아예 다른거잖아. 이건 스왑이 아니야" 라는 반응일거 같습니다.


근데 대충 제가 하고싶은 말은,


레지스터들의 상태를 변경해가며 연산하는 절차지향과

인풋으로 데이터를 쏘고, 아웃풋으로 데이터를 내뱉는, 즉 데이터를 스트리밍 하는 함수형과


상황을 바라보는 관점 자체가 다르다는 것을 표현하고 싶었습니다.