F#과 명령형 언어

함수형과 명령형, 하나만 골라야 할까?

화면을 누르면 다음 장으로 넘어갑니다

F#

바탕은 함수형, 나머지도 지원합니다

F#은 ML과 Haskell의 후손인 OCaml을 바탕으로 한 언어입니다. 근본은 함수형이지만 명령형 기능과 객체지향 프로그래밍(값과 기능을 묶은 객체로 짜는 방식, 11강)도 지원합니다.

.NET 언어는 .NET이라는 같은 실행 환경에서 도는 언어들입니다.

F#의 함수 연산

>>로 잇고, 인자를 미리 채웁니다

합성 연산자 >>는 왼쪽 함수부터 적용합니다. 6편의 compose(오른쪽부터)와 순서가 반대입니다. 7편의 커링(인자를 하나씩 받는 것)도 그대로여서, add에 5만 주면 5를 더하는 함수 add5가 됩니다.

f, g와 넣은 값 4는 예시입니다. let은 이름을 묶는 말, 줄 끝의 ;;는 입력이 끝났다는 표시입니다.

명령형 언어 속으로

파이썬에도 map과 람다가 있습니다

주로 명령형인 언어들도 함수형 기능을 들여왔습니다. 파이썬은 고차 함수 filter와 map을 지원하고, 첫째 매개변수로는 흔히 람다 식을 넘깁니다.

x ** 3은 x의 세제곱입니다. lambda x : 식은 x를 받아 식의 값을 내는 이름 없는 함수입니다.

미리 채우기

인자를 미리 채웁니다

파이썬의 partial은 함수의 인자 하나를 미리 채운 새 함수를 만듭니다. 부분 함수 적용(partial function application)입니다. 루비에서는 lambda로 만든 함수 객체를 curry로 커링해 같은 일을 합니다.

add는 두 수를 더하는 함수, x5는 결과를 담는 이름입니다. 20과 15는 5 + 15, 5 * 3입니다.

견주기

빠른 실행과 단순한 뜻을 맞바꿉니다

명령형 언어는 실행이 효율적이지만 의미론과 문법이 복잡하고, 동시성은 프로그래머가 직접 설계해야 합니다. 함수형 언어는 의미론과 문법이 단순하고 프로그램이 자동으로 동시에 돌게 될 수 있지만, 실행 효율이 낮습니다.

정리

변수 없이도 프로그램이 됩니다

첫 질문의 답입니다. 변수와 대입문 없이도 프로그램을 짤 수 있습니다. 순수 함수형 언어는 장점이 있지만 아직 널리 쓰이지는 않습니다. 대신 그 기능이 명령형 언어 안으로 들어오고 있습니다.

다음 강의

15강은 논리 프로그래밍 언어입니다

사실과 규칙을 적어 두고 물으면 언어가 답을 찾아 주는 방식입니다.

14강 끝목록으로 돌아가기