48 시간 내에 Write Yourself a Scheme (최대 85 시간)을 통해 작업 중이며 Add Variables and Assignments에 대한 부분에 도달했습니다 . 이 장에는 큰 개념적 점프가 있으며, 최종 솔루션으로 바로 점프하는 것보다 중간에 좋은 리팩토링을 통해 두 단계로 수행 되었으면합니다. 어쨌든…
나는 같은 목적을 제공하는 것 다른 클래스의 번호와 분실 들어 왔 : State
, ST
, IORef
,와 MVar
. 처음 세 개는 텍스트에 언급되어 있지만 마지막 세 개는 처음 세 개에 대한 많은 StackOverflow 질문에 대한 선호하는 답변 인 것 같습니다. 그들은 모두 연속 호출 사이에 상태를 가지고있는 것 같습니다.
이들 각각은 무엇이며 서로 어떻게 다릅니 까?
특히 다음 문장은 의미가 없습니다.
대신 우리는 상태 스레드 라는 기능을 사용 하여 Haskell이 집계 상태를 관리 할 수 있도록합니다. 이를 통해 변수를 가져 오거나 설정하는 함수를 사용하여 다른 프로그래밍 언어 에서처럼 가변 변수를 처리 할 수 있습니다.
과
IORef 모듈을 사용하면 IO 모나드 내에서 상태 저장 변수를 사용할 수 있습니다 .
이 모든 것이 라인을 type ENV = IORef [(String, IORef LispVal)]
혼란스럽게 만듭니다 . 두 번째 이유는 IORef
무엇입니까? type ENV = State [(String, LispVal)]
대신 쓰면 무엇이 깨질 까요?