🪃

Uiua 言語の開発環境

2023/09/29に公開

https://zenn.dev/hatappo/articles/e1451b535232a4

の続き

Font

公式が推奨する DejaVu Sans Mono フォント。
Griph をきれいに表示しないと Uiua の魅力も半減するのでフォントは大事と思われる。
以下からダウンロード。いろんな派生フォントが入っているけど DejaVu Sans Mono を探してインストール。

https://dejavu-fonts.github.io/Download.html

MacOS なら 該当の DejaVuSansMono.ttf ファイルをダブルクリックして、インストールで OK 。

VSCode Extension

公式で提供されている。

https://marketplace.visualstudio.com/items?itemName=uiua-lang.uiua-vscode

インストールしたら Uiua 用のデフォルト設定で DejaVu Sans Mono が勝手に指定されていたので手間が省けた。

  // uiua 言語が優先される設定を構成します。
  "[uiua]":  {
    "editor.semanticHighlighting.enabled": true,
    "editor.inlayHints.enabled": "on",
    "editor.fontFamily": "DejaVu Sans Mono, monospace",
    "editor.fontSize": 16
  },

拡張機能自体に設定できる項目は少ない。

Uiua 実行ファイルの場所を指定する項目だけ。これはパスが通っているなら特に設定しなくても大丈夫。

{
  // Path to the Uiua executable used by the Uiua extension. When empty, the extension will try to find the Uiua executable in your PATH environment variable.
  "uiua.executablePath": ""

}

書いてみる

公式ドキュメントから適当なサンプルをコピペ https://uiua.org/pad?src=⇌[⍥(%2B%2C%2C)10 1 0]

  1. 貼り付けた直後の状態
  2. ファイルを保存した後。拡張機能のフォーマットが実行され Griph に変換される。
  3. 各 Griph にカーソルをあてると説明がホバーされる。この場合は
  4. 実行
main.ua
$ uiua run
[7 1 9 9 5]
  1. コードの解説: ⌊×10[⍥⚂5]
    1. 右から順に評価される。
    2. [] は配列を作る。
    3. 5 をスタックに積む。
    4. random 演算子: 乱数を生成する。乱数は 0〜1 の数。
    5. reapeat 演算子: スタックからポップした数値(この場合は 5 )だけ、引数となる演算子(この場合は random )を繰り返し処理する。結果はスタックに積まれる。
    6. 10 をスタックに積む。
    7. × multiply 演算子: 乗算する。Uiua の演算子はたいていスカラ値とコレクション [1] どちらも適宜処理する。この場合は 10 を 配列 の各要素それぞれに乗算する、という動きになる。
    8. floor 演算子: 数値を切り捨てする。この場合も配列の各要素に対して作用する。
    9. 最終的にスタックに残るのは、 「ランダムな 0〜1 の数値を10倍して切り捨てした5つの数値を持つ配列」となる。
  2. 途中経過を見るために、 . duplicate という、スタックの先頭要素を複製してスタックに積む演算子を挿入して、途中状態をコピーして残してみる。
    ⌊×.10.[⍥⚂5]
$ uiua run
[0.143500830471 0.987054020347 0.583803611989 0.59630190826 0.069020688416]  # ランダムな5つの数値を持つ配列
[1.435008304713 9.870540203471 5.83803611989 5.963019082604 0.690206884163]  # そのそれぞれの値を10倍に
[1 9 5 5 0]  # 切り捨て

感想

直感的な Griph もあれば微妙なのもある。
コードの見た目が楽しい。
S式以上にコードが短くなる。

続き ↓
https://zenn.dev/hatappo/articles/9a7f4e601df235

脚注
  1. Uiua では配列が唯一存在するコレクション型。 ↩︎

Discussion