프로젝트 문서에 따르면 val 을 이용해 새로운 변수를 선언할 때는
(val x E) assigns name x to the value obtained by evaluating E
즉 E를 eager evaluation해 얻은 값을 대입해야 한다고 이해했습니다.
그런데 lazy infinite loop 테스트 케이스의 경우 다음과 같습니다
|(let
| (def loop () (app loop))
| (lazy-val x (app loop))
| (def f (a (by-name b)) a)
| (val bb (app f x (app loop)))
| 3)
val bb를 선언할 때 (app f x (app loop)) 가 반드시 evaluate 돼야 하는데, loop는 영원히 terminate하지 않기 때문에 인터프리팅이 여기서 멈추게 돼버립니다.
여기서 테스트케이스가 의도한 답인 VInt(3) 이 나오려면 bb 또한 lazy-val 로 선언돼야 하는 것이 아닌가 질문드려봅니다.
프로젝트 문서에 따르면
val을 이용해 새로운 변수를 선언할 때는즉 E를 eager evaluation해 얻은 값을 대입해야 한다고 이해했습니다.
그런데
lazy infinite loop테스트 케이스의 경우 다음과 같습니다val bb를 선언할 때(app f x (app loop))가 반드시 evaluate 돼야 하는데, loop는 영원히 terminate하지 않기 때문에 인터프리팅이 여기서 멈추게 돼버립니다.여기서 테스트케이스가 의도한 답인 VInt(3) 이 나오려면
bb또한lazy-val로 선언돼야 하는 것이 아닌가 질문드려봅니다.