TL;DR
match clause가 새 스택프레임을 만드나요?
설명
The E Programming Language 스펙상, 같은 스택프레임에서 동일한 name이 여러번 선언된것은 ill-formed인 반면, 다른 스택프레임에선 같은 name이 등장해도 괜찮습니다. 문제 스펙상 ill-formed 입력에 대해선 raise를 내거나 아무 결과를 리턴해도 무관하기 때문에, 새로운 스택프레임이 언제 생성되냐는 프로그램의 동작을 정의하는데에 있어 굉장히 중요한 문제입니다.
아래 두 clause의 경우 비교적 명확합니다
let clause의 경우 새 스택프레임이 생긴다고 문제에 명시되어있습니다
app clause의 경우 문제에 명시되어있지는 않으나, 함수 호출이니 새 스택프레임이 생긴다고 생각하는것이 상식적이겠습니다
반면 match clause의 경우 새 스택프레임이 생기는것인지 아닌지 명확하게 명시되어있지 않습니다. match로 인해 새 스택프레임이 생길 경우, 아래의 프로그램은 정상적으로 실행되어야하지만 새 스택프레임이 생기는것이 아닐경우, ill-formed입니다.
(def is_positive (i)
(match (> i 0)
((i) (inl 0))
((is_positive) (inr 0))
)
)
match가 함수호출은 아니므로 새 스택프레임을 만들지 않는다고 생각해도 말이 됩니다. 반면, match clause 안의 identifier가 바깥 변수들과 겹치는것이 불가능한것도 어색하고 대부분의 기존 프로그래밍 언어들과 동작이 다르므로 새 스택프레임을 만든다고 생각해도 말이 됩니다.
match clause가 새 스택프레임을 만드나요 만들지 않나요?
TL;DR
matchclause가 새 스택프레임을 만드나요?설명
The E Programming Language 스펙상, 같은 스택프레임에서 동일한 name이 여러번 선언된것은 ill-formed인 반면, 다른 스택프레임에선 같은 name이 등장해도 괜찮습니다. 문제 스펙상 ill-formed 입력에 대해선 raise를 내거나 아무 결과를 리턴해도 무관하기 때문에, 새로운 스택프레임이 언제 생성되냐는 프로그램의 동작을 정의하는데에 있어 굉장히 중요한 문제입니다.
아래 두 clause의 경우 비교적 명확합니다
letclause의 경우 새 스택프레임이 생긴다고 문제에 명시되어있습니다appclause의 경우 문제에 명시되어있지는 않으나, 함수 호출이니 새 스택프레임이 생긴다고 생각하는것이 상식적이겠습니다반면
matchclause의 경우 새 스택프레임이 생기는것인지 아닌지 명확하게 명시되어있지 않습니다. match로 인해 새 스택프레임이 생길 경우, 아래의 프로그램은 정상적으로 실행되어야하지만 새 스택프레임이 생기는것이 아닐경우, ill-formed입니다.match가 함수호출은 아니므로 새 스택프레임을 만들지 않는다고 생각해도 말이 됩니다. 반면, match clause 안의 identifier가 바깥 변수들과 겹치는것이 불가능한것도 어색하고 대부분의 기존 프로그래밍 언어들과 동작이 다르므로 새 스택프레임을 만든다고 생각해도 말이 됩니다.
matchclause가 새 스택프레임을 만드나요 만들지 않나요?