
2026/01/18 5:44
トルコ語の格変化をベースとするプログラミング言語
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
(全ての重要ポイントを組み込んだもの)
Kip – ケースベース型研究言語
Kip は、トルコ語の格変化を型システムと構文に埋め込む実験的プログラミング言語です。名詞格接尾辞と母音調和を用いて引数関係を表現し、関数引数の順序を柔軟に変更できる一方で意味は明確に保たれます。
コア機能
| 機能 | 説明 |
|---|---|
| 引数順序 | 格接尾辞が役割を決定します。例: と は同じ意味です。 |
| 帰納型 | トルコ語構文で宣言します。例: |
| 多相型 | 同様に宣言します。例: |
| パターンマッチング | 条件付き接尾辞 を使用し、入れ子パターンとワイルドカード をサポートします。 |
| 定数 | キーワード で宣言します。例: |
| 組み込み型 | 整数 () – 算術、比較、階乗;文字列 () – 長さ、連結、整数へのパース。 |
| I/Oプリミティブ | 出力:;入力:;シーケンス接尾辞 。 |
形態論と実装
- Kip はトルコ語の形態解析に TRmorph の有限状態変換器を利用します。曖昧な単語はすべてのパースで表現され、アポストロフィで解消できます。
- コンパイラは Foma(パッケージマネージャ経由)と Haskell Stack を使用し、REPL (
) で実行するかファイルをstack exec kip
で実行します。WASM プレイグラウンドは--exec
以下にあります。playground/
プロジェクト状況
Kip は研究専用プロジェクトです。構文と挙動は進化する可能性があります。キャッシュされたバイトコードファイル (
.iz) は、コンパイラが変更されると無効になります。
この要約はすべての主要ポイントを反映し、元のテキストに忠実でありながらメインメッセージを明確かつ簡潔に保っています。
本文
Kip(キプ)
「Kip」(トルコ語で「文法上のムード」を意味する)は、型システムにトルコ語の格変化を取り入れた実験的なプログラミング言語です。
自然言語形態素学―特にトルコ語名詞の格と母音調和―がどのようにプログラミング言語設計に組み込めるかを示しています。
これは「研究/教育プロジェクト」であり、実運用向けの言語ではありません。
トルコ語・英語両方で Kip プログラムを書き方を説明するチュートリアルがあります。
Kip は実験的なものですので、構文や挙動が時間とともに変わる可能性があります。
例プログラム
(* İlk n Fibonacci sayısını yazdırır. *) (bu tam-sayıyı) (şu tam-sayıyı) (o tam-sayıyı) işlemek, (onla 0'ın eşitliği) doğruysa, durmaktır, yanlışsa, bunu yazıp, şunu (bunla şunun toplamını) (onla 1'in farkını) işlemektir. çalıştırmak, "Bir sayı girin:" yazıp, isim olarak okuyup, ((ismin tam-sayı-hali) yokluksa, "Geçersiz sayı." yazmaktır, n'nin varlığıysa, 0'ı 1'i n'yi işlemektir). çalıştır.
目次
- 言語機能
- インストール
- 例プログラム(全文)
- WASM Playground
- バイトコードキャッシュ
- プロジェクト構成
- テスト
- 形態素解析
- ライセンス
言語機能
トルコ語の格を型として利用
Kip はトルコ語名詞の格(ismin halleri)を使い、関数呼び出し時に引数の関係性を決定します。
| 格 | トルコ語名 | 接尾辞 | 例 |
|---|---|---|---|
| 主格 (Nominative) | Yalın hal | none | sıfır |
| 与格 (Accusative) | -i hali | -i, -ı, -u, -ü | sayıyı |
| 対格 (Dative) | -e hali | -e, -a | sayıya |
| 所在格 (Locative) | -de hali | -de, -da, -te, -ta | listede |
| 出所格 (Ablative) | -den hali | -den, -dan, -ten, -tan | listeden |
| 属格 (Genitive) | Tamlayan eki | -in, -ın, -un, -ün | sayının |
| 具格 (Instrumental) | -le eki | -le, -la, ile | sayıyla |
| 所有格(3人称) | Tamlanan eki | -i, -ı, -u, -ü, -si, -sı | ardılı |
柔軟な引数順序
格が文法関係を明示的にマークするため、Kip では引数の順序を自由にできます。
(5'le 3'ün farkını) yaz. (3'ün 5'le farkını) yaz. -- 等価
異なる格接尾辞または型を持つ限り、Kip はどちらが何であるか判別します。
再帰的データ型
トルコ語構文で代数的データ型を定義できます。
Bir doğruluk ya doğru ya da yanlış olabilir. Bir doğal-sayı ya sıfır ya da bir doğal-sayının ardılı olabilir.
多相型(Polymorphic Types)
汎用データ構造のために型変数がサポートされます。
Bir (öğe listesi) ya boş ya da bir öğenin bir öğe listesine eki olabilir.
パターンマッチ
条件接尾辞 -sa/-se を使ってパターンマッチします。
(bu doğruluğun) tersi, bu doğruysa, yanlış, yanlışsa, doğrudur. Supports nested pattern matching, binders, and wildcard patterns (değilse): (bu doğal-sayının) kopyası, bu sıfırsa, sıfır, öncülün ardılıysa, öncülün ardılıdır.
定数
diyelim を使って名前付き定数を定義します。
sıfırın ardılına bir diyelim. birin ardılına iki diyelim.
効果と I/O
-ip/-ıp/-up/-üp 接尾辞で順序付けし、olacak で束縛します。
selamlamak, isim olarak okuyup, ("Merhaba "yla ismin birleşimini) yazmaktır.
組み込み型と演算
整数(tam-sayı)
- 算術:
,toplamı
,farkıçarpımı - 比較:
,eşitliği
,küçüklüğübüyüklüğü - その他:
,öncülü
,sıfırlığıfaktöriyeli
文字列(dizge)
- 長さ:
uzunluğu - 連結:
birleşimi - 整数へ解析:
tam-sayı-hali
I/O
- 出力:
yazmak / yaz - 入力:
okumak / oku
コメント
5'i yaz. (* Integer literal with case suffix *) "merhaba"'yı yaz. (* String literal with case suffix *)
インストール
前提条件
- Foma – 有限状態形態素解析ツールキット
- macOS:
brew install foma - Debian/Ubuntu:
apt install foma libfoma-dev - Fedora:
dnf install foma foma-devel
- macOS:
- Stack – Haskell ビルドツール(https://haskellstack.org)
すべてをビルドせずに言語を試したい場合は、
を実行してください。stack exec kip
ビルド
# 簡易インストール (macOS/Linux) chmod +x install.sh ./install.sh # あるいは手動でビルド stack build
TRmorph の変換器は
vendor/trmorph.fst に同梱されています。
実行
# REPL を起動 stack exec kip # ファイルを実行 stack exec kip -- --exec path/to/file.kip # PATH にインストール stack install
WASM Playground
ブラウザ上で Kip を走らせるプレイグラウンドは
playground/ 配下にあります。非対話型ランナー (
kip-playground) を wasm32-wasi へコンパイルし、Kip を実行する小さな HTML/JS ハーネスを同梱しています。詳細は playground/README.md をご覧ください。
バイトコードキャッシュ
Kip は各
.kip ファイルの型チェック済みバージョンを兄弟ファイル .iz に保存します。再度同じファイルを実行すると、ソースとその依存が変更されていなければキャッシュが再利用されます。
.iz を削除するとパース・型チェックが強制的に再実行されます。
重要:
ファイルにはコンパイラハッシュが含まれており、コンパイラが変更された場合は自動でキャッシュが無効化されます。.iz
プロジェクト構成
app/ └── Main.hs - CLI エントリポイント src/ ├── Kip/ │ ├── AST.hs - 抽象構文木 │ ├── Cache.hs - .iz キャッシュ処理 │ ├── Eval.hs - インタープリター │ ├── Parser.hs - パーサー │ ├── Render.hs - 美しい出力(形態素変化付き) │ └── TypeCheck.hs - 型チェック、格使用検証 └── Language/ └── Foma.hs - Haskell から Foma への FFI バインディング lib/ ├── giriş.kip - デフォルトでロードされる Prelude モジュール ├── temel.kip - コア型 ├── temel-doğruluk.kip - 真偽関数 ├── temel-dizge.kip - 文字列関数 ├── temel-etki.kip - I/O 原語 ├── temel-liste.kip - リスト関数 └── temel-tam-sayı.kip - 整数関数 tests/ ├── succeed/ - 成功を期待するゴールデンテスト (.kip + .out [+ .in]) └── fail/ - 失敗を期待するゴールデンテスト (.kip + .err) vendor/ └── trmorph.fst - TRmorph 変換器
テスト
tests/succeed/ に成功を想定したテスト、tests/fail/ に失敗を想定したテストが配置されています。
形態素解析
Kip は TRmorph を使ってトルコ語の形態素解析を行います。
ある単語に複数のパースが存在する場合(例: takası が「taka + 所有格」または「takas + 与格」)、Kip はすべての候補を保持し、型チェック時に曖昧さを解消します。
意図的に曖昧な語を使いたい場合はアポストロフィで特定パースを強制してください:
taka'sı vs. takas'ı.
ライセンス
詳細は
LICENSE ファイルをご確認ください。