@KarlBielefeldt가 지적한 것처럼, 이러한 문제에 대한 기능적 접근 방식은 이전 상태에서 새로운 상태를 반환하는 것으로 보는 것입니다. 함수 자체는 정보를 보유하지 않으므로 항상 상태 m 을 상태 n으로 업데이트 합니다.
새 상태를 계산하는 동안 이전 상태 를 메모리에 유지 해야한다고 가정하기 때문에이 비효율적이라고 생각합니다 . 완전히 새로운 상태를 작성하거나 이전 상태를 다시 작성하는 것 중에서 선택 하는 것은 기능적 언어의 관점에서 구현 세부 사항 입니다.
예를 들어, 백만 개의 정수 목록이 있고 10 분의 1을 증가시키고 싶다고 가정하십시오. 10 번째 위치에 새로운 번호로 전체 목록을 복사하는 것은 낭비입니다. 그러나 이는 언어 컴파일러 또는 인터프리터에게 작업을 설명하는 개념적 방법 일뿐입니다. 컴파일러 또는 인터프리터는 첫 번째 목록을 자유롭게 가져 와서 열 번째 위치를 덮어 씁니다.
이러한 방식으로 작업을 설명하는 이점은 많은 스레드가 다른 위치에서 동일한 목록을 업데이트하려고 할 때 컴파일러가 상황에 대해 추론 할 수 있다는 것입니다. 작업이 "이 위치로 이동하여 찾은 내용을 덮어 씁니다"로 설명 된 경우 덮어 쓰기가 충돌하지 않도록하는 것은 컴파일러가 아닌 프로그래머입니다.
그러나 Haskell에도 "상태 유지"가 문제에 대한보다 직관적 인 솔루션 인 상황을 모델링하는 데 도움 이되는 State 모나드 가 있습니다. 그러나 " 데이터베이스에 쓰는 것과 같이 본질적으로 상태 가 양호하다 "는 Datomic과 같은 불변의 솔루션 이 있다는 몇 가지 문제에 주목하십시오 . 개념이라는 것을 알기 전까지는 반드시 실현 될 필요는 없습니다.