엄격성과 나태성 (3)

Jason Kim·2020년 5월 8일
0

fp in scala with TypeScript

목록 보기
12/17

이 시리즈는 "스칼라로 배우는 함수형 프로그래밍"을 TypeScript로 실습한 내용을 정리하고 있습니다.

무한 스트림과 공재귀

연습문제 5.8~5.11

https://github.com/JsonKim/fpinscala-with-typescript/commit/be9e33570249ebd42b99b53c14b67c3d166f3294

  • 재귀 함수
    • 자료를 소비
    • 점점 더 작은 입력으로 재귀하다가 종료
  • 공재귀(corecursion) 함수
    • 자료를 생산
    • 생산성(productivity)을 유지하는 한 종료될 필요 없음
    • 유한한 시간 안에서 더 많은 결과를 평가하는 것이 항상 가능

연습문제 5.12~5.13

https://github.com/JsonKim/fpinscala-with-typescript/commit/0ed71f303364879ec301d00f4ac666cd056d27f2

연습문제 5.14~5.16

https://github.com/JsonKim/fpinscala-with-typescript/commit/c82b72c23d1575d6d45532c852efccff5e663d0b

List가 탈출이 불가능한 루프의 중첩이라면, Stream은 함수들이 마치 하나의 루프 안에서 동작하는것 처럼 합성이 가능하기 때문에 더 간단한 구성요소의 사용과 효율적인 구현이 가능하다.

요약

비엄격성을 사용하면 효율적이고 모듈화된 함수적 프로그램을 작성 할 수 있다. 그러나 이것은 함수적 코드의 효율성을 되찾기 위한 기법만은 아니며 훨씬 더 큰 개념이다.

표현식의 서술과 표현식의 평가 방법 및 시기를 분리하고 서로 다른 부분을 평가해서 서로 다른 결과를 얻는 식으로 표현식의 서술을 여러 문맥에서 재사용 할 수 있다. 엄격한 코드는 서술과 평가가 엮여 있으면 그런 재사용이 불가능하다.

0개의 댓글