5

mzschemeScheme(PLT-Scheme、インタプリタ(?)コマンドラインツールを使用)で記述された古い(1999以前)プロジェクトを復活させようとしています。さらに悪いことに、私はSchemeやLispを知りません(実際、私は学びたいのですが、それは別の話です)。

プロジェクトのソースコードは次の場所にあります。

github.com/akavel/sherman

これで、コードを実行すると、次のようなエラーメッセージが表示されます。

Sherman runtime version 0.5
Hosted on MzScheme version 52, Copyright (c) 1995-98 PLT (Matthew Flatt)
reference to undefined identifier: list->block

(PLT-Schemeバージョン52、53、103、103p1mzscheme -Lを試しました。以前のバージョンでは、プロジェクトで使用されるスクリプトで参照されているオプションを使用できませんsherman.bat。後のバージョンでも、コードまたはオプションに関してさらに深刻な問題が発生します。 )。

難しさは、私が見たものから、list->block実際定義されていることですcollects/sherman/BLOCK.SS-48行目を参照してください。それで、何が問題なのですか?

コードを実行するには、次の手順を実行します。

  1. PLT-Scheme v。103p1をダウンロードします(古いバージョンのダウンロードページから-最初に「PLTScheme is nowRacket バナーを閉じます)-Windowsの場合は、mz-103p1-bin-i386-win32.zipを使用します。
  2. 解凍します(たとえば、ディレクトリにc:\PLT)。
  3. c:\sherman\collects\sherman内容のあるディレクトリを次の場所にコピーします:(c:\PLT\collects\shermanここにはgithubリポジトリc:\shermanの内容が含まれています)。
  4. を実行cmd.exeし、次にcd c:\sherman
  5. set PATH=c:\PLT;%PATH%
  6. sherman.bat run trivial.s
    • このコマンドは、実際、私が理解していることから、次のようになります。
(require-library "runtime.ss" "sherman")
(parameterize((current-namespace sherman-namespace))(load "trivial.s"))
(現在の名前空間sherman-名前空間)
  • その後、上記のエラーが発生します(MzSchemeバージョンは103p1などとして報告されます)。

問題を解決するのを手伝ってもらえますか?

編集2:解決しました!

関係者の方には、プロジェクトページに本格的な「このプロジェクトの使い方」の説明を追加し、 soegaardの助けを借りて問題の解決策を詳しく説明しました。

要するに:

copy trivial.s trivial.rs
rem (the above is workaround for problems with 'r2s.exe < trivial.r > trivial.rs')
sherman.bat compile trivial.rs
sherman.bat run trivial.zo
rem (or: sherman.bat run trivial.ss)
4

1 に答える 1

5

答えではありませんが、コメントするには大きすぎるメモがいくつかあります。

1. Sanity Check

エラーメッセージlist->blockは未定義です。コードが実行されることを確認するためblock.ssに挿入して、コードが実行される(display "block.ss is loaded!")ことblock.ss を確認します。


2. Random Thoughts

ファイルblocks.ssは次で始まります。

(require-library "functios.ss")
(require-library "synrule.ss")
(require-library "stream.ss" "sherman")

ファイル「sherman/stream.ss」はリポジトリにありますが、「synrule.ss」と「functios.ss」はどこにありますか?

ああ...このコードは古いです! ここでは作業方法について説明しますrequire-libraryfunctios.ss およびsynrule.ssMzLib の一部としてリストされます。

http://www.informatik.uni-kiel.de/~scheme/doc/mzscheme/node158.htm

どのように機能したかを見てみましょうrequire-library

require-library を使用してファイルをロードすると、ライブラリ名と結果の値が現在の名前空間に関連付けられたテーブルに記録されます。現在のネームスペースのロード テーブルにすでに登録されているライブラリに対して require-library が評価される場合、そのライブラリは再度ロードされません。代わりに、ロード テーブルに記録された結果が返されます。

そのため、コードblock.ssが実行されると、名前が名前空間に格納されます。現在の名前空間が間違っている場合、コードblock.ssが評価されると、list->block未定義であるというエラー メッセージが表示されます。

于 2012-09-23T11:13:07.163 に答える