﻿
	日本語プログラミング言語「紫」

  「めぐりあひて見しやそれとも分かぬまに
                           雲がくれにし夜半の月かな」
                                           紫式部


1. 紫による日本語プログラミング言語とは

「紫」は、日本語でプログラムの書ける新しい言語です。
並列ロジックプログラミング言語「デカルト言語」で作成し
ました。

他にも日本語プログラミング言語は、いろいろと存在します。
しかし、従来の日本語プログラミング言語は、基本的には
手続き型のプログラミングモデルで動作するものが多いでしょう。
手続き型の処理では、順に上から下に実行され、受け付ける構文
は規定された範囲内で厳密に制限されます。

しかし、それらと「紫」には大きな違いがあります。
それは、「紫」は一階述語論理のプログラミングモデルを基に
していることです。「紫」では、論理的な関係を日本語で記述する
ことによって、プログラムを作成します。

作成されたプログラムは、「紫」により、一階述語論理の関係に
分解されてコンパイルされ実行されます。



2. 簡単なプログラム例

まずは、紫のプログラムの雰囲気を伝えるために、簡単
なプログラム例を示しましょう。

-- ここからプログラム例 soc.mrs -----------

// 人間についての定義
#xが人間であれば、#xは言葉を使う。
#xは、言葉を使うならば、#xは論理的に思考する。

// ソクラテスについて
ソクラテスは人間である。

// 質問
ソクラテスは、論理的に思考するか？


-- ここまでプログラム ---------------------

以下に実行例を示しましょう。

$ descartes murasaki soc.mrs

ソクラテスは、論理的に思考するか？
ソクラテスは、論理的に思考です。

デカルト言語のパッケージの中の" example/murasaki/samples"の下に
いくつか例題プログラムを入れてあるので試してみてください。



3. 紫の構文

3.1 変数

　変数は、先頭に#の付いたワードである。

　例) #x, #人間, #result

3.2 単文

　単文は、基本的な構文であり、一つの事実関係について記述する。

　...　は(or が) ... 述語
　...　は(or が) ... を ... 述語
　...　は(or が) ... と ... と　("と"は複数可) ... を(or が, を, の, に) ... 述語
　...　を(or に, の) ... 述語

  それぞれの助詞の後ろには"、"があっても良い。

3.3 文末
 
　文末は、"する", "です", "だ", "である", "した", "します"のいずれか。
　必ず文末の最後には"。"を置くこと。

3.4 文

　プログラムを定義するための構文である。
　一つの単文で構成された、一つの事実関係について述べた文である。
　単文と文末の組み合わせで構成される。

　単文 文末 。

　例) #xは()と#xの、リスト追加です。

  #x	: 変数
  は
  ()    : 空リスト 
  と 
  #x    : 変数
  の 
  、
  リスト追加  : 述語 

  です   : 文末
  。


3.5 複文

　プログラムを定義するための構文である。
　条件を示す単文と、その条件に合致したときに真と判定される単文の
　組み合わせであり、次のような構文である。

　単文 である場合 単文 文末 。

　"である場合"は、"である場合", "であれば", "であるとき", "の場合", 
  "のとき", "するならば"のいずれかでも可。

　また、複数の条件を繋げた文も以下のように可能だ。

　単文 であり ... 単文 であり 単文 である場合 単文 文末 。

　「単文 であり」の部分は、複数存在しても良い。
　"であり"は、"であるかつ", "であり", "でかつ", "するかつ", "かつ", 
  "したかつ", "し", "で"のいずれかでも可。

  例) 
   #xが人間であれば、#xは言葉を使う。

   #xは、言葉を使うかつ、#xは文字を使うかつ、#xは、社会を形成するならば、
   #xは文化を持つ。

3.6 疑問文

  プログラムの起動に使われ、事実関係の確認を行う。
　結果として回答が返される。

  文の文末が、"ですか", "か", "であるか", "するか", "したか", "しますか"
  である。最後の句読点は、"。"以外にも"？", "?"でも可。

　例)
   ソクラテスは、論理的に思考するか？
　 ネコは文化を持つか？　

3.7 疑問文すべて

  プログラムの起動に使われ、事実関係の確認を行う。
　結果として該当するすべての回答が返される。

  文の文末が、"であるすべて", "すべて" である。
  最後の句読点は、"。"以外にも"？"でも可。

  例)
   #xは書物を残すすべて?

3.8 命令文

  疑問文とまったく同様に、プログラムの起動に使われ、事実関係の確認を行う。
　結果として回答が返される。

  文の文末が、"してください", "して下さい", "して", "しろ", "せよ"
  である。最後の句読点は、"。"以外にも"？", "?"でも可。

  例) 
   ハローワールドを実行してください。

3.9 注釈

  // から行末までが注釈(コメント)になる。

　文の途中には注釈は書けないことに注意。



4. 紫の組み込み述語

  [数の計算]

　数式 を 計算 する 。

  数式は、変数 = 式の形態で、たとえば #x = 2 * 3 などである。

　例)
    #x = 2 * 3 を計算する。

  [数の比較]

  比較式 を 比較 する。
  比較式 が 成立 する。

　上に示すように２種類の表現があります。
　比較式は、大小関係を判定する式で、たとえば #x + 7 >= #y * 8
  などである。

　例)
   #x + 7 >= #y * 8 を比較する。
   #x + 7 >= #y * 8 が成立する。

　[表示]

  (リスト) を 表示 する。
　改行 を 表示 する。

　リストの中には、句読点"。"と ”、"は使えません。表示後に
　改行します。
  「改行を表示する。」は、改行だけを行います。

　例)
   (結果 #x) を表示する。
   改行を表示する。

5. 紫のプログラムのデバッグ

  エラーを起こした構文をエラーメッセージで表示します。
　しかし、幅広い日本語の構文をできるだけ解釈しようと
　するため、思った動作をしなかったりエラー箇所がわかり
　にくくなることが多いです。

　紫は、元の日本語プログラムをデカルト言語に変換して
　から実行しています。その変換後のプログラムは、
　カレント・ディレクトリの下にtmpfile.txtの名前
  で作成されるのでそれを参照するとエラーの原因解明
　に役立つことでしょう。

　(デバッグと構文の解釈の精度向上あるいは多少の構文の
　誤りを自動補正するような工夫が今後の課題と思います。)

                                          以上




