All Projects → vain0x → friends-lang

vain0x / friends-lang

Licence: MIT license
PL for friends in the Japaripark (Logical programming language with Japanese animation-reference joke syntax)

Programming Languages

typescript
32286 projects
F#
602 projects
shell
77523 projects
javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to friends-lang

madomagiOOP
👨‍💻♐ OOP learning with anime magical girl. (魔法少女で学ぶオブジェクト指向)🧙
Stars: ✭ 17 (-74.24%)
Mutual labels:  joke, japanese-language
Onion Rime Files
電腦 Rime 洋蔥方案(注音、雙拼、拼音、形碼、行列30)
Stars: ✭ 88 (+33.33%)
Mutual labels:  japanese-language
CameraVoyeur
摄像头黑入器。(基于RickAstley论文实现)
Stars: ✭ 111 (+68.18%)
Mutual labels:  joke
Domino-English-Translation
🌏 Let's translate Domino, a Japanese MIDI editor!
Stars: ✭ 29 (-56.06%)
Mutual labels:  japanese-language
Nihonoari-App
A little and minimalist Japanese Kana training
Stars: ✭ 66 (+0%)
Mutual labels:  japanese-language
limelight
A php Japanese language text analyzer and parser.
Stars: ✭ 76 (+15.15%)
Mutual labels:  japanese-language
keyboard
A terrible terrible soft-keyboard that randomises keys on every press.
Stars: ✭ 17 (-74.24%)
Mutual labels:  joke
fontregisterer
Cross-platform auto font registerer for R grapics/Rでグラフ描くためのフォント自動登録パッケージ (クロスプラットフォーム)
Stars: ✭ 14 (-78.79%)
Mutual labels:  japanese-language
BallBall-Words
🙇背单词(日语英语)的微信小程序
Stars: ✭ 76 (+15.15%)
Mutual labels:  japanese-language
kanji-frequency
Kanji usage frequency data collected from various sources
Stars: ✭ 92 (+39.39%)
Mutual labels:  japanese-language
ra-language-japanese
Japanese messages for react-admin
Stars: ✭ 22 (-66.67%)
Mutual labels:  japanese-language
google-news-scraper
Google News Scraper for languages like Japanese, Chinese... [VPN Support]
Stars: ✭ 88 (+33.33%)
Mutual labels:  japanese-language
StarWarsArrays.jl
Arrays indexed as the order of Star Wars movies
Stars: ✭ 93 (+40.91%)
Mutual labels:  joke
jaco-js
Japanese character optimizer for JavaScript
Stars: ✭ 72 (+9.09%)
Mutual labels:  japanese-language
echo-meme
Print your message as a part of various Japanese internet memes.
Stars: ✭ 27 (-59.09%)
Mutual labels:  joke
noop-cli
◻️ Supreme nothingness
Stars: ✭ 30 (-54.55%)
Mutual labels:  joke
kotoba
A Discord bot for helping with learning Japanese.
Stars: ✭ 118 (+78.79%)
Mutual labels:  japanese-language
xkcd-excuse-generator
Serverless image generator that uses XKCD comic as basis for _all_ excuses!
Stars: ✭ 63 (-4.55%)
Mutual labels:  joke
type-kana
A quiz app to help you learn hiragana and katakana, the Japanese syllabaries
Stars: ✭ 21 (-68.18%)
Mutual labels:  japanese-language
Hibi
[No Active Development] An Android app for learning Japanese by keeping a journal.
Stars: ✭ 37 (-43.94%)
Mutual labels:  japanese-language

フレンズ言語 (Friends-lang)

Build Status

フレンズ言語 は、ジャパリパークのフレンズのためのプログラミング言語。

インストールと使い方

  • 最新版のパッケージをダウンロードして展開します。
    • Windows の場合は friendsi-win-x64.zip
    • macOS の場合は friendsi-osx-x64.zip
    • Linux の場合は friendsi-linux-x64.zip
  • friendsi.exe (または friendsi) を実行します。
  • ようこそジャパリパークへ!

文法

すごーい! 文

すごーい! 文では、事実を述べることができる。

すごーい! かばんちゃん は ヒトの フレンズ なんだね!

条件つきのすごーい!文では、仮定が真である場合に、結論も真であることを述べる。以下の例では、命題「あなた が ヒトの フレンズ」が真である場合に、命題「あなた は しっぽのない フレンズ なんだね!」も真であることを述べている。

すごーい! あなた が ヒトの フレンズ なら
あなた は しっぽのない フレンズ なんだね!

なんだっけ? 文

なんだっけ? 文では、事実を確認したり、一定の性質を満たすものを探索したりできる。

すごーい! かばんちゃん は ヒトの フレンズ なんだね!
すごーい! あなた が ヒトの フレンズ なら
あなた は しっぽのない フレンズ なんだね!

だれ が しっぽのない フレンズ なんだっけ?

出力:

「だれ」は「かばんちゃん」、
あってる? (y/n)Y
やったー!

この なんだっけ? 文では「かばんちゃんはヒトのフレンズ」かつ「ヒトのフレンズはしっぽのないフレンズ」だから「かばんちゃんはしっぽのないフレンズ」である、と推論している。

推論

なんだっけ? 文の実行の手順について解説する。

最初の手順は、与えられた命題の定義を探索することである。例えば、先述の文

だれ が しっぽのない フレンズ なんだっけ?

を実行するには、まず

X が しっぽのない フレンズ なんだね!

で終わる すごーい! 文を探す。そして次が見つかる。

すごーい! あなた が ヒトの フレンズ なら
あなた は しっぽのない フレンズ なんだね!

次に、次の2つの命題を単一化する。

  • だれ が しっぽのない フレンズ
  • あなた が しっぽのない フレンズ

単一化とは、2つの項や命題が同一になるように、変数の値を埋めていく処理をいう。この例では、変数「だれ」=変数「あなた」という割り当てにより、2つの命題を同じ「あなた が しっぽのない フレンズ」に単一化できる。

条件つきのすごーい!文は、仮定が真である場合にのみ、結論も真であると主張している。すなわち、この段階では、まだ命題

あなた が しっぽのない フレンズ

が真かどうかは分からない。そのため、仮定

あなた が ヒトの フレンズ

の真偽を判定する必要がある。繰り返しになるが、「X が ヒトの フレンズ」で終わる すごーい! 文を探索して、

すごーい! かばんちゃん は ヒトの フレンズ なんだね!

を見つける。「あなた が ヒトの フレンズ」と「かばんちゃん は ヒトの フレンズ」を単一化して、「あなた」=「かばんちゃん」という割り当てを得る。このすごーい! 文は無条件に成り立つので、確認すべき仮定はない。

結局、変数「だれ」=変数「あなた」=「かばんちゃん」という割り当てにおいて、命題

だれ が しっぽのない フレンズ

すなわち

かばんちゃん が しっぽのない フレンズ

が真であることが分かる。

フレンズ言語の仕組みは、「単一化」と「命題の真偽の判定」だけである。

フレンズ言語の について説明する。(他の言語では式と呼ぶことが多いが、ここでは伝統に従って項と呼ぶ。)

変数とアトム

「だれ」「あなた」「きみ」などのいくつかの単語と、アンダーバー _ で始まる単語は、変数 という。単一化において、変数は任意の項と単一化できる。ただし、既に変数 X が項 t に単一化されている状況では、同じ変数 X は t にのみマッチする。例えば、項「X と X」は「サーバル と サーバル」や「かばんちゃん と かばんちゃん」にマッチするが、「サーバル と かばんちゃん」にはマッチしない。

それ以外の単語 (先ほどの「かばんちゃん」など) は アトム という。単に文字列のことだと思ってかまわない。

複合項

t の a という形の項を 複合項 という。複合項は、同じ形の複合項とマッチする。

リスト

先に詳しい人のためにいっておくと、フレンズ言語のリストは cons セルであり、nil は単なるアトムである。

t_1 と t_2 と … と t_n という形の項を リスト という。リストは、同じ形のリストとマッチするが、後述の尾部を持つリストともマッチする。

t_1 と t_2 と … と t_n と ts とか という形の項を ts尾部とするリスト という。これは平たくいえば、リスト t_1 と t_2 と … と t_n にリスト ts を連結したものだと思ってかまわない。例えば、変数 _Xs を尾部とするリスト a と b と _Xs とか は次のように単一化される。

対象 _Xs の値
a と b 長さ 0 のリスト
a と b と c c を含む長さ 1 のリスト
a と b と c と d c と d

より優先順位が低い。「リスト の a」という形の複合項を記述する場合は、括弧 「」 を用いて、 「x と y」の a と書く。

自然数

自然数 (0, 1, 2, ...) は、アトムや複合項の略記である。まず、0 は単にアトム 0 である。n = m + 1 とするとき、項 n は m の 次 という複合項を表す。要するに、次の表のようになる。

自然数
0 0
1 0 の 次
2 0 の 次 の 次
3 0 の 次 の 次 の 次

したがって、

すごーい! 3 は three フレンズ なんだね!
あなた の 次 は three フレンズ なんだっけ?

とすると、変数「あなた」 = 0 の 次 の 次 = 2 という割り当てが得られる。

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].