0

(begin expr1 expr2 ...)은 모든 표현식을 평가하고 평가 된 마지막 표현식을 반환한다는 것을 알고 있습니다.Scheme에서`(begin)`의 리턴 값은 무엇입니까?

나는 Chez Scheme에서 begin과 같은 표현을 사용하지 못하도록했습니다 : (begin). 제 연구의 일환으로 체즈 스킴을 사용하고 있습니다. 콘솔에 쓸 때 (begin) 구문 오류가 발생하지 않고 단지 void을 얻는 것처럼 아무것도 표시하지 않습니다.

내 질문은 무엇을 반환할까요?

(void)을 실행하여 얻을 수있는 무효 개체라고 생각했습니다. 그러나 테스트했을 때 나는 그렇지 않다는 것을 깨달았습니다.

저는 Chez Scheme을 제가 배우는 컴파일러 과정의 일부로 공부하고 있는데, 특별한 단어 begin을 처리 할 수있는 컴파일러의 일부를 구현해야합니다. 그래서 나는 이것이 왜 가능하고이 함수가 리턴하는지 알 필요가있다.

편집 : 나는이 주제에 대한 this link을 추가 해요

. 답변을 완전히 이해할 수 없었습니다. 또한 그는 반환 유형을 언급하지 않았습니다.

+1

컴파일러의 일부를 구현하는 경우 언어 양식의 의미에 대한 정의는 기존 동작이 아닌 사양에서 가져와야합니다. 권리? –

답변

2

나는 begin의 다른 용도를 혼란스럽게 생각한다고 생각합니다. R6RS section 11.4.7은 약 begin이며 두 가지 방법으로 사용됩니다. 1) 0 개 이상의 "양식"이있는 경우 begin이 없으면 양식이 문법적으로 주변 신체에 "접합"됩니다 (매크로를 작성할 때 주로 유용하다고 생각합니다.); 2) 1 개 이상의 표현식이있는 경우, 순서대로 표현식을 평가하고 마지막 표현식의 결과를 리턴합니다.

"반환 값"에 대해 말하면 (begin ...)을 표현식으로 사용하지만 표현식 (위의 begin의 두 번째 형식)은 하나 이상의 표현식을 사용해야합니다. (begin)이 비어있는 첫 번째 양식은 begin이어야하며 단순히 "아무것도 아님"(0 개의 양식)을 주변의 본문에 연결하지만 본문 전체의 평가와 별도로 "평가"되지는 않습니다.

+0

답변 해 주셔서 감사합니다. 만약 내가 올바르게 이해한다면, 표현을 사용하지 않고 (시작) 사용하는 것이 프로 시저가 아니라 매크로와 같은 도구라는 것을 말하고 있습니다. 따라서 어떤 값도 반환하지 않고 그대로 사용할 수 있습니다. – PeNpeL

+1

@PeNpeL : 음,'begin' 자체는 프로 시저가 아닙니다. 그것은 특별한 형태의 언어입니다. 그러나 기본적으로, 예,'(begin)'은'begin'의 표현 형식을 사용하지 않으며, 그 자체로 표현식이 아닙니다. 컴파일러가 복잡한 매크로를 지원할 필요가 없다면, 지금은'begin'의 폼 - 스 플라이 싱 형태를 무시할 수 있습니다. – newacct

+0

답변 해 주셔서 감사합니다. – PeNpeL