REPL インタラクティブインタプリタ
YaoXiang REPL(Read-Eval-Print Loop)は、YaoXiang コードを行単位で入力・実行できるインタラクティブなコード実行環境で、学習、テスト、デバッグに最適です。
クイックスタート
REPL の起動
ターミナルで以下のコマンドを実行して REPL を起動します:
yx replまたは yaoxiang を直接実行します(サブコマンドなし):
yaoxiang起動すると、以下のようなプロンプトが表示されます:
YaoXiang REPL - Type :help for assistance
Press Ctrl+D or :quit to exit
>>基本操作
プロンプト >> の後に YaoXiang コードを入力し、Enter キーで実行します:
>> 1 + 2
3
>> "Hello, World!"
"Hello, World!"
>> x = 10
>> x * 2
20REPL の終了
REPL を終了する方法は 3 つあります:
- ショートカット:
Ctrl+Dを押す - コマンド:
:quitまたは:qを入力する - 中断:
Ctrl+Cを押して現在の入力を中断する
コマンドシステム
REPL はコロン : で始まる一連の特殊コマンドを提供します。
ヘルプコマンド
>> :help利用可能なすべてのコマンドのヘルプ情報を表示します。
終了コマンド
>> :quitREPL を終了します。短縮形 :q も使用できます。
クリアコマンド
>> :clear定義済みのすべての変数と関数をクリアし、REPL の状態をリセットします。短縮形 :c も使用できます。
型表示コマンド
>> :type xシンボル x の型情報を表示します。短縮形 :t も使用できます。
例:
>> name = "YaoXiang"
>> :type name
name: String
>> add: (a: Int, b: Int) -> Int = a + b
>> :type add
add: fn(Int, Int) -> Intシンボル一覧コマンド
>> :symbols現在の REPL で定義済みのすべてのシンボル(変数と関数)を一覧表示します。短縮形 :i または :info も使用できます。
例:
>> x = 10
>> y = 20
>> greet: (name: String) -> String = "Hello, " + name
>> :symbols
x: Int
y: Int
greet: fn(String) -> String履歴コマンド
>> :historyコマンド履歴を表示します。短縮形 :hist も使用できます。
統計コマンド
>> :stats評価回数や合計実行時間などの実行統計情報を表示します。
例:
>> :stats
Eval count: 5
Total time: 12.34msコード実行
式の実行
REPL は有効な YaoXiang 式であれば何でも実行できます:
>> 1 + 2
3
>> 10 * 5 + 3
53
>> "Hello" + " " + "World"
"Hello World"
>> true and false
false変数の定義
変数名を直接使用して変数を定義します:
>> name = "YaoXiang"
>> age = 25
>> pi = 3.14159型を明示的にアノテーションすることもできます:
>> name: String = "YaoXiang"
>> age: Int = 25定義した変数は後続のコードで使用できます:
>> name
"YaoXiang"
>> age + 5
30関数の定義
YaoXiang には fn キーワードがありません。関数はシグネチャを持つ単なる値です:
>> add: (a: Int, b: Int) -> Int = a + b
>> greet: (name: String) -> String = "Hello, " + name関数の呼び出し:
>> add(3, 4)
7
>> greet("World")
"Hello World"複数行コード
REPL は複数行コードの入力をサポートしています。コードが不完全であることが検出された場合(例:閉じられていない括弧)、自動的に継続行モードに入ります:
>> factorial: (n: Int) -> Int = {
.. if n <= 1 { return 1 }
.. return n * factorial(n - 1)
.. }継続行プロンプトは .. で、複数行入力モードであることを示します。
型定義
>> Point: Type = { x: Float, y: Float }バリアント型定義(列挙型)
>> Color: Type = { red: () -> Color, green: () -> Color, blue: () -> Color }自動補完
REPL はスマートな自動補完機能を提供し、コードの迅速な入力を支援します。
トリガー方法
Tab キーを押して自動補完をトリガーします。
補完内容
- キーワード補完:YaoXiang 言語のキーワード(Tab を押すと展開可能)
- シンボル補完:定義済みの変数と関数名
- 組み込み関数補完:
print,len,range,typeof,assertなどの組み込み関数
補完例
>> my_variable = 42
>> my_<Tab>
my_variable: Int
>> calculate_sum: (a: Int, b: Int) -> Int = a + b
>> calc<Tab>
calculate_sum: fn(Int, Int) -> Int高度な機能
エラーハンドリング
コードにエラーがある場合、REPL は詳細なエラー情報を表示します:
>> x = 10 / 0
Error: Runtime error: DivisionByZero
>> undefined_variable
Error: Unknown symbol: undefined_variableエラーが発生しても REPL セッションは終了せず、新しいコードを引き続き入力できます。
履歴
REPL はコマンド履歴を自動的に保存し、以下をサポートします:
- 上下矢印キー:履歴コマンドの参照
- 検索:一部の内容を入力後、上下矢印キーで検索
- 履歴ファイル:履歴はファイルに保存され、次回起動時に自動的に読み込まれる
実行統計
:stats コマンドを使用して実行統計を確認します:
>> :stats
Eval count: 15
Total time: 45.67msこれはコードパフォーマンスのモニタリングに役立ちます。
ベストプラクティス
1. 意味のある変数名を使用する
// 良い例
user_name = "YaoXiang"
max_retries = 3
// 悪い例
x = "YaoXiang"
n = 32. 関数を定義してコードを再利用する
>> is_even: (n: Int) -> Bool = n % 2 == 0
>> is_even(4)
true
>> is_even(7)
false3. :clear を使用して状態をリセットする
REPL の状態が混乱した場合は、:clear を使用してリセットします:
>> :clear
Context cleared4. 自動補完を活用して効率を上げる
最初の数文字を入力してから Tab を押し、変数と関数名を迅速に補完します。
5. 複数行入力を使用して複雑なコードを処理する
>> fibonacci: (n: Int) -> Int = {
.. if n <= 1 { return n }
.. return fibonacci(n - 1) + fibonacci(n - 2)
.. }よくある質問
Q: ある関数の定義を確認するにはどうすればよいですか?
A: :type コマンドを使用して関数のシグネチャを確認します:
>> :type my_function
my_function: fn(Int, String) -> BoolQ: すべての定義をクリアするにはどうすればよいですか?
A: :clear コマンドを使用します:
>> :clearQ: なぜ複数行コードが実行されないのですか?
A: 閉じられていない括弧、引用符、または中括弧がないか確認してください。REPL は完全なコード入力を待ちます。
Q: 長時間実行されるコードを中断するにはどうすればよいですか?
A: Ctrl+C を押して現在の実行を中断します。
Q: REPL はどのデータ型をサポートしていますか?
A: REPL はすべての YaoXiang データ型をサポートします:
Int:整数Float:浮動小数点数String:文字列Bool:ブール値Void:空型- カスタム記録型とバリアント型
セッション例
以下は完全な REPL セッションの例です:
YaoXiang REPL - Type :help for assistance
Press Ctrl+D or :quit to exit
>> greeting = "Hello"
>> name = "YaoXiang"
>> greeting + ", " + name + "!"
"Hello, YaoXiang!"
>> factorial: (n: Int) -> Int = {
.. if n <= 1 { return 1 }
.. return n * factorial(n - 1)
.. }
..
>> factorial(5)
120
>> :symbols
greeting: String
name: String
factorial: fn(Int) -> Int
>> :stats
Eval count: 4
Total time: 2.34ms
>> :quit関連コマンド
| コマンド | 短縮形 | 機能 |
|---|---|---|
:help | :h | ヘルプ情報を表示 |
:quit | :q | REPL を終了 |
:clear | :c | すべての状態をクリア |
:type | :t | シンボルの型を表示 |
:symbols | :i | すべてのシンボルを一覧表示 |
:history | :hist | コマンド履歴を表示 |
:stats | - | 実行統計を表示 |
