中学$PROLOGロゴ


HUMANOTE/中学$PROLOG 3.3 使い方マニュアル

はじめに、なぜ「思考プログラミング」か?

「中学$PROLOG」は、伝統的な論理プログラミング言語「PROLOG」をヒントに、 誰もが「自分の言葉」で「論理プログラミング」に慣れ親しんで頂けるよう、 当社で独自に開発した「論理プログラミング言語」です。
PROLOGの強力な自動証明機能や解探索機能を継承しつつ、 新たに「ふだんの言葉のままで」そうした機能による論理的な思考を進められるようにしています。 ネットワークを活用した知識の実行時補足機能も、推論を強力にサポートします。

従来の論理プログラミングには、次のような特徴がありました。
1) C(++)言語やJAVA等の「手続型プログラミング言語」に比べて論理(独立性の高い宣言的知識)を簡潔に表現できる。
2) 表現された論理を組み合わせて、「根拠の伴った」結論や「連立式を同時に充足する」解集合を、健全(考え違いがない)かつ必要な完全性(考えモレがない)をもって自動的に導ける(自動証明と解探索)。

しかし、その代表格である伝統的なPROLOGにおける「一階述語論理」の表現は、次のように、例えば中学生には慣れ親しみにくいものでした。
A 「太郎はラーメンがメッチャ好き」等といった利用者がふだん用いている言葉使いを取り扱うのは不得意であり、「好き(太郎,ラーメン)」等といった一定の形式の「述語論理式」に直す必要がある。
B 知識を交換したり解釈したりするためには、「述語論理式」において主語、述語、目的語等が出現する順番を事前に取り決め、これに沿ってプログラミングすることが必要になる。

「中学$PROLOG」は、伝統的なPROLOGにおけるこのような問題を、言語検索と推論(演繹)とを数学的に統合した「言葉方程式」として解決する等、「誰もが」論理プログラミングに気軽に慣れ親しんで頂けるように様々な工夫をした結果、より一般的な思考プロセスをシミュレーション/追跡できる「思考プログラミング言語」として発展してきました。
本書では、「思考プログラミング言語」である「中学$PROLOG」(V3.3)自体の説明とともに、この「思考プログラミング言語」をコンピュータで動作させる統合インタープリタソフトウエア「HUMANOTE」の説明も行います。「HUMANOTE」はインタープリタであると同時に、論理を補足する根拠等を求めてインターネット上を論理的にサーフィンできる「論理サーフィンブラウザ」ソフトとしても動作します。

21世紀の人工知能時代を、誰もが「論理サーフィン」できる、新しい「思考プログラミング」の力を、是非ともお楽しみください。

企画・開発・販売責任者
ナレルシステム株式会社 代表取締役
中村 圭介

1.何ができて、何ができないか? PROLOGとの簡単な比較

何ができるか?

  • PROLOGと同様のファクトとルールによる(宣言型)述語論理プログラミング(新概念の構成要件の定義と再帰的な論理展開)
  • ふだん使っている自由な言葉(=標準的な辞書、格構造、語用論がない。方言、外国語、造語等も可能)での自動推論(演繹)
  • プログラムの書かれたリストファイル間引用関係のユーザー定義並びに実行時引用による知識/データ連携(LOR/LOD)
  • 個人用/組織用/公開用の知識ベースの個別運用、並びに、実行時引用による相互連携
  • 思考シミュレーション(①クローズドクエスチョン(=変数なし)、②オープンクエスチョン(=変数あり)、③前向き推論)
  • 思考シミュレーションのための便利な文法(4つのOR、2つのNOT、差分質問、連続主張、挨拶構文、逆質問、等)
  • 発明・マーケティング・行動アイディア等の自動合成(価値観の定義と利用、科学的/道義的にありえない解の排除等も可能)
  • 音声認識/合成、推論、タイマー、マルチメディア、手続管理等を利用した案内、話し相手、思い出箱、教育、暗記支援、LOR式地域探訪共創アドベンチャーゲーム等の制作
  • 判断や解(複数可)の「根拠の表示」(ツリー形式)、並びに、思考(判断や探索)の「過程(プロセス)」の表示(トレース)
  • 思考プログラミングと思考実験を通じて、論理学の基本を習得し、論理的に自ら考える/機械に考えさせる自信を醸成すること
    →個人(や組織)の想像力と創造力を増幅し、身近な気づき等を発明や社会的な成果に繋げ、個の生きがいの向上に資する
  • 現状で何ができないか?

  • 機械学習(ディープラーニング、データマイニング等。ただし、機械学習による判断を論理的に統合する受託開発等は大歓迎)
  • 数値や文字列の複雑な演算や比較(但し、手続的解釈の途中において、簡単な演算・比較・代入は可能。今後改善予定)
  • PROLOGの一部の機能(カット、リスト等の難解な機能。カットは代替機能を用意済。リスト構造は今後対応予定)
  • 伝統的PROLOG、その記法の例との簡単な比較

  • PROLOGは1972年ごろにフランスにおいて論理学をもとに考案された主に教育用の論理プログラミング言語です。
  • プログラミング言語とは、コンピュータで動かす「プログラム」を作る時に使う「ことば」の集合です。
  • PROLOGでは「りんごは果物」という意味の文を「果物(りんご).」と書きます。
  • 中学$PROLOGではこのような書き方ではなく、「りんごは果物」という自分の言葉のまま書くだけでも推論の根拠(事実、ルールの要件)となるように作られています。
    一見、命題論理しか扱えないように見えますが、変数のついたヘッドやボディの条件式が「$Xは果物」であったり「${買ったもの}は果物」であったりしますので、一致(ユニフィケーションと呼びます)の際に、自然と主語や述語(や目的語等も)を意識したものになります。
  • 2.インストール等、初回起動、ライセンス認証

    動作要件

  • Windows 7,8,10に対応、メモリ1GB以上、ディスク空き容量200MB以上
  • インターネット接続(認証や実行時引用機能に必要)
  • .NET Framework 4 以降のインストール(Windows 7では事前インストールが必要)
  • - 動作要件確認プログラムにより、NET Framework 4 以降がインストールされているかを確認できます。
    - 上記のリンクから確認出来ない方は、インストールされた"html"フォルダ配下の"prolog_html.files"フォルダ内の"dotnet-installcheck.bat"をダブルクリックして実行して下さい。
    - .NET Framework 4 Client Profileのダウンロード

    インストール

    インストールの具体的な手順
    0.【Windows7の場合のみ】事前インストールを実行
    Windows7の場合は、先述したとおり、.NetFramework4以上がインストールされていることをご確認ください。
    また、Windows7の場合は、以下のファイルをマイクロソフト社のダウンロードサイト1(SpeechPlatformRuntime,SpeechPlatformRuntime64)ダウンロードサイト2(MSSpeech_TTS_ja-JP_Haruka)等からダウンロードし、以下の順番でインストールしてください。
  • SpeechPlatformRuntime.msi
  • SpeechPlatformRuntime64.msi(WindowsがOSとして32ビットの場合は不要)
  • MSSpeech_TTS_ja-JP_Haruka.msi
  • 1.インストーラ実行
    WindowsのバージョンおよびOSのビット数(機械のではない)に応じて、解凍したZIPファイル(※)によりできたフォルダ中から、以下のいずれかのインストーラ(※)を実行します。CD/USBメディアに記録されたもの、メールに添付されたもの又はダウンロードしたもの。
  • win7_32bit_setup.exe win7_64bit_setup.exe
  • win10_32bit_setup.exe
  • win10_64bit_setup.exe
  • 2.使用許諾契約
    ソフトウェア使用許諾契約書を注意してお読みください。使用許諾契約の条項に同意していただけた場合のみ、インストールを進めることができます。

    3.インストール先の設定
    ディスクの空き容量(200MB以上)を確認して、インストール先を設定してください。 ※"Program Files"など、アクセス許可が必要なディレクトリに設定すると、正常に動作しないことがあるのでご注意ください。通常のドキュメントフォルダでも多くの場合、正常に動作します。

    4.インストール内容の確認
    インストールする内容(およびユーザー情報)が表示されます。

    5.インストール開始
    インストールを開始します。 インストール先ディレクトリが作成済みの場合、その中のファイルは上書きされます。

    6.インストール完了
    インストールが完了したことを確認してください。
    ※必要なファイルの追加インストールを推奨される場合がありますので、未インストールの場合は追加インストールを行ってください。
    管理者権限
    インストールの条件によっては、一部の機能がそのままでは使えない場合があります。
    そのような場合は、以下のようにjdprolog.exeを管理者権限で実行するように設定してください。

    1.jdprolog.exeを一度終了して下さい。

    2.jdprolog.exe(ショートカットでも可)のプロパティを右クリックで開きます。

    3.「互換性」タブの「すべてのユーザーの設定を変更」をクリックします。

    4.「すべてのユーザーの互換性」タブが表示されますので、「管理者としてこのプログラムを実行する」にチェックを付けて[OK]を押します。

    5.jdprolog.exeを起動して下さい。

    初回起動時の安全確認(Windows 8.1,10の場合のみ)

    1.初回起動時、「WindowsによってPCが保護されました」と表示されることがあります(SmartScreen機能)。

    2.「詳細情報」をクリックします。

    3.「実行」ボタンをクリックすると、アプリケーションが起動します。

    4.次回以降は、本アプリケーション(HUMANOTE/中学$PROLOG)について、この確認は行われなくなります。

    起動とライセンス認証

    まずは中学$PROLOGを起動してみましょう。jdprolog.exeをクリックして起動してください。

    初めて起動する場合は、プログラムの動作範囲が5行に制限されています。ライセンス認証を行うことによりより多くの範囲が使用可能になります。
    「メニュー」→「ヘルプ」→「ライセンス認証」とクリックするとメールアドレス及び認証コードを入力する画面が表示されます。
    中学$PROLOGを購入頂いた際にご登録頂いたメールアドレス及び通知された認証コードを入力してください。

    3.プログラミング例

    中学$PROLOG画面

    上の画像に対応したプログラミングプロセス

    プロセス
    1.正しいと思っていること(認識)を、自分の言葉で蓄積していきます。
    → 例.「生きるためには食べなければならない」 「みかんは食べ物」

    2.インターネットの知識や情報を、コピーペーストにより、リストに追加登録して認識を補足することもできます。
    → 例.「みかんはカゼの予防になる」

    3.自分の言葉におきかえるためのルールをリストに登録することにより、インターネット等から引用する内容を、その後の推論に活かしやすくなります。
    → 例.「$Aの予防には$B :- $Bは$Aの予防になる」

    4.自分の言葉におきかえるためのルールだけでなく、新しい仮説や案を、推理・生成するためのルールも、自ら定義することができます。
    → 例.「$Bを粉にして$Aの予防薬を作る :- $Aの予防には$B;$Bは食べ物又は飲み物」
         「$Xは食べ物又は飲み物 :- $Xは食べ物」
         「$Xは食べ物又は飲み物 :- $Xは飲み物」

    5.「質問」を行うと、これまでリストに登録した「認識」内容をもとに証明可能な「答え」が推論(自動証明と解探索)されます。
    → 例. 質問文「?$X予防$Y」
    ⇒ 答え「$X=みかんを粉にしてカゼの、$Y=薬を作る」
      ?$X予防$Y
        [5] $Bを粉にして$Aの予防薬を作る :- $Aの予防には$B;$Bは食べ物又は飲み物;
          [4] $Aの予防には$B :- $Bは$Aの予防になる;
            2 みかんはカゼの予防になる
          [6] $Xは食べ物又は飲み物 :- $Xは食べ物;
            3 みかんは食べ物

    6.思った答えが出てこない場合は、登録した事実やルールが足りない場合や間違っている場合がありますので、事実やルールを追加登録(又は修正)することになります。
    → 例.「しょうがは食べ物」
         「しょうがはカゼの予防になる」
    → 例. 質問文「?$X予防薬$Y」
    ⇒ 答え「$X=しょうがを粉にしてカゼの、$Y=を作る」
       ?$X予防薬$Y
        [5] $Bを粉にして$Aの予防薬を作る :- $Aの予防には$B;$Bは食べ物又は飲み物;
          [4] $Aの予防には$B :- $Bは$Aの予防になる;
            7 しょうがはカゼの予防になる
          [8] $Xは食べ物又は飲み物 :- $Xは食べ物;
            6 しょうがは食べ物

    4.ちょっとだけ実際にやってみる

    1.事実をリストとして登録

    リストは事実又はルールの集まりです。送信を行うたびに登録・蓄積されていきます。
    まずは自分の知っている簡単な事実(認識)を入力してみましょう。

    例:りんごは果物である


    入力が終わりましたら、右の[送信ボタン]を押してください。F5キーを押すか[ENTERキー]を押すことによっても送信することが出来ます。
    上の表示ログ欄に、入力した文章及び「リストに追加しました」というメッセージが表示されたはずです。
    ☆参考:「事実

    2.単純なルールをリストとして登録

    ルールも入力してみましょう。
    ルールは「〇〇なら☓☓である」という内容であり、複数の「〇〇」と「☓☓」を、「:-」及び「;」という記号で区切って表記します。
    事実と同様に、登録するルールを入力して送信をすると、「リストに追加しました」と表示されるはずです。
    また、改行で区切った複数の事実やルールを入力して送信すると、複数の事実やルールを一括して登録することができ、便利です。

    例:りんごは木の実である :- りんごは果物である


    ☆参考:「ルール

    3.変数つきのルールをリストへ追加

    リストには、単純なルールだけでなく、変数つきのルールも追加できます。

    例:$Xは食べ物である :- $Xは果物である


    ☆参考:「変数

    4.リストを表示

    [#list]・・・現在のリストをすべて表示
    →このコマンドを送信するか、[Ctrlキー + Lキー]を押すことにより、現在のリストに含まれる事実やルールを表示して確認することが出来ます。
    [#list 行番]・・・行番で指定した行の内容を表示
    →現在のリストの指定された行の内容が表示されます。


    例:上記の例で使われた事実やルールをリストに登録した状態

    りんごは果物である
    りんごは木の実である :- りんごは果物である;
    $Xは食べ物である :- $Xは果物である;


    5.もうちょっとサンプル

    他の基本サンプル

    上の画面説明の、「⑨ホームボタン」を押してホームリストに移動し、各種のサンプルをお試し下さい。

    自己紹介(スライドシェアへ移動)

    過去の教室例

    論理サーフィン1(ORルールを用いた例)

    ORルール(":|"区切り)により、インターネット上の知識を論理サーフィンする例です。様々な知識を幅優先で幅広く探し、お宝を見つけたら真を返して終了します。

    まず、ホームボタン(HM)を押してホームリスト(home.jpl)に移動し、入力欄から[?論理サーフィンテスト1]と入力して送信ボタンを押すと「論理サーフィンテスト1」にさらに移動します。
    リスト表示欄(青色の欄)が下の図のようになったら、入力欄に[お宝は$X]と入力して送信ボタンを押すと、次の図のようになります。さらにF9ボタンを押すと、論理サーフィンを行ったトレース結果が表示されます。

    サンプル画面1

    https://humanote.xyz/free/lsb001/A.jplの中身

    兼六園は花見シーズン無料になるときがある
    千里浜は車に乗ったまま波打ち際をドライブできる

    https://humanote.xyz/free/lsb001/B.jplの中身

    明日の金沢は晴れ
    明日の$Xは傘がいらない :- 明日の$Xは晴れ ;

    https://humanote.xyz/free/lsb001/C.jplの中身

    お宝=$X :- #req_ "https://humanote.xyz/free/lsb001/D.jpl" ; TREASURE=$X ;
    ゴミ=いらないパスワードは□□□

    https://humanote.xyz/free/lsb001/D.jplの中身

    TREASURE=プレゼントパスワードはABC
    サンプル画面2
    サンプル画面3

    論理サーフィン2(探検ルールを用いた例)

    探検ルール(":~"区切り)により、インターネット上の知識を論理サーフィンする例です。"~"条件が成立(お宝不存在)するときに、先(新しい知識の補足コマンド(#req等))に進み、お宝を見つけたら真を返して終了します。

    まず、ホームボタン(HM)を押してホームリスト(home.jpl)に移動し、入力欄から[?論理サーフィンテスト2]と入力して送信ボタンを押すと「論理サーフィンテスト2」にさらに移動します。
    リスト表示欄(青色の欄)が下の図のようになったら、入力欄に[お宝3は$X]と入力して送信ボタンを押すと、次の図のようになります。さらにF9ボタンを押すと、論理サーフィンを行ったトレース結果が表示されます。 サンプル画面4
    サンプル画面5
    サンプル画面6

    6.仕様一覧(お試し)

    01.閉世界仮説

    閉世界仮説(へいせかいかせつ)とは、真であると証明できないことは偽とみなす考え方です。

    02.事実

    「事実」は、変数を含まない文字列の形式をとります。
    また、事実は"真であると当初から定義された命題"でもあります。 したがって、例えば「僕は幸せになりたい」といった事実がクエリ「僕は幸せになりたい」とマッチした場合、クエリはその日本語としての意味にかかわらず真を返します。 また、「僕は$Xになりたい」等のように、クエリに変数が含まれている場合、事実は変数の定数解を与えることにつながります。
    ☆参考:「命題(論理学)

    03.ルール

    ルールは、例えば「☆☆ならば□□」、「◯◯かつ××かつ△△ならば□□」といったように(□□の)十分条件を表現したものです。
    条件となる部分(例では「☆☆」と「◯◯かつ☓☓かつ△△」)をボディといいます。ボディ内はAND結合です。 結論となる部分(例では「□□」)をヘッドといいます。 中学$PROLOGでは、"ならば"を「:-」という記号で、"かつ"で連結される条件集合を「;」で区切って一行で書きます。
    例は、「☓☓:-◯◯」や「□□:-◯◯;××;△△」と書けます。

    04.変数

    変数は「なんらかの値が入る」ことを意味する記号です。
    「$X」あるいは「${変数名}」という形で、「$」につぐ一文字の大文字アルファベットで表記するか、または、「$」につぐ「{}」(中括弧)で変数名を囲んで表記します。

    05.リスト

    リストとは事実やルールを並べたものです。
    「.jpl」という拡張子で保存や読込を行うことが出来ます。「メモ帳」等で編集することもできます。
    伝統的なPROLOGのいわゆる「リスト」の定義とは異なり、中学$PROLOGの「リスト」はプログラミング言語BASICの「リスト」に近いものです。

    06.命題(論理学)

    中学$PROLOGにおいて、「命題」は、変数や「?」を含まない固定文字列の形式をとります。
    いくつかの変数を含む文字列(クエリ)であっても、全ての変数に定数(固定文字列)が代入される(束縛される)と、命題となります。

    07.コマンド一覧

    08.サブ問合せ(サブクエリ)

    中学$PROLOGの推論(自動証明と解探索)において、 「真偽を証明したり解を探索したりする主題」を表したものを「問合せ(クエリ)」と呼びます。「サブクエリ」は「クエリ」の一種です。
    「利用者による質問」は、一つの自動推論において、その主題となる「最初の問合せ(クエリ)」です。
    中学$PROLOGは、 「最初の問合せ(クエリ)」である「(利用者による)質問」を、 リスト中の「ルール」によって複数の別のクエリ(サブクエリ)に置き換えたり分解したりすることで、 その「(利用者による)質問(=最初の問合せ(=クエリ))」をさまざまな論理構成で証明しようとします。
    この時、行の間はOR結合、同じルールの条件式の間はAND結合となります。

    09.送信

    入力欄に入力された内容を中学$PROLOGが実行します。
    [送信ボタン]を押す、F5キーを押す又は[ENTERキー]を押すことにより送信出来ます。

    10.表示ログを出力

    「メニュー」→「ファイル」→「表示ログを出力」
    現在、表示ログ欄に蓄積されている内容の全てを「.log」という拡張子が付いたファイルに保存します。

    11.メニューの詳細項目

    詳細
  • 「メニュー」→「操作/表示」→「全体リスト表示/req有又はファイル指定質問の場合」
  • 全体リストとは、req文やファイル指定質問によって動的に読み込まれているリストファイルを含めたリストのことです。
    例えば、req文実行時、その効果はその場所以降(ボディ内のreq文より右側)の条件をサブクエリとした探索が全て終わるまでです。
    そのため、解を返すときに動的に読み込まれた全体リストを強制表示して、利用者が根拠全体を確認できるようにします。


  • 「メニュー」→「操作/表示」→「エラー判別/リスト登録時の重複」
  • リスト登録する内容が、すでに登録された内容と同じものでないか判別します。
    リスト読み込み時は、ワーニング(警告)メッセージが表示され、リストに登録されます。
    入力欄からの送信時は、エラーメッセージが表示され、リストに登録されません。


  • 「メニュー」→「操作/表示」→「エラー判別/登録時の単純相互再帰」
  • リスト登録する内容が、すでに登録された内容の、ルールヘッドとルールボディが入れ替わったものでないか判別する際に使います。
    ヘッドとボディが入れ替わったルールがある場合、お互いのヘッドとボディがマッチしてしまうため、2つのルールが互いにマッチする相互再帰になり、探索で無限ループが発生してしまうためです。
    相互再帰になる場合でも、変数は同じ文字列でなければ判別されません。


  • 「メニュー」→「操作/表示」→「無限ループの非表示」
  • 推論中に無限ループが発生した場合、無限ループに関するエラーメッセージの表示を行わないようにします。
    無限ループには影響せず、推論の結果は変化しません。また、トレースの無限ループに関する内容は影響せずに表示されます。

    12.質問

    「質問」とは
    中学$PROLOGに対して、利用者が直接に問う内容(=問合せ(=クエリ))を「(利用者による)質問」と呼びます。
    「質問」には、解(または解組)を求めるために変数(または変数組)を含むもの(オープンクエスチョン形式。例えば「?僕の適職は$A」)と、 真偽のみを問うもの(クローズドクエスチョン形式。例えば「僕の適職はお笑い芸人?」)とがあります。

    いずれも、質問の内容を表す文字列の先頭に「?」をつけることにより「(利用者からの)質問」とみなされる質問文になります。 「質問」は、質問文を入力欄から送信することにより実行します。
    変数を含む文字列からなるオープンクエスチョン形式の質問文は、解を要求している質問となり、 答えに「解」(又は解の集合)が含まれますが、 変数を含まないクローズドクエスチョン形式の質問文に対しては、 答えに真偽のみが含まれます。また、いずれの場合も、答えの後に次の「根拠ツリー」が示されます(オプションがONの時)。

    13.リストを作るポイント

    表記ゆれに気をつける
    例えば、簡単な事実を登録するには「○○は××」で統一しましょう。
    あるいは、「$X:-$Xである」というルールを追加して、「××」と「××である」とを同一視するようにすることも可能です。
    しかし、表記ゆれを吸収する処理が加わる分、スピードが遅くなります。
    全角・半角、スペースについて
    以下の記号はプログラムが半角へと標準化するため、入力する際、全角・半角を意識する必要はありません。

    各種のスペース文字もプログラムが標準化します。登録後の内容を確認する際はご注意ください。
    スペルミスに注意
    一文字でも違うと、異なる命題、異なる事実、異なるクエリとなります。スペルミスには気をつけましょう。
    print命令を組み込む

    print文は書式内の変数に入る内容が見つからない場合、偽を返して、そのルールの探索を終了します。
    書式は固定文字列と変数が混在するものを扱えますのでリストのデバッグに便利です。
    終了時、起動時のリスト
    終了時に登録されているリストは自動的に保存され、次回起動時に自動的に読み込まれます。 保存先のファイル名は「default.jpl」です。

    16.ショートカットキー

    表示ログ上のショートカットキー
    キー操作 操作内容
    Ctrlキー + C コピー
    Ctrlキー + A すべて選択

    リスト表示欄のショートカットキー
    キー操作 操作内容
    Ctrlキー + A リスト表示欄をすべて選択
    Ctrlキー + C リスト表示欄で選択した項目を、現在のリストからコピー
    delete リスト表示欄で選択した項目を、現在のリストから削除
    ダブルクリック ヘッドの実行/事実の主張/差分質問文送信
    Ctrlキー + ダブルクリック 一時無効化、一時無効化解除

    メイン画面でのショートカットキー
    キー操作 操作内容
    Ctrlキー + S リストをファイルに上書き保存する
    Ctrlキー + L 現在のリストを表示する
    Ctrlキー + P 印刷
    Ctrlキー + O リスト読み込み
    Ctrlキー + A すべて選択
    Ctrlキー + T 連続コマンドクリア
    Ctrlキー + F1 マニュアル表示
    Ctrlキー + C 中断関連処理 (発声中断 探索中断フォーム表示 読込中断メッセージボックス表示)
    PAUSE 中断関連処理 (発声中断 探索中断フォーム表示 読込中断メッセージボックス表示)

    入力欄上でのショートカットキー
    キー操作 操作内容
    F1 CC(一時文脈クリア) + 入力欄クリア + 表示ログのクリア
    Ctrlキー +F1 ローカルのマニュアル表示
    Shiftlキー +F1 ネットのマニュアル表示
    F2 load(新規読込)
    Ctrlキー +F2 ネット読込(使える場合)
    Shiftlキー +F2 追加読込
    F3 save(上書き保存)
    Ctrlキー +F3 ネット保存(使える場合)
    Shiftlキー +F3 save(上書き保存) + ネット保存(使える場合)
    F4 現在のリストを表示する
    Shiftlキー +F4 印刷
    F5 入力欄の内容を送信(入力欄に何もなければ、$A送信)
    Shiftlキー +F5 入力欄の頭に?を付ける(既に頭に?があったらそれを削除)
    F6 入力欄の文字列の文中に変数をつける
    F7 入力欄の文字列の末尾に変数をつける(先頭一致)
    F8 コマンドヒストリバック(今より一つ前のコマンドを表示する)
    Shiftlキー +F8 コマンドヒストリフォワード(今より一つ後のコマンドを表示する)
    F9 トレースモードを実行する(兄弟のトレース)
    F11 トレースモードを実行する(子供のトレース)
    F12 "前後に変数を挿入して送信「${_L_}〇〇〇${_R_}」(先頭に?(質問文)の場合、?の後に変数を加える)
    Ctrlキー + S リストをファイルに上書き保存する
    Ctrlキー + L 現在のリストを表示する
    Ctrlキー + P 印刷
    Ctrlキー + O リスト読み込み
    Escキー 入力欄クリア
    入力欄の最後尾で「↓」 コマンドヒストリバック(今より一つ前のコマンドを表示する)
    ENTER 入力欄の内容を送信する
    Ctrlキー + ENTER 入力欄の内容を改行する

    17.便利なマウス操作

    ・ボタン画面に行かなくても実行したいリストの項目を「クリック」で実行できます。
    ・コメントアウトとソースインは「Ctrl+ダブルクリック」で行います。

    18.一時文脈

    ■・・・

     利用者が一時的に登録した、ディスクやネットに保存されていないプログラム(事実&ルール)です。
     一時的な情報を活かした診断などの推論に用いられます。

    19.肯定文(こうていぶん)/一時文脈(いちじぶんみゃく)

    ■○○○

     一時的な仮定です。セーブすると、「■」が消えて、「肯定文(思考プログラム)」になります。

    20.定型応答節(ていけいおうとうせつ)

    ○□○ ; ○△○ :: □□□ ; △△△ ; ○○○ ;

     左辺はそれぞれがボタン画面に表示されます(変数付き文字列を除く)。
     入力欄や音声合成による質問文が左辺のいずれかとマッチ(完全一致)した場合、右辺のいずれかをランダムに応答します。

    19: こんにちは ; 晴れましたね :: こんにちは ; いい天気ですね ;
    20: ///★「?こんにちは」か「?晴れましたね」と質問すると「こんにちは」か「いい天気ですね」と回答してくる。


    22:こんばんは :: こんばんは ; おつかれさまです ;
    23: ///★「?こんばんは」と質問すると「こんばんは」か「おつかれさまです」と回答してくる。

    21.変数(へんすう)のついた応答節(おうとうせつ)

    ○□○ ; ○△○ :: □□□ ; △△△ ; ○○○ ;

     左辺はそれぞれがボタン画面に表示されます(変数付き文字列を除く)。
     入力欄や音声合成による質問文が左辺のいずれかとマッチ(完全一致)した場合、右辺のいずれかをランダムに応答します。

    24: 太郎は$A ; $Bは長男 :: $Aは写真がいっぱい ; $Bはおっとりしてる ;
    25:///★「?太郎は弟」と聞くと「弟は写真がいっぱい」と回答してくる
    26:///★「?後藤は長男」と聞くと「後藤はおっとりしている」と回答してくる
    27:///★「!!!太郎は長男」と聞くと「長男は写真がいっぱい 」と「:太郎はおっとりしてる 」と回答してくる


    22.ボタンルール(ボタンホーン節)

    ○○○ :& □□□ ;

     ○○○をボタン画面に表示します(変数付き文字列を除く)。
     その他は、演繹ルールと同じです。

    29: じいちゃん釣りに行けるかも :& 晴れ ; 暖かい ;
    30: 雲がない
    31: 晴れ :- 雲がない ;
    32: 暖かい
    33: ///★ボタン画面(BS)を開き「爺ちゃん釣りに行けるかも」をクリックすると「YES」と回答する。また「雲がない」、「暖かい」などの条件を消すと「NO」と回答する

    23.マクロルール

    ○○○ :# □□□ ;

    【基本】  
     マクロルール「:#」は、右辺の「コマンドの列」(例えば、#list、#clear、#M ""...""、#S ""...""、#I ""...""、等が「;」で区切られて並んだものもの)に、左辺の「名前」をつけたものです。  
     「#」に左辺の「名前」をつなげた「#名前」を、入力欄から送信して、右辺の「コマンドの列」を順番に呼び出すことができます(「#」のかわりに「?」でもよい)。  
     左辺の「名前」は、変数付きである場合を除いて、ボタン画面に表示されます。  

     【右辺のコマンドに変数が含まれる場合】  
     基本的には、その変数を埋める答え(解)を求める質問を、コマンドの数だけ連続して送信するマクロをつくることになります。ここでは、コマンド間では、同じ変数名であったとしても異なる変数となり、同じ値が代入される(解として採用され、束縛される)わけではありません。  
     つまり変数のスコープが異なることになります。ただし、コマンド内では同じ名前の変数は同じ変数であり、同じ値が代入されることになります。  

     【名前が、変数付きである場合】  
     名前が変数付きである場合でも、そのマクロルールが、入力欄や音声認識やボタン画面から(「#」や「?」をつけて)呼ばれたときは、変数であることが無視され、変数のない名前として処理されます。すなわち、呼び出す側(例「#東京は首都」)と呼び出される変数付きの名前をもつマクロルール(「$Xは首都 :# ...略」)が変数に値を入れてマッチしうる場合でも、マッチはしないことになります。  
     この場合は、「#$Xは首都」という呼び出し方により、マッチさせることができます。  
     【マクロルールが、演繹ルールや他のマクロルールから呼ばれた場合】  
     この場合は、呼ばれたほうのマクロルールは演繹ルールとみなし、コマンドの列は条件式の列とみなされ、変数のスコープが式間で共通(同じ名前の変数には同じ値が入る)ということになります。  

     ===============================================================  
     ・マクロルールが演繹ルールから呼び出される例  
     ===============================================================  
     太郎は花子のそばにいたい  
     $Xのそばにいたい :# #M ""動画$Xの近くの幸せ.MOV"";  
     太郎は$Xが好き :- 太郎は$Xのそばいたい ; #$Xのそばにいたい ;  

     入力欄>?太郎は$A  
     →$X=花子    
     →""動画花子の近くの幸せ.MOV""が表示される  

     ===============================================================  
     ・マクロルールがマクロルールから呼び出される例  
     ===============================================================  
     太郎は花子のそばにいたい  
     $Xのそばにいたい :# #M ""動画$Xの近くの幸せ.MOV"";  
     太郎は$Xが好き :# 太郎は$Xのそばにいたい ; #$Xのそばにいたい ;  

     入力欄>#太郎は$Xが好き  
     →$X=花子  
     →NO(動画表示されない)  

     「コマンドの列」に変数が含まれる場合、これらは、コマンド間では別の変数を意味します(スコープが異なります)。  
     ただし、左辺の「名前」に含まれる変数(例えば、「$Xは雨 :# $Xは$Yが必要;」については、左辺が送信されたとき)の束縛は、ボディ部に波及されます。"

    258: 金沢から車で能登に行ける
    259: 東京から新幹線で金沢に行ける
    260: 東京から新幹線で盛岡に行ける
    261: 盛岡から徒歩で牛タン屋に行ける
    262: 新宿から山手線で東京に行ける
    263: $Xから$Yと$Zで$Dに行ける :- $Xから$Yで$Cに行ける ; $Cから$Zで$Dに行ける ;
    264: 新宿から :# 新宿から$X ;
    265: 能登へ新宿から$Xで :# 新宿から$Xで能登へ行く ;
    266:///★「$A」と記入して送信すると回答してくる。


    24.タイマーマクロ

    #▽▽▽ :# □□□ ;

     左辺がヘッドが「#」ではじまる▽▽▽に日時が記述されたマクロルールは、タイマーマクロです。  
     ▽▽▽の日時になったら、通常のマクロルールと同様に右辺を順番に実行します。  

    268:■ #2017/09/03_09:16:10 :# #speak "こんにちは" ;
    269:■ ///★動かす時間帯(これは2017/09/03 09:16:10)を設定して動かすと#speakによって「こんにちは」と言ってくる
    (このときタイマーのところにチェックを入れておきましょう)。

    25.価値観ルール(比較ホーン節)

    ○○○ :> □□□ ; △△△ ;
    比較区切りで示された観点および要素について指定した順番であることを確認して真偽を返します。
    「>」、「>=」、「=」を指定することができます。

    285: <%大事
    286: 友人の結婚式
    287: 家族の誕生日
    288: 友人の誕生日
    289: 友人と食事 ; 家族と食事 ; 親戚の食事
    290: >%大事
    291: $Aは$B以上に大事 :> %大事 ; $A>=$B ;
    292: $Aは$Bより大事 :> %大事 ; $A>$B ;
    293: $Aは$Bと同じく大事 :> %大事 ; $A=$B ;
    294: 誕生日は$Aが$B以上に大事 :> %$X ; $Aの誕生日>=$Bの誕生日 ;
    295: ///★「$A」と記入して送信すると回答してくる。


    26.前向きルール(自動確認ホーン節)

    ○○○ := □□□ ; △△△ ;
    ○○○ :=N □□□ ; △△△ ;
    ○○○ :%= □□□ ; △△△ ;
    ○○○ :%=N □□□ ; △△△ ;

     一時文脈として□□□又は△△△が新たに得られた場合に、右辺の他の条件(□□□の場合は△△△、△△△の場合は□□□)が成立していないかを自動的に確認し、成立している場合には○○○を自動的に表示しかつ○○○を半自動で一時文脈に新たに加えます(前向き推論による診断等の実現)。  
     その追加により、新たな前向き推論をさらに実行する場合もあります(再帰的な前向き推論によるリコメンデーションや警告への応用)。  

    140: $Xは風邪でしょうね := $Xは喉が痛い ; $Xは鼻水が出ている ;
    141: ///★「太郎は鼻水が出ている」と「太郎は喉が痛い」の2つをリストに追加すると表示画面に「太郎は風邪でしょうね」と表示される。

    27.手続きルール(読み上げ)

    ○○○ :@ □□□ ;

     「@○○○」として呼ばれたときに、文字列「○○○」を手続きの名前として、マルチメディア画面(テキストタイプ)に表示し、かつ、音声読み上げを行います(変数付き文字列を除く)。  
     ・入力欄や音声認識による手続きの呼び出し時に、「@○○○」として指定する必要があります。  
     ・□□□は、演繹(えんえき)ルールの条件式として探索し、true/falseを返します。

    160: 野菜の食べ方 :@ @まずは洗う ; @食べられないところを切り落とす ; @調理する ; @食べます ;
    161: まずは洗う :@ @天然水で洗う ; @それがなかったら水道水で洗う ;
    162: ///★「?@野菜の食べ方」と質問すると
    163: ///★「まずは洗う 」 →「天然水で洗う」→「それがなかったら水道水で洗う」→「食べられないところを切り落とす」 →「調理する 」 →「食べます」の順に表示、音声が再生される。
    164: ///★161行目(まずは洗う :@ @天然水で洗う ; @それがなかったら水道水で洗う ;)をコメントアウトした状態で「?@野菜の食べ方」と質問すると回答が変わるため確認

    28.手続き呼び出し

    ○○○ :- @△△△ ; @□□□ ;

    手続きルールを△△△、□□□の順番に呼び出します。

    166: 爺ちゃんのカラオケ :@ #M "C:\Users\USER\Desktop\2017_0901\64bit_win7\jdprolog\DATA\M\AGDRec_20170203_105227.wmv" ;
    167: ///★「?@爺ちゃんのカラオケ」と質問すると" "の間にある場所の動画が再生される
    168: ///
    169: 爺ちゃんの笑い声 :@ #S "C:\Users\USER\Desktop\2017_0901\64bit_win7\jdprolog\DATA\S\いつもありがと.m4a" ;
    170: ///★「?@爺ちゃんの笑い声」と質問すると" "の間にある場所の音声が再生される
    171: ///
    172: 爺ちゃんと鯉 :@ #I "C:\Users\USER\Desktop\2017_0901\64bit_win7\jdprolog\DATA\I\mono2_color_brand.png" ;
    173: ///★「?@爺ちゃんと鯉」と質問すると" "の間にある場所の画像を表示する。
    174: ///
    175: 爺ちゃんの好きな食べ物 :@ #T "C:\Users\USER\Desktop\2017_0901\64bit_win7\jdprolog\DATA\T\LIKEFOOD.txt" ;
    176: ///★「?@爺ちゃんの好きな食べ物」と質問すると" "で囲まれている場所のテキストデータを読み上げてくれる
    177: ///
    178: 爺ちゃんと餌やり :- @爺ちゃんと鯉 ; @爺ちゃんの笑い声 ; @爺ちゃんの好きな食べ物 ;
    179: ///★「?@爺ちゃんと餌やり」と質問すると「爺ちゃんと鯉」、「爺ちゃんの笑い声」、「爺ちゃんの笑い声」の順に呼び出しされる。
    180: ///★172行目「爺ちゃんと鯉」、170行目「爺ちゃんの笑い声」、176行目「爺ちゃんの好きな食べ物」をコメントアウトしないようにする

    29.ORルール

    ORルール(通常)
    ○○○ :| □□□ ; △△△ ;

     条件のいずれかが真ならば真となります。  
     変数が残っている条件は偽になります。  
     左の条件から探して、偽である間(真となるまで)は他の条件を探します。  

    200: 子供の$Xはペットとして躾できる :| $Xは犬 ; $Xは猫 ; $Xはサル ;
    201: 「三毛猫|みけねこ」は猫
    202: ブルドッグは犬
    203: ///★「$A」と質問すると「子供のブルドッグはペットとして躾できる」と回答してくる
    204: ///★条件(200行目)を「子供の$Xはペットとして躾できる :| $Xは猫 ; $Xはサル ; $Xは犬 ;」と書き換えると回答が変化するため確認


    ORルール(表記ゆれ)
    ○○○ :! □□□ ; △△△;

     条件のいずれかが真ならば真となります。  
     変数が残っている条件は偽になります。  
     左の条件から探して、一つでも真になったものが否定されると、他の条件を探さずに偽になります。  
     実質同じ条件の表記ゆれを列挙する場合に便利です。  

    271: 子供の$Xはペットとして躾できる :! $Xは犬 ; $Xはイヌ ; $X is a dog ;
    272: いぬ is a dog
    273: ブルドッグは犬
    274: ポチはイヌ
    275: ///★「$A」を記入して送信すると「子供のブルドッグはペットとして躾できる」と回答してくる。
    276: ///★「子供の$Xはペットとして躾できる :! ; $Xはイヌ ; $X is a dog ; $Xは犬」と記入して送信すると回答が変化するため確認。
    278: ///★275行目(ポチは猫)をコメントアウトすると回答が変化するため確認


    ORルール(異なる選択肢の許容)
    ○○○ :+ □□□ ; △△△;

     条件のいずれかが真ならば真となります。  
     変数が残っている条件は偽になります。  
     左の条件から探して、真となっても他の条件を探して、解を蓄積していきます。  
     異なる条件を許容する場合に便利です。  

    280: 子供の$Xはペットとして躾できる :+ $Xは犬 ; $Xは猫 ; $Xはサル ;
    281: ブルドッグは犬
    282: 「三毛猫|みけねこ」は猫
    283: ///★「$A」を記入して送信すると「子供のブルドッグはペットとして躾できる 」と「子供の「三毛猫|みけねこ」はペットとして躾できる」と回答してくる


    ORルール(個数付)
    ○○○ :+N □□□ ; △△△; 
    ○○○ :=N □□□ ; △△△; 
    (Nは2から9までの自然数)

     条件がN個以上真ならば真となります。  
     変数が存在する条件は、解の組み合わせについてN個以上真ならば真となり、解を蓄積していきます。  

    206: $Xは風邪でしょうね :+2 $Xは喉が痛い ; $Xは鼻水が出ている ; $Xは熱がある ; $Xは今日休んでいる ;
    207: 太郎は喉が痛い
    208: 太郎は鼻水が出ている
    209: ///★「$A」と質問すると「太郎は風邪でしょうね」と回答が来る
    210: ///★207行目または208行目をコメントアウトするか206行目冒頭を「$Xは風邪でしょうね :+3」と変えると回答が変化するので確認

    30.演算処理

    代入文(数値/文字列)
    {$A=△△△}

    左辺が変数だった場合、変数に値を代入します。
    右辺の△△△に含まれるいずれかの変数に値(複数であってもよい)が代入されていない場合は偽となります。

    {○○○=△△△}

    左辺が固定文字列だった場合、「代入文の事実(A=B)」を編集する処理になります。
    左辺も右辺も同じもの「代入文の事実(A=B)」がなければ、リストに代入文の内容を「代入文の事実(A=B)」として追加します。

    ※代入文の左辺または右辺の頭に*がある場合、左辺が同じで右辺の値が異なる「代入文の事実(A=B)」をリストから探索して編集します。
    左辺が同じで右辺の値が異なる「代入文の事実(A=B)」をすべてコメントアウトします。
    右辺の○○○に含まれるいずれかの変数に値(複数であってもよい)が代入されていない場合は偽となります。
    値比較文
    {○○○ 比較記号 △△△}

    ○○○と△△△の値を比較します。
    比較記号が成立する場合は真に、成立しない場合は偽になります。
    左辺の○○○と右辺の△△△に含まれるいずれかの変数に値(複数であってもよい)が代入されていない場合は偽となります。
    形式比較文
    {○○○ === △△△}

    ○○○と△△△の形式を比較し、形式が一致するものへと△△△の変数の値を絞り込みます。
    左辺の○○○に含まれるいずれかの変数に値(複数であってもよい)が代入されていない場合は偽となります。
    ~===の場合は、不存在条件(変数あり)と同様に、そのルール内でその変数に代入されないように制限されます。

    {○○○ ~=== △△△}

    値比較文と音声合成時に現在の日時に変換される。
    値比較文の場合、日時(#〇〇〇)と比較する。
    音声合成の場合、日時として発声する。

    35: 真偽1A :- {$A=0} ; {$A==1} ;
    36: 真偽1B :- {$A=1} ; {$A==1} ;
    37: 真偽2A :- {$A=0} ; {$A<>1} ;
    38: 真偽2B :- {$A=1} ; {$A<>1} ;
    39: 真偽5A :- {$A=0} ; {$A<>あいうえお} ;
    40: 真偽5B :- {$A=あいうえお} ; {$A<>あいうえお} ;
    41: 真偽6A :- {$A=0} ; {$A!=1} ;
    42: 真偽6B :- {$A=1} ; {$A!=1} ;
    43: 真偽7A :- {$A=1} ; {$A=0} ; {$A>1} ;
    44: 真偽7B :- {$A=1} ; {$A>1} ;
    45: 真偽8A :- {$A=1} ; {$A=0} ; {$A>=1} ;
    46: 真偽8B :- {$A=1} ; {$A>=1} ;
    47: 真偽9A :- {$A=0} ; {$A<=1} ;
    48: 真偽9B :- {$A=1} ; {$A<=1} ;
    49: 真偽10A :- {$A=0} ; {$A<1} ;
    50: 真偽10B :- {$A=1} ; {$A<1} ;
    51: 真偽11A :- {$A=7} ; {$B=7} ; {$A==$B} ;
    52: 真偽11B :- {$A=1} ; {$A==$B} ;
    53: 真偽12A :- {$A=12} ; {$B=1} ; {$C=2} ; {$D=3} ; {$A==($B+$C+1)*$D} ;
    54: 真偽12A :- {$A=1} ; {$A==($B+$C+1)*$D} ;
    55: ///★「真偽$A」と質問すると成立するルールが解答される
    56: ///★「真偽5$A」と質問すると真偽5の正しい方を回答してくれる


    152: 太郎は$Xが好き :- $Xは女子 ; {$X===花子$Yん} ;
    153: 花子は女子
    154: 花子さんは女子
    155: 花子ちゃんは女子
    156: 公男は男子
    157: ///★「$A」と質問すると「太郎は花子さんが好き」と「太郎は花子ちゃんが好き」と回答する。
    158: ///★「太郎は$Xが好き :- $Xは女子 ; {$X===花子$Y} ; 」と条件を変えると回答に変化が起きるため確認


    31.マルチメディアの動画再生(手続コマンド)

    "#M "□□□"、#M_ "□□□"

     実行時に#Mの後に示す動画ファイル(□□□)をマルチメディア画面上に再生します。  
     #M_の場合、終了してなくても次のステップに進みます。

    166: 爺ちゃんのカラオケ :@ #M "C:\Users\USER\Desktop\2017_0901\64bit_win7\jdprolog\DATA\M\AGDRec_20170203_105227.wmv" ;
    167: ///★「?@爺ちゃんのカラオケ」と質問すると" "の間にある場所の動画が再生される


    32.マルチメディアの音声再生(手続コマンド)

    #S "□□□"、#S_ "□□□"

     実行時に#Sの後に示す音声ファイル(□□□)をマルチメディア画面上に再生します。  
     #S_の場合、終了してなくても次のステップに進みます。

    169: 爺ちゃんの笑い声 :@ #S "C:\Users\USER\Desktop\2017_0901\64bit_win7\jdprolog\DATA\S\いつもありがと.m4a" ;
    170: ///★「?@爺ちゃんの笑い声」と質問すると" "の間にある場所の音声が再生される

    33.マルチメディアの静止画表示(手続コマンド)

    #I "□□□"、#I_ "□□□"

     実行時に#Iの後に示す静止画ファイル(□□□)をマルチメディア画面上に表示します。  
     #I_の場合、終了してなくても次のステップに進みます。

    172: 爺ちゃんと鯉 :@ #I "C:\Users\USER\Desktop\2017_0901\64bit_win7\jdprolog\DATA\I\mono2_color_brand.png" ;
    173: ///★「?@爺ちゃんと鯉」と質問すると" "の間にある場所の画像を表示する。


    34.マルチメディアのテキスト表示(手続コマンド)

    #T "□□□"、#T_ "□□□"

     実行時に#Tの後に示すファイル(□□□)のテキストをマルチメディア画面上に表示します。  
     #T_の場合、終了してなくても次のステップに進みます。

    175: 爺ちゃんの好きな食べ物 :@ #T "C:\Users\USER\Desktop\2017_0901\64bit_win7\jdprolog\DATA\T\LIKEFOOD.txt" ;
    176: ///★「?@爺ちゃんの好きな食べ物」と質問すると" "で囲まれている場所のテキストデータを読み上げてくれる


    35.ブラウザ表示(手続コマンド)

    #B "□□□"

     実行時に#Bの後に示すURL(□□□)のテキストをマルチメディア画面上を表示します。

    297: ニュースサイト :@ #B "https://www.google.com" ;
    298: ///★「?@ニュースサイト」と記入して送信すると""で囲まれたURLのサイトが開く

    36.リストファイル遷移コマンド

    ○○○ :- #gof "ファイル名" ;

    現在のリストを"ファイル名"に移動します。


    300: リスト移動 :- #gof "C:\Users\USER\Desktop\2017_0901\64bit_win7\jdprolog\DATA\JPL\test.jpl" ;
    301: ///★「?リスト移動」と記入して送信すると""の間にあるリストに移動して表示する




    ○○○ :- #ret ;

    前のリストに戻ります。

    303: 前のリストに戻る :- #ret ;
    304: ///★「?前のリストに戻る」と記入して送信すると前のリストに戻れる。


    ○○○ :- #home ;

    現在のリストを「ホームリスト」に移動します。

    306: ホームリストに移動 :- #home ;
    307: ///★「?ホームリストに移動」と記入して送信するとホームリストに移動ができる



    ○○○ :- #cc ;

    現在のリストから一時文脈を全てクリアします。

    309: 一時文脈をクリア :- #cc ;
    310: ///★「?一時文脈をクリア」と記入して送信すると一時文脈を一括で削除できる

    37.ウェイトコマンド(待機コマンド)

    ○○○ :- #wait "文字列" ;

    文字列が表す数値の時間(100ms単位)分待機させます。

    312: $X秒待機 :- #wait "$X0" ;
    313:///★「?10秒待機」と記入して送信すると10秒間プログラムを停止させる。

    38.外部参照文

    ○○○ :- #req_ "□□□"
    ルールボディから、□□□で示す外部ファイルを一時的(実行時)にロードし、そのルール内のそのreq文以降の条件式でのみ、そのロードした各行の内容を参照することができます。

    ○○○ :- #req_○○ "□□□"
    ルールボディから、□□□で示す外部ファイルに"○○_"を付して一時的(実行時)にロードし、そのルール内のそのreq文以降の条件式でのみ、そのロードした各行の内容を参照することができます。

    ○○○ :- #req "□□□"
    「#req_ "□□□"」と基本は同じですが、読込前に同じルールで読み込んだreqのリスト探索に使用しないようにします。

    ※"○○_"を付けるのは、以下の通りです。
  • 事実またはルールヘッドの
  • 先頭
    先頭の?の後
    先頭の!の後
  • ルールボディの各条件式
  • 先頭
    先頭の?の後 (?~、?!含む)
    先頭の!の後 
    先頭の~の後 
    先頭の@の後 
    :>のルールボディの比較条件式(2つ目以降の条件式)の左辺と右辺の先頭
    ※以下の場合は追加し「ない」
  • 「::」区切りのルールヘッド、ルールボディの各条件式
  • 「:#」区切りのルールヘッド
  • ルールボディに出現する先頭が'#'ではじまるもの(その一部はシステム予約コマンド)
  • タイマー処理のルールヘッド (先頭が"#"で":#"を含むもの)
  • :>のルールボディの観点 (ルールボディの一つ目の条件式で、先頭が'%')
  • 比較区切りの開始または終了(先頭が'<%観点' または '>%観点')
  • コメントのみの行 (先頭が"///")
  • 演算処理({・・・})
  • 144: お宝は$X :| エリアAで$Xを探す ; エリアBで$Xを探す ; エリアCで$Xを探す ;
    145: エリアAで$Xを探す :- #req_ "https://humanote.xyz/free/lsb001/A.jpl" ; お宝=$X ;
    146: エリアBで$Xを探す :- #req_ "https://humanote.xyz/free/lsb001/B.jpl" ; お宝=$X ;
    147: エリアCで$Xを探す :- #req_ "https://humanote.xyz/free/lsb001/C.jpl" ; お宝=$X ;
    148: ///★「?お宝は$X」と質問すると外部参照してプレゼントパスワードを教えてくれる。

    39.インクルード

    ///@ファイル名

    「///@ファイル名」で始まる行がある場合、そのファイルの内容がその場所にあるものとして推論を行うことができます。

    40.テキスト表示文

    ○○○ :- #print "□□□"

    ルールボディから、表示ログに□□□の文字列を表示します。

    66: 泳ぎ方種類表示1 :- #print "クロール、背泳ぎ、バタフライ、平泳ぎ" ;
    67: ///★「?泳ぎ方種類表示1」と質問すると表示ログにテキスト内容が表示される。

    41.マルチメディアのテキスト表示文

    ○○○ :- #printm "□□□"

    ルールボディから、マルチメディア画面に□□□の文字列を表示します。

    58: 泳ぎ方種類表示2 :- #printm "クロール、背泳ぎ、バタフライ、平泳ぎ" ; 59: ///★「?泳ぎ方種類表示2」と表示すると表示ログに「クロール、背泳ぎ、バタフライ、平泳ぎ」が表示される

    42.音声合成文

    ○○○ :- #voice "□□□"

    ルールボディから、□□□の内容を音声合成します。変数を含めることもできます。変数の解が複数ある場合は、すべての解を音声合成します。

    69: 泳ぎ方種類発声 :- #voice "クロール、背泳ぎ、バタフライ、平泳ぎ" ;
    70: ///★「?泳ぎ方種類発声」と質問すると「クロール、背泳ぎ、バタフライ、平泳ぎ」と言ってくる。(音声合成をおこなう)

    43.呼び名

    "呼び名"ホームにもどる
    現在のリストを「ホームリスト」に移動します。

    "呼び名"中断
    中断関連処理を実施します。

    "呼び名"編集
    ボタン画面を閉じて、メイン画面に移動します。

    "呼び名"戻る
    前のリストに戻ります。

    "呼び名"CC
    現在のリストから一時文脈を全てクリアします。

    "呼び名"右大臣
    ボタン画面の表示を、右方向にスクロールします。

    "呼び名"左大臣
    ボタン画面の表示を、左方向にスクロールします。

    "呼び名"〇
    音声認識時、コマンド以外の「"呼び名"〇」という内容を、「?〇」として認識、送信されます。

    "呼び名"〇(特別機能)
    音声認識時、ネットワークノート区分〇(例えばA0)を変更する際に使います。

    44.枝刈り画面

    探索時にポップアップで現れます。探索途中の項目を押すと、それより深いその探索文脈が省略されます。
    「閉じる(×)」を押すと枝刈り画面のみ終了します。

    45.否定

    否定文(事実)/思考プログラム(しこうプログラム)
    !○○○
     肯定文の否定形です。
    日本語としての肯定文も含まれます。

    329: !今日は天気がよい
    330: !今日は天気がよくない

    否定ルール(普通ホーン節)
    !○○○ :- □□□ ;
     □□□を、存在確認(又は、変数により解合成)できた場合に○○○を偽とみなします(=偽を証明できたこととします)。
     ○○○を肯定していた事実はコメントアウトされます。

    182: !じいちゃん釣りに行けるかも :- 降水 ;
    183: !じいちゃん釣りに行けるかも :- 肌寒い ;
    184: じいちゃん釣りに行けるかも :& 晴れ ; 暖かい ;
    185: 降水 :- 雨 ;
    186: 降水 :- 雪 ;
    187: 晴れ :- 雲がない ;
    188: 暖かい
    189: 雲がない
    190: 雪
    191: ///★190行目(雪)をコメントアウトしている状態で「$A」と質問すると「じいちゃん釣りに行けるかも」と回答してくる
    192: ///★雪(190行目付近)のコメントをはずして「$A」と質問すると回答が変化するため確認


    否定条件
    ○○○ :- !□□□ ;
    否定を証明又は確認出来たときに真となります。
    PROLOGの閉世界仮説に対応する不存在条件(存在を証明できないとき)とは異なります。

    194: 今日は傘はいらない :- !今日は雨 ;
    195: !今日は雨 :- 今日は晴れ ;
    196: 今日は晴れ
    197: ///★「$A」と質問すると「今日は傘はいらない」と表示される
    198: ///★「!今日は雨 :- 今日は晴れ ; 」(195行目付近)をコメントアウトすると回答が変化するため確認

    46.逆質問(変数なし)

    ○○○ :- ?□□□ ; △△△ ;

    条件の成立不成立を、質問や推論の実行時に、利用者に確認させる機能です。

    212: 釣りにいったらどう :- ?天気がいい ; ?暖かい ;
    213: ///★「$A」と質問画面に記入すると質問画面が出てきてすべてyesと回答すると「釣りに行ったらどう」と言ってくる。そして「天気が良い」と「暖かい」がリストに追加される
    214: ///★質問画面による解答によって変化するため確認


    47.逆質問(変数あり)

    ○○○ :- ?□$X□ ; △△△ ;

    条件の変数に代入して成立する値を、質問や推論の実行時に、利用者に編集させる機能です。

    216: $Xに釣りにいったらどう :- ?$Xは天気がいい ; ?$Xは暖かい ;
    217:
    218: 金沢は暖かい
    219: ///★「$A」と質問画面に記入して送信すると「金沢に釣りに行ったらどう」と回答する。
    220: ///★「金沢は天気がいい」、「金沢は暖かい」のどちらかをコメントアウトすると回答が変化する。
    221: ///★「金沢は天気がいい」を「金沢は雨」に変えると回答に変化が起きるため確認する


    48.逆質問(変数あり) 複雑な例

    ○○○ :- □$X□$Y; ?□$X□ ; △△$Y△ ;

    条件の変数に代入して成立する値を、質問や推論の実行時に、利用者に編集させる機能です。

    223: $Xの$Yは有名 :- $Xに$Yがある ; ?$Xは天気がいい ; $Yは入場無料になっている ;
    224: 金沢は天気がいい
    225: 金沢に兼六園がある
    226: 兼六園は入場無料になっている
    227: ///★「$A」と質問画面に記入して送信すると「金沢の兼六園は有名」と回答してくる

    49. 逆質問画面(変数なし)

    実行時にポップアップで現れます。
    ラジオボタンで「YES」、「NO」または「分からない」を選択します。
    これにより、選択に応じた肯定または否定の事実が足されます。
    また、既にあった事実のうち、利用者の判断と矛盾するものがコメントアウトされます。
    「閉じる(×)」を押すと終了します。

    50. 逆質問画面(変数あり)

    実行時にポップアップで現れます。
    現在の条件を確認し、その解候補の集合が過不足なく事実と一致していることを確認し、一致していない場合は下の欄を編集し、「以上でOK」ボタンを押します。
    これにより、編集に応じた肯定または否定の事実が足されます。
    また、既にあった事実のうち、利用者の判断と矛盾するものがコメントアウトされます。
    「閉じる(×)」を押すと終了します。
    「再検索」のチェックがついた状態で終了すると、探索終了時に再度探索を行います。

    51.前向き推論画面

    実行時にポップアップで現れます。
    前向き推論において新たに証明された事実が、表示されたり音声合成されたりするだけでなく、「事実として追加」を押すと一時文脈としても追加されます。
    「閉じる(×)」または「追加しないで閉じる」を押すと、事実を追加せずに終了します。"

    52.ネット過去分参照画面(一部のライセンスユーザーのみ)

    現在のネットワークノート区分(例えばA0)にネット保存した現在および過去のバージョン内容(ネットに残っている場合)を表示します。
    ※ユーザー専用パスワード($$$・・・)がある場合は、対応したその専用のファイルのみを表示します。
    起動時にポップアップで現れます。
    「閉じる(×)」を押すと終了します。

    53.重文質問

    {○○;△△}

    現在のリストに新たなルール(■■■ :- ○○;△△)を一時的に加えた上で、〇〇と△△の連立言葉方程式としてとらえ、〇〇と△△に含まれる変数の解を求めます。

    229: 太郎は長男
    230: 太郎は子供
    231: 次郎は長男
    232: 三郎は子供
    233: ///★「{$Aは長男;$Aは子供}」と質問画面に記入して送信すると「$A=太郎」と回答してくる

    54.差分質問

    !!○○;;△△

    現在のリストに事実(複数可)を加える前後で証明できる内容の差分を計算して求めます。

    コメントをダブルクリック
    差分質問文を送信します。

    235: $Xは基本後継ぎ :- $Xは長男 ;
    236: ///★「!!太郎は長男 ;; 太郎は子供」と質問画面に記入して送信すると「太郎は基本後継ぎ」と回答してくる

    55.連続主張

    !!!〇〇〇

    "連続主張(!!!)と定型応答(::)の部分一致処理を網羅的に行います。
    すなわち定型応答の左辺のすべてのパターンと一致を試み、一致して得られるすべての変数束縛に対して、右辺のすべての選択肢に対して波及させて、すべての選択肢を順番に表示します。

    その他のルールや事実とは、通常の質問文("?・・・"の質問文)と同じで完全一致すればマッチします。

    238: $Aと$B :: $A+$B ;
    239: ///★「!!!太郎と次郎と三郎と四郎」と質問画面に記入すると
    240: ///「:太郎+次郎と三郎と四郎
    241: ///:太郎と次郎+三郎と四郎
    242: ///:太郎と次郎と三郎+四郎 」と回答してくる

    56.コメント

    ///

    リストに追加した事実やルールに「///」があった場合、その右側にある内容は推論に用いられません。
    一時無効化
    ///□

    リストの内容を一時的に無効化するためのコメントです。
      リスト表示欄からコメント以外の内容をCtrlを押しながらダブルクリックした場合、一時無効化できます(///□を行頭に追加できます)。
      リスト表示欄からコメントの内容を(一時無効化した内容含む)をCtrlを押しながらダブルクリックした場合、一時無効化を解除できます(行頭の///□を取り除けます)。

    57.ハコ△(特別機能)

    音声認識時、「ハコ△」という内容は変数「$△」として認識されます。

    58.トレース

    F9で兄弟のトレース、F11で子供のトレースを実行します。
    子供がない場合は兄弟へ、兄弟がない場合は親へ移動して止まります。
    兄弟のトレース
    兄弟」は、別の行にある事実又はルールとのマッチです。
    子供のトレース
    「子供」は、ルールのボディ部のサブクエリとのマッチです。

    59.読み方明示機能

    「○○○|△△△」

    音声合成時、△△△の内容だけ読み上げます。

    88: 乗り物 :- #voice "「車|くるま」、「飛行機|しんかんせん」、「新幹線|ひこうき」" ;
    89: ///★「?乗り物」と質問すると「くるま、しんかんせん、ひこうき」と回答してくる。
    90: ///★(「○○○|△△△」)と発音するところに書くと「△△△」のところを読み上げる。

    60.録音機能

    録音ボタンで録音を開始、終了ボタンで録音を終了します。
    カレントディレクトリに録音したデータがwavファイルで保存されます。

    61.ホームリスト

    home.jpl

    他のリストへの移動ボタンやよく使うボタンを備えた、ユーザーごとの基本リストです。

    62.リダイレクト

    ?〇〇〇>>>ファイル名

    現在のリストにではなく、指定したファイル名に質問文等(?〇〇〇)を送ります。

    150: ///★「 ?今日は$X>>>C:\Users\USER\Desktop\2017_0901\64bit_win7\jdprolog\DATA\JPL\基本1.jpl」と質問すると「基本1.jpl」のフォルダーを参照して回答をしてくれる。

    63.不存在条件

    ○○○ :- ~□□□ ;
    変数なし/すべての変数が束縛されている場合
    □□□を証明できない場合に○○○を真とみなします。

    315: 今日は傘はいらなさそう :- ~今日は雨 ;
    316: ///★「$A」と記入して送信すると「今日は傘はいらなさそう」と回答してくる

    変数あり
    ~がないとしたときの条件を真とする変数の値が、そのルール内でその変数に代入されないように制限します。

    318: $Aはいい天気 :- $Aは地名 ; ~$Aは雨 ; ~$Aは曇り ;
    319: 金沢は地名 ///2017/09/03_15:30:19M
    320: ///★「$Aはいい天気」と記入して送信すると「金沢」と回答してくる
    321: ///★「金沢は曇り」をリストに追加して「$Aはいい天気」と記入して送信すると回答が「NO」に変化するため確認

    64.探検ルール

    ○○○ :~ □□□ ; ~△△△ ; ◇◇◇ ; □□□ ; ~△△△ ;

    「不存在の条件式がある場合のみ作用する特殊なルール」

    上の例では、
    △△△が見つかるまで、req文で知識を補足したりして探すことになります。
    □□□は、知識を補足するため、主にreq文を持ちることが有利です(論理サーフィンテスト2の例を参照してください)。
    条件式Xが不存在を要求している時に
  • 存在になってしまう(要求された不存在が成り立たない)場合、
    ※Xが固定文字列の条件式
     そこでルールAは真として終了する  
     条件式Xの解を真とする  
    ※Xが変数付き文字列の条件式
     そこでルールAは真として終了する  
     条件式XのAND解をヘッドに伝える    
  •  
  • 存在にならない(要求された不存在が成り立つ)場合、  
     次の条件式が存在する場合  
      次に進む   
     次の条件式が存在しない場合(Xが末尾の条件式)  
      ルールAは真として終了する(絞り込みも存在しないはずなので、これでよい)  
     ※条件式Xが固定文字列でも変数付き文字列でも
  • 条件式Xが不存在を要求していない時に
     ※通常の:-の探索を実施していく
  • 存在になってしまう(要求された存在が成り立つ)場合、
    次に進む
  • 存在にならない(要求された存在が成り立たない)場合、
    そこでルールAは偽として終了する
    ※条件式Xが固定文字列でも変数付き文字列でも
  • 244: お宝1は$X :~ #req_ "https://humanote.xyz/free/lsb001/A.jpl" ; ~お宝=$X ; #req_ "https://humanote.xyz/free/lsb001/B.jpl" ; ~お宝=$X ; #req_ "https://humanote.xyz/free/lsb001/C.jpl" ; お宝=$X ;
    245: お宝2は$X :~ #req_ "https://humanote.xyz/free/lsb001/A.jpl" ; ~お宝=$X ; #req_ "https://humanote.xyz/free/lsb001/B.jpl" ; お宝=$X ;
    246: お宝3は$X :~ #req_ "https://humanote.xyz/free/lsb001/B.jpl" ; ~お宝=$X ; #req_ "https://humanote.xyz/free/lsb001/C.jpl" ; ~お宝=$X ; #req_ "https://humanote.xyz/free/lsb001/A.jpl" ; お宝=$X ;
    247: ///★「$A」と質問画面に記入して送信するとお宝1とお宝3のプレゼントパスワードを教えてくれる。

    65.重みルール

    ○○○ :%=N P/□□□ ; Q/△△△ ;
    ○○○ :%N P/□□□ ; Q/△△△ ;
    ○○○ :%= P/□□□ ; Q/△△△ ;
    ○○○ :% P/□□□ ; Q/△△△ ;
    (N、P、Qは自然数)

    Nが「ルールの重み」になります(:%のみの場合、ルールの重みは100です)。
    P、Qのように、ルールボディの各条件式の先頭に重みが記述します。

    左の条件から探して、真となっても他の条件を探して、解を蓄積していきます。
     変数が残っている条件は偽になります。
     条件が真ならば、その条件式の重みを蓄積します。
    蓄積した重みが「ルールの重み」を超えれば、ルールは真となります。

    323: カレー
    324: ハンバーグ
    325: 田中の好み :%50 60/カレー ; 30/パスタ ; 30/ハンバーグ ; 30/豚カツ ; 10/サラダ ; 10/ケーキ ;
    326: 佐々木の好み :%50 20/カレー ; 30/パスタ ; 10/ハンバーグ ; 30/豚カツ ; 10/サラダ ; 60/ケーキ ;
    327: ///★質問「$Aの好み」で答え「:$A = 田中 」

    66.メニュー一覧

    ファイル:新規読込 「メニュー」→「ファイル」 リスト(jpl拡張子のファイル)を新たに読み込みます。
    ファイル:再読込 「メニュー」→「ファイル」 保存済みリストの内容を再度読み込みます。
    ファイル:追加読込 「メニュー」→「ファイル」 現在読み込まれているリスト(現在のリスト)に、新しく読み込んだリストの内容を追加します。
    ファイル:名前を付けて保存 「メニュー」→「ファイル」 現在のリストを「.jpl」という拡張子で保存できます。
    ファイル:上書き保存 「メニュー」→「ファイル」 現在読み込まれているリストファイルの内容を「現在のリスト」の内容で上書き保存します。
    ファイル:クリア 「メニュー」→「ファイル」 入力欄から、現在のリストを全てクリアします。
    ファイル:表示ログ出力 「メニュー」→「ファイル」 現在、表示ログ欄に蓄積されている内容の全てを「.log」という拡張子が付いたファイルに保存します。
    ファイル:印刷:印刷(表示ログ) 「メニュー」→「ファイル」 表示ログを印刷します。※現在のリストは、listコマンドで表示ログに表示した内容を印刷してください。
    ファイル:印刷:印刷プレビュー 「メニュー」→「ファイル」 表示ログの印刷をプレビューします。
    ファイル:終了 「メニュー」→「ファイル」 開発・実行アプリ「HUMANOTE」を終了します。
    ファイル:ネット収納:読み込み(特別機能) 「メニュー」→「ファイル」 現在のネットワークノート区分(例えばA0)にネット保存した最新の内容を、現在のリストとして読み込みます。
    ※ユーザー専用パスワード($$$・・・)がある場合は、対応したその専用のファイルを読み込みます。
    ファイル:ネット収納:上書き保存(特別機能) 「メニュー」→「ファイル」 現在のネットワークノート区分(例えばA0)に現在のリストの内容を上書き保存します。
    ※ユーザー専用パスワード($$$・・・)がある場合は、対応したその専用のファイルに書き込みます。
    ※ユーザー専用パスワード($$$・・・)がない場合は、デフォルトのファイルに書き込みます(ネット収納の他の機能でも同じ)。
    ファイル:ネット収納:バックアップ(特別機能) 「メニュー」→「ファイル」 ネット保存したすべての内容をローカル(jdprolog\log\net\)にダウンロードします。
    ※ユーザー専用パスワード($$$・・・)がある場合は、対応したその専用のファイルのみをダウンロードします。
    ファイル:ネット収納:ネットクリア(特別機能) 「メニュー」→「ファイル」 ネット保存したすべての内容を削除します。
    ※ユーザー専用パスワード($$$・・・)がある場合は、対応したその専用のファイルのみを削除します。
    ファイル:ネット収納:過去分消去(特別機能) 「メニュー」→「ファイル」 ネット保存した過去のバージョンがネットに残っている場合、その内容のみを削除します。
    ※ユーザー専用パスワード($$$・・・)がある場合は、対応したその専用のファイルのみを削除します。
    ファイル:ネット収納:過去分参照(特別機能) 「メニュー」→「ファイル」 現在のネットワークノート区分(例えばA0)にネット保存した現在および過去のバージョン内容(ネットに残っている場合)を表示します。
    ※ユーザー専用パスワード($$$・・・)がある場合は、対応したその専用のファイルのみを表示します。
    コマンド:UNDO 「メニュー」→「操作/表示」 リストの削除を取り消します。操作を誤って削除してしまった場合に、削除されたデータをリストに戻すための機能です。
    コマンド:コメント削除(行頭コメント文以外) 「メニュー」→「操作/表示」 リスト行内のコメント削除します。
    行頭コメント文は削除されません。
    コマンド:ボタン画面 「メニュー」→「操作/表示」 ボタン選択(運用)画面を起動します。
    コマンド:トレース 「メニュー」→「操作/表示」 クエリの「別の行にある事実又はルールとのマッチ」までスキップして止まります(途中過程を履歴に表示)。
    コマンド:表示ログクリア 「メニュー」→「操作/表示」 現在、表示ログ欄に蓄積されている内容の全てをクリアします。
    コマンド:リストソート 「メニュー」→「操作/表示」 リストを降順に並び替える
    コマンド:リスト表示 「メニュー」→「操作/表示」 現在のリストをすべて表示します。
    コマンド:ウィンドウサイズのリセット 「メニュー」→「操作/表示」 ウィンドウサイズを800×600に戻します。
    コマンド:背景色の変更 「メニュー」→「操作/表示」 表示ログの背景色を変更します
    コマンド:現在の内容をホームリストにする 「メニュー」→「操作/表示」 ホームリスト(home.jpl)に現在のリストの内容を保存します。
    オプション:根拠ツリー表示 「メニュー」→「設定」 根拠ツリーを表示する場合にチェックします。
    オプション:スローモーション 「メニュー」→「設定」 スローモーションする場合にチェックします。
    オプション:無限ループの表示を抑制する 「メニュー」→「設定」 無限ループの表示を抑制する場合にチェックします。
    オプション:重複確認 「メニュー」→「設定」 現在のリストに同一内容の行が存在するかの判別を行う場合にチェックします。
    オプション:リスト登録時の既存のルールのヘッドとボディが入れ替わったもののエラー判別 「メニュー」→「設定」 リスト登録時の既存のルールのヘッドとボディが入れ替わったもののエラー判別する場合にチェックします。
    オプション:req有の場合全体リスト表示 「メニュー」→「設定」 req有の場合全体リスト表示する場合にチェックします。
    オプション:残メモリ容量の警告表示 「メニュー」→「設定」 残メモリ容量の警告表示する場合にチェックします。
    オプション:変数と空文字のマッチ 「メニュー」→「設定」 変数と空文字のマッチさせる場合にチェックします。
    オプション:否定 「メニュー」→「設定」 否定処理を行う場合にチェックします。
    オプション:リスト表示欄の文字サイズ 「メニュー」→「設定」 リスト表示欄の文字サイズが、チェックしたサイズになります。
    オプション:ボタンフォームの文字サイズ 「メニュー」→「設定」 ボタンフォームの文字サイズがチェックしたサイズになります。
    文字サイズ大のときは、"数行1列/縦スクロール"モードでも3行以上表示されないので、すべてを表示したい場合は文字サイズを中または小として下さい。
    オプション:音声合成 「メニュー」→「設定」 音声合成を行う場合にチェックします。
    オプション:音声合成モード 「メニュー」→「設定」 チェックしたモードで音声合成モードを行います。
     SpeechLib
     OpenJtalk
    オプション:音声認識 「メニュー」→「設定」 音声認識を行う場合にチェックします。
    オプション:音声認識モード 「メニュー」→「設定」 チェックしたモードで音声認識を行います
     選択肢認識
     自由認識
    オプション:類似候補提案 「メニュー」→「設定」 類似候補提案を行う場合にチェックします。
    オプション:起動時ボタンフォーム表示 「メニュー」→「設定」 起動時、メイン画面ではなくボタン画面を表示する場合にチェックします。
    オプション:ボタン画面表示形式 「メニュー」→「設定」 チェックしたモードでボタン画面表示形式を行います。
     1行2列/横スクロール
     数行1列/縦スクロール
    オプション:PLAY専用 「メニュー」→「設定」 プレイモードを開始します。
    オプション:自動全探索(使用不可) 「メニュー」→「設定」 自動全探索を行う場合にチェックします。
    オプション:音声ページ移動(使用不可) 「メニュー」→「設定」 音声認識によるネットワークノート区分変更を行う場合にチェックします。
    オプション:キャッシュによる高速化(使用不可) 「メニュー」→「設定」 原則、チェックしてください。前に行った探索の結果を利用して同じ探索の実施を抑制し、高速化を行います。
    オプション:自動ネット同期(使用不可) 「メニュー」→「設定」
    (特別機能)
    ネット同期を自動的に行う場合にチェックします。
    ヘルプ:マニュアル表示 「メニュー」→「ヘルプ」 ネット上のマニュアル(https://knowrel.com/html/howto.html)を開きます。アクセス出来なければ、インストールしたマニュアル(jdprolog\html\howto.html)を開きます。
    ヘルプ:ライセンス認証 「メニュー」→「ヘルプ」 ライセンス認証画面を開きます。
    ヘルプ:バージョン情報 「メニュー」→「ヘルプ」 HUMANOTE/中学$Prologのバージョン情報を表示します。
    ヘルプ:language(使用不可) 「メニュー」→「ヘルプ」 言語設定を変更します。

    67.コンテキストメニュー一覧

    表示ログ上でのコンテキストメニュー
    表示ログコピー 表示ログ上の選択内容をコピーします。
    表示ログクリア 表示ログ上の内容をすべてクリアします。

    リスト表示欄のコンテキストメニュー
    編集 リスト表示欄で選択した項目に、「##edit 行番:」をつけて入力欄に表示します。
    削除 リスト表示欄で選択した項目を、現在のリストから削除します。
    コピー リスト表示欄で選択した項目を、現在のリストからコピーします。
    コピー※行番なし リスト表示欄で選択した項目を、行番を取り除いて現在のリストからコピーします。
    入力欄へ リスト表示欄で選択した項目を、そのまま入力欄に表示します。
    ソート(昇順) リスト表示欄で選択した項目を、昇順に並び替えます。
    ソート(降順) リスト表示欄で選択した項目を、降順に並び替えます。
    コメントアウト/イン 事実ならば主張(そのまま送信してリストに追加)し、ルールならばルールヘッドを質問文として送信します。
    主張/質問 リスト表示欄で選択した項目が事実ならば主張(そのまま送信してリストに追加)し、ルールならばルールヘッドを質問文として送信します。

    68.プレイモード

    プレイモード実行中は、表示形式や機能がプレイモード用のものに変わります。
    コマンドも、実行出来ないものや仕様が変わるものになります。

    プレイモード画面

    69.プレイモード選択欄表示

    基本
    プレイモード中は、事実またはルールヘッドを選択欄に表示します。
    ルールボディは表示はされませんが、リストには残っているので、推論の根拠には使われます。
    非表示(一行分)
    △△△_
    ○○○_ :- □□□ ;

    事実またはルールヘッドの末尾が'_'だった場合、その行はプレイモード中は選択欄に表示しないようにします。
    表示はされなくても、リストには残っているので、推論の根拠には使われます。
    非表示(範囲選択)
    "<_" ~ ">_"

    "<_"の行から、">_"の行の間の行は、すべてプレイモード中は選択欄に表示しないようにします。
    表示はされなくても、リストには残っているので、推論の根拠には使われます。
    ガードとアクション
    ○○○ :- □□□ ; _ ;△△△ ;

    ルールボディの条件式の一つが"_"になっているルールは、それより前の条件式がガード、それより後の条件式がアクションになります。
    ガードを含むルールヘッドは、プレイモード中ならばガードが真になる場合のみ選択欄に表示します。
    上の例ならば、プレイモード中ならば□□□が真になる場合のみ、○○○を選択欄に表示します。
    表示はされなくても、リストには残っているので、推論の根拠には使われます。

    70.プレイモードの読込、保存時の機能

    "///■"(一時文脈コメント)
    プレイモードによるリスト保存時、一時文脈の先頭に"///■"をつけて保存します。
    先頭に"///■"がついた内容は、読込時は一時文脈として読み込まれます。
    #onload
    リスト読込後、左辺が「#onload」となっているルールが、読み込んだ内容に含まれている場合、右辺の「コマンドの列」を順番に呼び出すことができます。
    #onleave
    リスト読込前、左辺が「#onleave」となっているルールが、今まで読み込んでいた内容に含まれている場合、右辺の「コマンドの列」を順番に呼び出すことができます。

    71.引継ぎ処理

    "<*" ~ ">*"

    新たなリストを読み込む際、元々のリストの内容を引き継ぎます。
    元々のリストの"<*"の行から">*"までの間の行の内容を、新たなリストに追加します。

    100.伝統的PROLOGにできて、中学$PROLOGにできないこと

    中学$PROLOGで出来ないこと
    ・関数、リスト処理、複合項
    ・数値演算、数値比較、オペレータ定義
    ・条件分岐、ループ、カット、スニップ
    ・コンパイル

    101.共通の制限(ルール、事実、質問)

  • 1行のルールで用いる変数は16種類までです。
  • 1行に用いる文字数は最大で1024文字までです。
  • リストに登録出来る行数は最大で10000行までです。
  • 変数に「:YES」代入する(束縛する)ことはできません。
  • "__"、";;"は使えません。
  • 固定文字で区切られない複数の変数が含まれている内容は登録できません。
  • 変数を「${自由な文字列}」という形式で表記する場合、"自由な文字列"に以下の文字は使えません。
  • ¥ ^ . $ * ? | ( ) [ ] { }

    102.ルール及び事実の制限

  • ヘッドとボディが同じルールは登録できません。
  • 変数を含んだ事実は登録できません。
  • ヘッドに含まれている変数がボディに含まれていないルールは登録できません。
  • 現在のリストに既に存在する事実やルールは登録できません(オプション)。
  • 現在のリストに既に存在するルールのボディとヘッドが入れ替わったルールは登録できません(オプション)。
  • 1つのルールにはボディとして、命令文(print、req等)や条件式等を10個まで設ける事ができます。
  • 空白だけからなる事実やルールは登録できません。
  • 103.質問の制限

    無限ループの検出、探索深さ/探索回数の制限
    自己再帰、相互再帰

    104.手続き的解釈

    手続き的解釈
    手続的解釈とは、ルールのボディ部における複数の条件式の並びを、 その並んでいる順序を保った「探索手続き」(副作用を伴う場合には処理手続き)として解釈することです。
    中学$PROLOGにおいて、ルールのボディ部における複数の条件式間の関係はAND結合であり、 その並んでいる順序に関係なく、全ての条件が真でありさえすればルールヘッド部は真となります(宣言的解釈)。
    しかし、「条件式が並んでいる順序でコンピュータが条件の探索/処理をする」という約束 (※多くの手続き型言語のif文内の条件のAND結合はそのような約束になっています)をすることにより、 ルールのボディ(条件部)を編集する人は、確認された条件(より左側に並んでいる条件)と確認されていない条件(より右側に並んでいる条件)との間に、 「変数の絞り込みの中間結果」を表示するprint文等(ある種の副作用を伴うコマンド)を配置することが可能になり、 コンピュータ言語としての幅を広げています(BASIC/C言語等と同様の手続的/操作的な意味論の付与)。

    その他

    お客様サポート

  • ソフトウェアの不具合やお客様からのご要望、お問い合わせにつきまして、ご購入日から3年間対応させていただきます。
  • 原則、eメールでの対応とさせて頂きます。
  • お手数ですが、info@humanote.xyz宛に、ライセンス認証で使用されたメールアドレスからお願いします。

  • ソフトウェア使用許諾契約

    必ず以下のソフトウェア使用許諾契約をよくお読み頂き、同意される場合にのみご使用ください。

    ナレルシステム株式会社(以下、「当社」)は、お客様に、メディア配布、メール送信、ダウンロード、その他の手段により提供されたソフトウェア(以下、「本ソフトウェア」)を使用する権利を下記の条件で許諾します。

    第1条 権利の許諾
    1.お客様は、本契約の条項にしたがって本ソフトウェアを使用する非独占的な権利を本契約に基づき取得します。お客様は、お客様のPCに搭載されたハードディスクその他の記憶装置に本ソフトウェアをインストールし、使用することができます。
    2.お客様は、本ソフトウェアをバックアップの目的において複製することができます。

    第2条 禁止事項
    1.お客様は、本ソフトウェアを改変、リバースエンジニアリング、逆コンパイルまたは逆アセンブルすることはできません。
    2.お客様は、本契約書に明示的に許諾されている場合を除いて、本ソフトウェアの全部または一部を使用、複製することはできません。
    3.お客様には本ソフトウェアを第三者に使用許諾する権利はなく、また販売、貸与またはリースすることもできません。

    第3条 契約期間
    1.本契約は、お客様が本ソフトウェアをダウンロードし、メールにより受領し、メディアを受領し、またはお客様のハードウェアにインストールした日をもって発効し、本条第2項によって終了されない限り有効に存続するものとします。
    2.お客様が本契約のいずれかの条項に違反したときは、当社は、お客様に対し何らの通知、催告を行うことなく直ちに本契約を終了させることができます。その場合、当社は、お客様の違反によって被った損害をお客様に請求することができます。なお、本契約が終了したときには、お客様は直ちにお客様のハードウェアに保存されている本ソフトウェアを破棄するものとします。

    第4条 免責
    1.本ソフトウェアのご使用、ご利用(本ソフトウェアにより出力されたデータの利用を含む)は、使用者、利用者ご自身の責任と費用によっておこなってください。当社は本ソフトウェアを利用する、もしくは利用できないことにより発生した損害、ならびに二次的に発生した一切の損害についていかなる責任も負わないものとします。
    2.当社は、いかなる場合においても、結果的、付随的あるいは懲罰的損害について、一切責任を負いません。お客様は、本ソフトウェアの使用に関連して第三者からお客様になされた請求に関連する損害、損失あるいは責任より当社を免責し、保証するものとします。
    3.本ソフトウェアは、一切の保証なく、現状で提供されるものであり、当社はその商品性、特定用途への適合性をはじめ、明示的にも黙示的にも本ソフトウェアに関して一切保証しません。

    第5条 著作権
    本ソフトウェアに関する著作権等の知的財産権は、当社に帰属し又は第三者から正当なライセンスを得たものであり、本ソフトウェアは、日本国およびその他の国の著作権法、特許法、商標法、意匠法、不正競争防止法ならびに関連する条約によって保護されています。

    第6条 一般条項
    本契約に関する紛争は、法令に特段の定めのない限り金沢地方裁判所を第一審の管轄裁判所とすることに合意します。

    第7条 バージョンアップ
    1.お客様に予告なしに本ソフトウェアの変更を行うことがあります。
    2.当社は本ソフトウェアを改良した新しいバージョンのソフトウェア(以下「新バージョン」という)をお客様に対して有償または無償で提供することができます。
    3.バージョンアップキットの提供を受けたお客様は、本ソフトウェアの使用権その他の権利を失い、新バージョンについて新しい契約による権利を取得するものとします。

    第8条 サポート期間
    1.本製品を購入された日か3年が経過した後は本ソフトウェアに関するサポートは終了するものとします。
    2.新バージョンが販売・配布された場合、本ソフトウェアは特別な理由により継続される場合を除き販売・配布終了となります。本ソフトウェアに関するサポートはそれに関わらず購入から1年経過した後に終了するものとします。
    3.前2項の規定にかかわらず、サポート終了後も当社の指定した期間内に限り、お客様はバージョンアップのサービスを受けることができるものとします。

    第9条 賠償請求
    お客様が、第2条または第3条に違反して本ソフトウェアの複製または譲渡、貸与等を行った場合、当社はお客様に対し、損害賠償として、本ソフトウェアの希望小売価格に複製回数を乗じて得た額の2倍に相当する金額を請求できるものとします。

    第10条 本規約の改定
    当社は、本規約を任意に改定できるものとし、また、当社において本規約を補充する規約(以下「補充規約」といいます)を定めることができます。本規約の改定または補充は、改定後の本規約または補充規約を当社所定のサイトに掲示したときにその効力を生じるものとします。この場合、会員は、改定後の規約および補充規約に従うものと致します。

    以上
    平成29年9月3日制定 平成29年7月28日改定(サポート期間を1年から3年に延長)

    謝辞

    安藤建剛さん、木戸口卓矢さん、川畑さんには本ソフトウェアの開発にあたり、多大なご協力を頂きました。深く感謝いたします。