0

Windows7 64bit インストールで Cygwin プロンプトから sicstus を起動し、prolog プログラムを作成しました。次に、現在のフォルダーにファイル「test.sav」を作成する次のコマンドを使用して保存しました。

save_program(test).

このファイルを実行しようとすると、不可解なエラー メッセージが表示されます。

$ ./test.sav
! Existence error in argument 1 of restore/1
! file '%0.bat' does not exist
! goal:  restore('%0.bat')
SICStus 4.2.0 (x86-win32-nt-4): Mon Mar  7 20:21:12 WEST 2011
Licensed to SP4idi.ntnu.no
| ?- halt.
./test.sav: line 2: $'\032\r': command not found
./test.sav: line 8: x??xU?u/:?HBa?m[F?????ld?l???l?????./test.sav: line 9: syntax error near unexpected token `)'
./test.sav: line 9: `}?????????8?h????)}???C?qa?   ??.?????????/F??7W???yE?lL}>}L???????"???o%"?aac|S[G?????"W????'??K?1Q???????H??M?4??=???bE?
???t[<??????I??\)T?*????????N+?4??@h? ?'?{?1J?*????F?Q??q?<B?5@????l?(s?x?`r?????b?5??%:#I?Eb?@????1-???|a?????  ?D??G?)??O?

ファイルの先頭を見ると、次のようになります。

$ head ./test.sav
sicstus-4.2.0 -r %0.bat -a %1 %2 %3 %4 %5 %6 %7 %8 %9

# META_INFO 1
# FILE: "c:/eclipse/workspace_prolog/busstuc/test.sav"
# FR: "timeout"
# META_INFO END
version=4 archmask=0x2c81a
x??xU?u/:?HBa?m[F?????ld?l???l?????head: write error: Permission denied
head: write error

また、別の方法でファイルをロードしようとしました:

$ sicstus -l ./test.sav
% loading c:/eclipse/workspace_prolog/busstuc/test.sav...
% c:/eclipse/workspace_prolog/busstuc/test.sav loaded, 0 msec 104 bytes
! Consistency error: memory and saved_state are inconsistent
! type 32-bit,BDD,GAUGE,ALL_BUT_PROLOG, saved state, type 32-bit,BDD,GAUGE, emulator
! goal:  ensure_loaded(user:'./test.sav')
SICStus 4.2.0 (x86-win32-nt-4): Mon Mar  7 20:21:12 WEST 2011
Licensed to SP4idi.ntnu.no
| ?- halt.

なぜこれが機能しないのか、誰かが私に説明してもらえますか? ここで何か間違ったことをしていますか?ありがとう!

編集: Per の提案に従って、ファイル名を test.sav から test.bat に変更しました。これが起こります:

C:\eclipse\workspace_prolog\BussTUC>sicstus-4.2.0 -r C:\eclipse\workspace_prolog\BussTUC\test.bat.bat -a
! Existence error in argument 1 of restore/1
! file 'C:\\eclipse\\workspace_prolog\\BussTUC\\test.bat.bat' does not exist
! goal:  restore('C:\\eclipse\\workspace_prolog\\BussTUC\\test.bat.bat')
SICStus 4.2.0 (x86-win32-nt-4): Mon Mar  7 20:21:12 WEST 2011
Licensed to SP4idi.ntnu.no
| ?- halt.

C:\eclipse\workspace_prolog\BussTUC># META_INFO 1
'#' is not recognized as an internal or external command,
operable program or batch file.

C:\eclipse\workspace_prolog\BussTUC>The system cannot write to the specified device.
The system cannot write to the specified device.
 | The system cannot write to the specified device.
4

1 に答える 1

1

この文書化もサポートもされていない機能は、明らかに Windows では動作しませんでした。

代わりに、実行可能ファイルを含むフォルダーから main.sav をロードするビルド済みのランタイム システムの 1 つを使用できます。たとえば、test.sav を代わりに main.sav として保存し、sprti.exe と一緒に、SICStus の適切なフォルダー構造を含むフォルダーに配置します。これについては、マニュアルの「Windows ターゲット マシンのランタイム システム」セクションで説明されています。

最も一般的な解決策は、spld.exe ツールを使用して自己完結型の実行可能ファイルをビルドすることですが、これには Microsoft の対応する C コンパイラが必要です。

(私は SICStus Prolog 開発者の 1 人です)

于 2013-01-20T22:23:57.557 に答える