Home フォーラム AZ-Prologサポート掲示板 cputime/0 動作しますか?

  • このトピックには4件の返信、1人の参加者があり、最後に上間健により7年、 6ヶ月前に更新されました。
4件の返信スレッドを表示中
  • 投稿者
    投稿
    • #58468
      上間健
      ゲスト

      次は述語マニュアルからのコピペです。
      q(8) を 自分で準備できるクイーンに差し替え実行しました。
      | ?-S is cputime, test, T is cputime – S.
      <略>
      [9,7,2,4,1,8,5,3,6]
      [9,7,3,8,2,5,1,6,4]
      [9,7,4,2,8,6,1,3,5]
      no
      | ?-

      S と T が最後に表示されませんでした。

      q(8)のプログラムはどこでてにはいりますか?
      そしてそれを実行すればS と T が表示されますか?
      一般的Prologコードの実行時間はどうすれば計測できますか?

      よろしくお願いします。
                          上間

      【実行例】

      8クィーンの全解の時間を求めます。
      | ?-[-‘queen.pl’].
      yes
      | ?-S is cputime,q(8),T is cputime-S.

      S = 1374824918.94200,
      T = 0.473000049591064

      この例では8クィーンの全解が約0.47秒かかった事が分かります。

    • #58469
      稲葉
      ゲスト

      1)S と T が最後に表示されない
        のは、述語test/0 がFailしているのでTopGoal全体がFailしているからです。

       ?-S is cputime,(test;true), T is cputime – S.
      とでもすればよろしいでしょう。

      2)q(8)のプログラムはどこでてにはいりますか?
       インストールDIR/sample/other/queen.pl
      にあります。

      3)時間計測は表示処理をコメントアウトして実処理時間だけでおこないます。
        解が多量に出力されるようなプログラムではwrite/1の処理だけ計測している
        ことになります。

      4)ほとんどのProlog処理系共通でつかえる繰り返し時間計測処理
      インストールDIR/bench/harness.pl
      にありますので、ご参照ください。

    • #58470
      上間
      ゲスト

      稲葉さん
      ありがとうございます。

      稲葉さんがお示しした質問はエラーになります。
      | ?-S is cputime,(test;true), T is cputime – S.
      Syntax error
      | ?-

      ===========================
      ここで実行しているqueens.pl をコピペします。
      どこが行けないのでしょうか?

      〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
      % 9-queens program

      test :- queen([1,2,3,4,5,6,7,8,9],X),write(X),nl,fail.

      queen(Data, Out) :-
      queen_2(Data, [], Out).

      queen_2([], _, []).
      queen_2([H|T], History, [Q|M]) :-
      qdelete(Q, H, T, L1),
      nodiag(History, Q, 1),
      queen_2(L1, [Q|History], M).

      qperm([], []).
      qperm([X|Y], [U|V]) :-
      qdelete(U, X, Y, Z),
      qperm(Z, V).

      qdelete(A, A, L, L).
      qdelete(X, A, [H|T], [A|R]) :-
      qdelete(X, H, T, R).

      safe([]).
      safe([N|L]) :-
      nodiag(L, N, 1),
      safe(L).

      nodiag([], _, _).
      nodiag([N|L], B, D) :-
      D =\= N – B,
      D =\= B – N,
      D1 is D + 1,
      nodiag(L, B, D1).
      〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

    • #58471
      稲葉輝
      ゲスト

      | ?-S is cputime,(test;true), T is cputime – S.
      の最後の”-”が字化しています。
      コピペせずに手打ちしてください。

    • #58472
      上間健
      ゲスト

      稲葉さん

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

      実行できました。

      〜〜〜〜〜〜〜〜
      実行画面
      〜〜〜〜〜〜〜〜
      AZ-Prolog Version 9.53 (Linux/x64)
      Copyright (C) SOFNEC CO., LTD. 1987-2016/09/11
      | ?-S is cputime, ( test ; true ) , T is cputime – S.
      <省略>
      [9,7,2,4,1,8,5,3,6]
      [9,7,3,8,2,5,1,6,4]
      [9,7,4,2,8,6,1,3,5]
      S = 1477464343.71518,
      T = 0.123245000839233
      yes
      | ?-
      〜〜〜〜〜〜〜〜

4件の返信スレッドを表示中
  • フォーラム「AZ-Prologサポート掲示板」には新規投稿および返信を追加できません。
上部へスクロール