0

背景:私はスキームに不慣れで、DrSchemeを使用してプログラムを作成しています。

次のプログラムは、プログラムをr5rsとして実行すると、12345を出力します。

12345

ただし、次のプログラムは何も出力しません(これはr6rsプログラムです)。

#!r6rs
(import (rnrs))

12345

そうは言っても、これを行うことで12345を出力することができます。

#!r6rs
(import (rnrs))

(display 1235)

これはr6rsの新しいもので、出力はを使用して具体的に指定された場合にのみ発生しdisplayますか?それとも私は何か他のことをしているだけですか

4

1 に答える 1

1

これは、ここで見られる微妙な問題です。PLTでは、推奨される操作モードはモジュールにコードを書き込むことです。各モジュールには、記述されている言語の仕様があります。通常、デフォルトの言語は#lang scheme(および#!の略#lang)です。この言語では、すべてのトップレベルの非定義式がそれらの値を表示するように動作します(ほとんどの副作用の結果のように、それらが無効でない限り)。ただし、#lang r5rs#lang r6rsは同じことをしません。したがって、これらの最上位の式は評価されますが、表示されることはありません。

R5RS言語で出力が表示された理由は、(のように)それを「モジュール」として使用せず#lang r5rs、代わりに特定のR5RS「言語レベル」を使用したためです。この言語レベルはR5RSとの互換性が高くなっていますが、さまざまな微妙な理由から、これは一般的にはお勧めできません。したがって、一般的には使用する#lang方が優れています。冗長な頭痛の種を減らしたい場合は#lang scheme、今のところ固執し、後で標準について心配する方が簡単です。(もちろん、YMMVです。)

于 2010-06-03T01:43:54.350 に答える