AZ-Prolog Version 6は、この度、本格的な64ビット・マルチコアCPUに対応したバージョンを提供します。


AZ-Prolog サポート掲示板


AZ-Prologサポート掲示板ご利用の際は下記注意事項をまずお読みください。

●使用方法や技術的な質問のユーザ助け合い掲示板です。
質問の際には、出来るだけ詳しい状況を記載して頂くと回答しやすくなります。
こちら(サイト利用条件)をお読みになり、ご理解の上ご利用御願い致します。

 新規投稿 | スレッド表示 | ツリー表示 | 投稿順表示 | i-mode 

1 フルコンパイルの仕方
sasagawa 2012-2-4 13:48:45  [返信] [編集]

お世話になります。VC++2010をインストールしてコンパイルに挑戦してみました。次のようなメッセージがでてきたのですが、何が足りないのでしょう?

−−−−−−ここから−−−−−

C:\Program Files\AZ-Prolog.709\sample\parallel>make_pen
make_pen

C:\Program Files\AZ-Prolog.709\sample\parallel>REM pentomino.pl をコンパイルするバッチ

C:\Program Files\AZ-Prolog.709\sample\parallel>set AZPL=C:\Program Files\AZ-Prolog.650\\system\pl

C:\Program Files\AZ-Prolog.709\sample\parallel>azpc -p pentomino.pl $(AZPL)\mlt_child.pl $(AZPL)\mlt_parent.pl $(AZPL)\utility.pl /e pentomino /lib C:\Program Files\AZ-Prolog.650\/obj/prolog.res
Files\AZ-Prolog.650\/obj/prolog.res
:: Can't see the file

C:\Program Files\AZ-Prolog.709\sample\parallel>azpc -p pentomino.pl /byte
AZ-Prolog Compiler version 7.9 Win32 x86
Copyright (C) SOFNEC CO., LTD. 1987-2011
Compile File = pentomino.pl
Ignore Command :: unknown(__406,fail)
[[[ Module = pentomino/InterPritive ByteCode ]]]
A_compiler
Auto Indexing : originalPiece/2
Auto Indexing : show_item/2
WARNING !! NO Public Predicate -> Treat az publicall
A: Deterministic : explanation/1
A: Deterministic : doit/0
A: Deterministic : prepareBoard/3
A: Deterministic : makeRelPos/3
A: Deterministic : same/2
A: Deterministic : show_line/1
A: Deterministic : rev/3
A: Deterministic : doit/1
A: Deterministic : p_doit/2
A: Deterministic : ee_register/2
A: Deterministic : get_cputime/1
A: Deterministic : menu/0
A: Deterministic : check_my_mode/1
A: Deterministic : menu_name/1
A: Deterministic : switch/2
A: Deterministic : put_all/1
A: Deterministic : get_proc_mode/3
A: Deterministic : mlt_pickup_send/4
A: Deterministic : mirror/2
A: Deterministic : show_result/1
A: Deterministic : show_result0/1
A: Deterministic : myreverse/2
A: Deterministic : s_test_count/0
A: Deterministic : s_test_show/0
A: Deterministic : p_test_count/1
A: Deterministic : p_test_show/1
A: Deterministic : show_type/3
A: Deterministic : explanation/0
A: Deterministic : test_all/0
A: NonDet : solve_pentomino/2
A: NonDet : slim/2
A: NonDet : slim0/2
A: NonDet : reduceSym/2
A: NonDet : reduceSym0/4
A: NonDet : makePieces/2
A: NonDet : makePiecesF/2
A: NonDet : makePiecesOthers/2
A: NonDet : makePiecesOthers0/5
A: NonDet : place/2
A: NonDet : place0/3
A: NonDet : place1/3
A: NonDet : pickup/3
A: NonDet : addOutside/2
A: NonDet : addOutside0/3
A: NonDet : addOutside1/2
A: NonDet : outside/2
A: NonDet : outside0/2
A: NonDet : makeStruct/1
A: NonDet : makeStruct0/1
A: NonDet : originalBoard/2
A: NonDet : position/3
A: NonDet : fix/2
A: NonDet : fix0/2
A: NonDet : rotate/2
A: NonDet : firstColumn/4
A: NonDet : originalPiece/2
A: NonDet : show_item/2
A: NonDet : solve_pentomino_para/3
A: NonDet : sub_process_scan/2
A: NonDet : place_child/2
B_compiler
B: explanation/1
B: doit/0
B: solve_pentomino/2
B: prepareBoard/3
B: slim/2
B: slim0/2
B: reduceSym/2
B: reduceSym0/4
B: makePieces/2
B: makePiecesF/2
B: makePiecesOthers/2
B: makePiecesOthers0/5
B: makeRelPos/3
B: place/2
B: place0/3
B: place1/3
B: pickup/3
B: addOutside/2
B: addOutside0/3
B: addOutside1/2
B: outside/2
B: outside0/2
B: makeStruct/1
B: makeStruct0/1
B: originalBoard/2
B: position/3
B: same/2
B: fix/2
B: fix0/2
B: mirror/2
B: rotate/2
B: firstColumn/4
B: originalPiece/2
INDEXING
B: show_result/1
B: show_result0/1
B: show_line/1
B: show_item/2
INDEXING
B: myreverse/2
B: rev/3
B: s_test_count/0
B: s_test_show/0
B: p_test_count/1
B: p_test_show/1
B: doit/1
B: p_doit/2
B: show_type/3
B: ee_register/2
B: get_cputime/1
B: menu/0
B: check_my_mode/1
B: menu_name/1
B: switch/2
B: explanation/0
B: put_all/1
B: test_all/0
B: solve_pentomino_para/3
B: sub_process_scan/2
B: get_proc_mode/3
B: mlt_pickup_send/4
B: place_child/2
D_compiler
D: explanation/1/2
D: doit/0/9
D: solve_pentomino/2/41
Last Call Optimization
D: prepareBoard/3/90
D: slim/2/156
Last Call Optimization
D: slim0/2/167
Tail Recursion
D: reduceSym/2/188
Last Call Optimization
D: reduceSym0/4/202
Tail Recursion
Tail Recursion
D: makePieces/2/328
Last Call Optimization
D: makePiecesF/2/368
Tail Recursion
D: makePiecesOthers/2/453
Tail Recursion
D: makePiecesOthers0/5/520
Tail Recursion
Tail Recursion
D: makeRelPos/3/665
D: place/2/975
Tail Recursion
D: place0/3/1034
Tail Recursion
Tail Recursion
D: place1/3/1206
Last Call Optimization
D: pickup/3/1252
Tail Recursion
D: addOutside/2/1267
Last Call Optimization
D: addOutside0/3/1333
Tail Recursion
D: addOutside1/2/1420
Tail Recursion
D: outside/2/1481
Last Call Optimization
D: outside0/2/1504
Tail Recursion
D: makeStruct/1/1544
Tail Recursion
D: makeStruct0/1/1604
Tail Recursion
D: originalBoard/2/1701
D: position/3/1720
Last Call Optimization
D: same/2/1960
D: fix/2/1996
Tail Recursion
D: fix0/2/2037
Tail Recursion
Tail Recursion
D: mirror/2/2078
Last Call Optimization
D: rotate/2/2082
D: firstColumn/4/2129
Tail Recursion
D: originalPiece/2/2158
D: show_result/1/3213
Last Call Optimization
D: show_result0/1/3224
Tail Recursion
D: show_line/1/3259
Tail Recursion
D: show_item/2/3302
D: myreverse/2/3447
Last Call Optimization
D: rev/3/3458
Tail Recursion
D: s_test_count/0/3479
D: s_test_show/0/3526
D: p_test_count/1/3573
D: p_test_show/1/3623
D: doit/1/3673
D: p_doit/2/3829
D: show_type/3/3991
Last Call Optimization
D: ee_register/2/4028
D: get_cputime/1/4093
D: menu/0/4140
D: check_my_mode/1/4309
D: menu_name/1/4384
D: switch/2/4390
D: explanation/0/4454
Last Call Optimization
D: put_all/1/4472
Tail Recursion
D: test_all/0/4493
Last Call Optimization
D: solve_pentomino_para/3/4572
Last Call Optimization
D: sub_process_scan/2/4700
D: get_proc_mode/3/4725
D: mlt_pickup_send/4/4762
Tail Recursion
D: place_child/2/4828
Last Call Optimization

C:\Program Files\AZ-Prolog.709\sample\parallel>del *.c & del *.obj & del mkaz.bat
C:\Program Files\AZ-Prolog.709\sample\parallel\*.c が見つかりませんでした。
C:\Program Files\AZ-Prolog.709\sample\parallel\*.obj が見つかりませんでした。
C:\Program Files\AZ-Prolog.709\sample\parallel\mkaz.bat が見つかりませんでした。

C:\Program Files\AZ-Prolog.709\sample\parallel>
2 Re: フルコンパイルの仕方
稲葉輝 2012-2-5 17:50:04  [返信] [編集]

sasagawaさま、お世話になっています。
稲葉です。

AZ−V7をダウンロードいただき、ありがとうございます。
まずは、インストールDIR直下にinstall.txt がありますので、これをよく読んでください。


1)インストール先をC:\Program Files\ではなく、C:\などに変えてください。C:\Program Files\ではファイルの出力ができません。

2)Logをみますと、AZ−V7の環境下ではなく、AZ−V6の環境になっています。
インストールディレクトリの直下にAZ-env.bat がございますので、これをエディタでひらき、最終3行に書かれているC++環境設定をVS10.0を生かすようにREMの付け替えをおこないます。

3)AZ-Env.batのショートカットをディスクトップにコピーします。

4)以降、AZ−V7をお使いになるときはこのバッチを開いてから作業をおこないます。

ご確認ください。
3 Re: フルコンパイルの仕方
稲葉輝 2012-2-5 19:10:48  [返信] [編集]

稲葉です。

さきに書いたものと状況がちょっと違うようですね。

%%%
C:\Program Files\AZ-Prolog.709\sample\parallel>azpc -p pentomino.pl /byte
AZ-Prolog Compiler version 7.9 Win32 x86
Copyright (C) SOFNEC CO., LTD. 1987-2011

とでているので、PathはV7になっています。
(手作業でPath,include,libの設定をされた?)

%%%
C:\Program Files\AZ-Prolog.709\sample\parallel>set AZPL=C:\Program Files\AZ-Prolog.650\\system\pl

ここで環境変数AZ-PrologがVersion6のインストール先になって
いることがわかります。
(これも手作業で環境変数AZ-PrologをV7に変えてしまえばOK)

%%%
C:\Program Files\AZ-Prolog.709\sample\parallel>del *.c & del *.obj & del mkaz.bat
C:\Program Files\AZ-Prolog.709\sample\parallel\*.c が見つかりませんでした。

これはProgram Files以下ではフォルダが書き込みプロテクトをしているので、コンパイルファイルが吐き出せないのです。
sample,benchなどのフォルダを任意の場所へコピーしてここでコンパイルしてください。
4 Re: フルコンパイルの仕方
sasagawa 2012-2-6 21:37:16  [返信] [編集]

ありがとうございます。
やってみます。
全部読む 最新50 1-100 板のトップ リロード

1 製品版をインストールする時
mkmk 2010-3-25 15:22:24  MAIL  [返信] [編集]

Ver6評価版を使用しています。
製品版をインストールする時、評価版のアンインストールと
環境変数の削除は必要ですか。
インストーラーがやってくれますか?

2 Re: 製品版をインストールする時
kisa 2010-3-26 18:03:18  [返信] [編集]

念の為、評価版のアンインストールと環境変数の削除をしました。
インストールと環境変数の項を見ると、環境変数の削除だけでよい見たいですね。Ver6のインストラーで削除しますね。



全部読む 最新50 1-100 板のトップ リロード

1 Emcas等でのPrologの使用について
sasagawa888 2011-2-19 13:01:18  [返信] [編集]

無償版AZ-PrologをEmacs等で起動したいのですが、標準入出力ではない方法で入出力が行われているらしく、Emacsバッファ等では入出力を補足できないようです。何か方法はありますか?
2 Re: Emcas等でのPrologの使用について
稲葉輝 2011-2-21 19:08:47  [返信] [編集]

ご質問ありがとうございます。

AZ-Prologパッケージにはインタプリタ上でヒストリ機能、カーソル移動などをサポートする
ウインドウアプリケーションインタプリタ(prolog.exe)と標準入出力版のコンソールインタプリタ(prolog_c.exe)が含まれて
います。

後者の標準入出力を使った(コンパイル)サンプルが%az-prolog%\sample\HDPにありますのでご参照ください。

>type queens.file | mapQueen | reduceQueen

このprolog_c.exe をprolog.exeにリネームしてemacsから呼び出せばよいはずですが、
Linux版(centOS 64bitで検証)では問題なく動作しますが、windows版ですと
出力バッファのクリア(組み込み述語: s_flush/0)を毎度行わないと結果の表示がされない
という不具合があります。

>emacs
emacs: M-x run-prolog
|?- write(aaaa),s_flush.
aaaa
yes

とりあえず、次のような簡単なトップレベルをコンパイルしてprolog.exeを生成し呼び出したところとりあえずは動きます。

>type etop.pl

%%%
top_level:- write('test-AZ-Prolog'),prompt(_,''),repeat,nl,write('?-'),s_flush,read_call,fail.

read_call:- errorset((read(X),call(X)),succ),!,write(X).
read_call:-write(no).
%%%%

>azpc -p etop.pl /e prolog /i /dcurses

>prolog.exe を %AZ-Prolog%\bin へコピーする

>emacs
emacs: M-x run-prolog
-----------------------
test-AZ-Prolog

?-assert(a([],L,L)).
assert(a([],L_8,L_8))

?-assert((a([A|L],C,[A|CL]):-a(L,C,CL))).
assert((a([A_19|L_21],C_23,[A_19|CL_25]):-a(L_21,C_23,CL_25)))

?-a([1,2,3,4],[5,6],L).
a([1,2,3,4],[5,6],[1,2,3,4,5,6])

?-halt.

この不具合はAZ-PrologのWin版をbuildしたMS−Cコンパイラが子プロセスからの出力の場合にはバッファのフラッシュが必要である仕様のためでありました。

AZ-Prologでも並列処理の子プロセスと親プロセスのやりとりでは子側のアプリケーション(mlt_child.pl)でflushをおこなっておりましたが、インタプリタを直接別の親(この場合はemacs)から呼び出だされることを想定して同様な処理が必要でした。

次期バージョンで対処します。

よろしくお願いします。
3 Re: Emcas等でのPrologの使用について
sasagawa888 2011-2-22 22:50:53  [返信] [編集]

ご回答ありがとうございました。

当面、ウインドウアプリケーションインタープリタと内臓エディタを使ってみます。次バージョンに期待しております。
全部読む 最新50 1-100 板のトップ リロード

1 CTRL+C が効かない原因
sasagawa 2011-6-11 7:19:34  [返信] [編集]

prolog_eでChezEdit-NTからのインタラプトが効かない原因がほぼわかりました。APIでCTRL+Cが無視されるようになったいたようです。

下記Cプログラムで確認できました。おそらくPetite Chez Scheme はSetConsoleCtrlHandler(NULL, FALSE ); でctrl+cを有効にしているのだと思います。


#include <windows.h>
#include <stdio.h>
#include <signal.h>

BOOL WINAPI CtrlHandler( DWORD CtrlEvent )
{
switch( CtrlEvent ) {
case CTRL_C_EVENT:
fprintf(stdout, "Catch CTRL_C_EVENT event\n" );
fflush(stdout);
return TRUE;
case CTRL_BREAK_EVENT:
fprintf(stdout, "Catch CTRL_BREAK_EVENT event\n" );
fflush(stdout);
return TRUE;
default:
return FALSE;
}
}



void main( void )
{
SetConsoleCtrlHandler(NULL, FALSE ); //CTRL+Cを有効にする。
SetConsoleCtrlHandler(CtrlHandler, TRUE );

fprintf(stdout,"CTRL+C,CTRL+BREAK TEST\n" );
fflush(stdout);
while( 1 ){ }
}

2 Re: CTRL+C が効かない原因
稲葉輝 2011-6-13 13:34:49  [返信] [編集]

検証のご協力ありがとうございました。

すでにsasagawaさまのwikiに書かせていただきましたが、Chezeditから立ち上げたAZ-Prologインタプリタで
「ctrl+c有効化」はwinAPI述語を使っておこなうことができました。

ctr_c_ok:-
winLoadLibrary('KERNEL32',KERN),
winGetProcAddress(KERN,'SetConsoleCtrlHandler',Addr),
winCallApi(Addr,[0,0],0,1,_,_,_).

?- ctr_c_ok.

なお、今回の成果を含め、近々、新バージョンの公開を予定しておりますのでよろしくお願いします。

3 Re: CTRL+C が効かない原因
sasagawa 2011-6-13 15:13:54  [返信] [編集]

早速の対応、ありがとうございました。
CTRL+Cのシグナルが有効になることをこちらでも確認しました。

AZ-Prologの高性能さに驚いています。リスト処理ライブラリを書いたり、簡易グラフィクスを書いたりと計画しています。

高性能処理系を個人向けに無償供与していただいていることに感謝申し上げます。
全部読む 最新50 1-100 板のトップ リロード

1 prolog_e 漢字 ctrl+c
sasagawa 2011-6-10 3:56:44  [返信] [編集]

prolog_eのChezEditでの動作検証です。

漢字はシフトJIS、UTF8ともに正常に表示されました。
ご指摘のCTRL+Cによるインタラプトの件ですが、なぜインタラプトがかからないのか調査中です。APIの引数に問題があるかもしれません。

PChar(CmdLine),
nil,
nil,
true,
CREATE_NEW_PROCESS_GROUP,
nil,
nil,
StartInfoCh,
ProcInfo);

while true do
case WaitForMultipleObjects(3,@h,false,INFINITE) of
WAIT_OBJECT_0 + 0:
begin
GenerateConsoleCtrlEvent(CTRL_C_EVENT,ProcInfo.dwProcessid);

このGenerateConsoleCtrlEventの2番目の引数です。同一プロセスグループにシグナルを送っているのですが、ここを0にして全部のプロセスにシグナルを送る必要があるかもしれません。時間がかかりそうです。少し時間をいただきます。調べてみます。
2 Re: prolog_e 漢字 ctrl+c
sasagawa 2011-6-10 7:46:45  [返信] [編集]

ChezEditが子プロセスを呼び出しているコードを全部掲載します。
1番目がCtrl+Cシグナル、3番目がCTRL+Dシグナルを送っている部分です。

Petite Chez Scheme はこのCTRL+Cでインタラプトがかかっています。
SML/NJはこのCTRL+Dでインタラプトがかかっています。

Gauche/Win、Mosh/WinではうまくCTRL+Cがかかっていません。
prolog_eにおいても同様です。

以下Delphiコードです。

program ChezSpawn;

{$APPTYPE CONSOLE}

uses
SysUtils, Windows, Messages;

var
CmdLine,Startup: string;
h: array[0..3] of THandle;
ClassName: array[1..20] of Char;
hwndCloseWindow: HWND;
StartInfoCh: STARTUPINFO;
ProcInfo: PROCESS_INFORMATION;
Window: string;
I: integer;
label
CloseExit;
begin
{ TODO -oUser -cConsole Main : ここにプログラムコードを書いてください }
CmdLine := ParamStr(4);
Startup := ParamStr(5);
CmdLine := CmdLine + ' ' + Startup;
h[0] := StrToInt(ParamStr(1)); //interrupt
h[1] := StrToInt(ParamStr(2)); //CtrlBreak
h[2] := StrToInt(ParamStr(3)); //CtrlD

GetStartupInfo(StartInfoCh);
with StartInfoCh do
begin
wShowWindow := SW_HIDE;
dwFlags := STARTF_USESHOWWINDOW;
end;
CreateProcess(nil,
PChar(CmdLine),
nil,
nil,
true,
CREATE_NEW_PROCESS_GROUP,
nil,
nil,
StartInfoCh,
ProcInfo);

while true do
case WaitForMultipleObjects(3,@h,false,INFINITE) of
WAIT_OBJECT_0 + 0:
begin
GenerateConsoleCtrlEvent(CTRL_C_EVENT,ProcInfo.dwProcessid);
end;
WAIT_OBJECT_0 + 1:
begin
GenerateConsoleCtrlEvent(CTRL_BREAK_EVENT,ProcInfo.dwProcessid);
GenerateConsoleCtrlEvent(CTRL_BREAK_EVENT,ProcInfo.dwProcessid);
GenerateConsoleCtrlEvent(CTRL_BREAK_EVENT,ProcInfo.dwProcessid);
GenerateConsoleCtrlEvent(CTRL_BREAK_EVENT,ProcInfo.dwProcessid);
GenerateConsoleCtrlEvent(CTRL_BREAK_EVENT,ProcInfo.dwProcessid);
GenerateConsoleCtrlEvent(CTRL_BREAK_EVENT,ProcInfo.dwProcessid);
GenerateConsoleCtrlEvent(CTRL_BREAK_EVENT,ProcInfo.dwProcessid);
GenerateConsoleCtrlEvent(CTRL_BREAK_EVENT,ProcInfo.dwProcessid);
Window := 'ConsoleWindowClass';
strcopy(@ClassName,PChar(Window));
hwndCloseWindow := FindWindow(@ClassName,nil);
PostMessage(hwndCloseWindow,WM_CLOSE,0,0);
goto CloseExit;
end;
WAIT_OBJECT_0 + 2:
begin
GenerateConsoleCtrlEvent(CTRL_BREAK_EVENT,ProcInfo.dwProcessid);
end;
end;

CloseExit:
for I:= 0 to 2 do
CloseHandle(h[i]);

end.
全部読む 最新50 1-100 板のトップ リロード

1 WindowsXPでもhelpが表示されません
佐藤 司 2010-4-9 17:10:43  MAIL  [返信] [編集]

WindowsXPで?-help.と入力すると、yesが帰ってきますが、「prolog.hlpファイルが見つかりません。」のエラーが出ます。
2 Re: WindowsXPでもhelpが表示されません
kisa 2010-4-14 18:29:31  [返信] [編集]

Ver6をDLして使用しています。

?-help.ではなく、?-manual.ですね。

これから、めかぶ、かぼちゃをインストール

しようと思います・・・。







全部読む 最新50 1-100 板のトップ リロード

1 AZ-Prolog /win Emacs対応版
sasagawa888 2011-5-18 19:50:56  [返信] [編集]

prolog_e ありがとうございました。早速使わせていただきました。私は普段、Emacsを使うことはなく、自作エディタのChezEditというものと使っています。win32ビット版、問題なく動作しました。

当初、?- を入力しなければならないことに戸惑いましたが、慣れてしまうとassertが要らないので便利ですね。

ありがとうございました。PrologはAZをメインで使わせていただきます。
全部読む 最新50 1-100 板のトップ リロード

1 文字化けの原因
sasagawa 2011-5-25 22:49:18  [返信] [編集]

version 6.71 (Win32/x86) でChezEditでの文字化けについて調べていました。ある程度、判明しましたのでご報告します。SJISの場合です。

例えば「父」はコード9583(16進)ですが、なぜか95の1バイトだけが最初に書き込まれ、その後に83、さらにそのあとに続く漢字のコードが書き込まれてるようです。95の1バイトはアスキーコードにないので文字化けしているように思います。

漢字コードを2バイト一緒に書き込むようにしていただけると文字化けせずに表示できると思います。お手数ですがお試しいただけないでしょうか。
全部読む 最新50 1-100 板のトップ リロード

 新規投稿 | スレッド表示 | ツリー表示 | 投稿順表示 | i-mode 

管理者ログインサイト利用条件SOFNEC ホームページ
ソフネック株式会社