2010-06-03 3 views
0

배경 : 계획에 익숙하지 않고 DrScheme을 사용하여 프로그램을 작성하고 있습니다. 내가 r5rs로 프로그램을 실행할 때r6rs를 사용하여 디스플레이에 물건을 출력해야합니까?

다음 프로그램은 12345 출력 : 다음 프로그램은 아무것도 출력하지 그러나

12345 

을 (그것은 r6rs 프로그램입니다) 밝혔다되고 그건

#!r6rs 
(import (rnrs)) 

12345 

, 내가 할 수있는 이렇게하면 12345를 출력 할 수 있습니다.

#!r6rs 
(import (rnrs)) 

(display 1235) 

r6rs, whe 다시 출력은 display을 사용하여 구체적으로 지정 될 때만 발생합니까? 아니면 내가 뭔가 잘못하고있는 것일까 요?

+0

노출 상수는 자동으로 인쇄되지 않아야합니다. – muhmuhten

답변

1

이것은 여기에 표시되는 미묘한 문제입니다. PLT에서 선호하는 작업 모드는 모듈에 코드를 작성하는 것입니다. 여기서 각 모듈에는 작성된 언어의 스펙이 있습니다. 일반적으로 기본 언어는 #lang scheme (#!#lang의 약자)입니다. 이 언어에서 동작은 모든 최상위 비 - 정의 표현식이 값을 표시하는 것입니다 (단, 대부분의 부작용의 결과처럼 void가 아닌 경우 제외). 그러나 #lang r5rs#lang r6rs은 같은 것을하지 않습니다. 따라서이 최상위 표현식은 평가되지만 표시되지 않습니다.

이유 당신 했다이 R5RS 언어와 일부 출력하면 (#lang r5rs에서와 같은) "모듈"로 사용하지만, 대신 특정 R5RS "언어 수준"을 사용하지 않은 것입니다 참조하십시오. 이 언어 수준은 R5RS와 더 잘 호환되지만, 다양한 미묘한 이유 때문에 이는 일반적으로 좋은 생각이 아닙니다. 따라서 #lang을 사용하면 일반적으로 더 좋으며, 여분의 두통을 덜어두기를 원하신다면 #lang scheme을 지금 사용하는 것이 더 쉬워 질 것이며 나중에 표준에 대해 걱정할 것입니다. (물론 YMMV입니다.)