このブログは、旧・はてなダイアリー「檜山正幸のキマイラ飼育記 メモ編」(http://d.hatena.ne.jp/m-hiyama-memo/)のデータを移行・保存したものであり、今後(2019年1月以降)更新の予定はありません。

今後の更新は、新しいブログ http://m-hiyama-memo.hatenablog.com/ で行います。

Wolfram言語(ウルフラム)

  1. Prologで関手(圏論とは無関係!)とか関数子と言っているものと同じデータ構造を持つようだ。
  2. 基本、関数型言語らしいが、Prologフレーバーな構文。
  3. パターン表現があって、引数渡しはパターンマッチング。これには異質な構文を使う、はじめて見た構文。
  4. リスト {a, b, c} は List[a, b, c] のシンタックスシュガー。中置二項演算子も同様にシンタックスシュガー。Prologと同じ方式。
  5. 型なしの言語である。型つうか型風タグに関数子の名前=頭部を使う。Erlangもそうだった。ここらもPrologの系譜か。
  6. 数は無限多倍長整数ベースの有理数
  7. 複素単位Iを使って複素数
  8. 浮動小数点数の扱いはよくワカラン。
  9. {1, 2} のようにしてリスト、囲み記号がブレイス。
  10. {{1, 2}, {3, 4}} は行列としても使える。
  11. 記号アトム(データとしての名前)がある。
  12. 束縛されてない記号アトムは自分自身を値にする。名前の評価エラーは起きない。ここは古風なLispっぽい。
  13. セミコロンで手続き的な順次実行になる。
  14. Module[ ] で名前のスコープを作れる。Moduleの第1引数はローカル名を宣言するリスト。
  15. 真偽値はTrue, False
  16. name->value をオプションというようだ。
  17. オプションのリストをマップ/ディクショナリのように使うみたい。
  18. それとは別に連想配列がある。囲み記号が <| |>
  19. リストも連想配列もインデクシングは x[[i]]、なんかRみたいだ。
  20. インデクシングの連続適用は、[["b", 1, 3]] のように。
  21. 範囲を取り出すスライスは x[[i ;; j]]。セミコロン2つが範囲演算子みたい。
  22. オプションは単なる便利構文で、連想配列はデータってことか?
  23. 高階関数Map, Applyがある。Applyに第2引数がリストで、リストは引数並びに展開される。
  24. 匿名関数、ラムダ式を、なんと「純関数」という。激しくワケワカラン呼び方。
  25. 純関数=ラムダ式のラムダ引数は、#1, #2, ... で表す。TeXみたい。1個なら#でよい。
  26. (ラムダ本体式)& という変態構文ラムダ式を表す。丸括弧はときに省略可能。
  27. Function[{x_, y_}, 本体の式] という書き方もある。Functionの第一引数は引数リスト。
  28. 代入を割当てと呼んでいる。
  29. 即時割当てと遅延割当てがある。Makeと似ている。
  30. パターンという構文がある。ワイルドカードの_と__、ORの | が使える。
  31. 入れ子パターンも使える。特に入れ子リストのパターンに便利。入れ子パターンは、構造的データの取扱に便利そう。
  32. __ は列とマッチする、というが「列」って何? リストとは違うみたいだ。
  33. _Name は、頭部がNameである関数子とマッチする。これも、どことなくPrologっぽい。
  34. 評価できないなら、記号アトムまたは関数子としてそのまま残すみたい。型なしだし、なかなかエラーが起きないだろう。良し悪しだな。
  35. 関数定義に、f[x_] := 式 /; 条件 という形でガード付き定義を使える。ガードが満足しないと式に展開されない。
  36. 評価は項書換えのようだ。関数定義は項書換えルール。

サンプルによると、再帰的な定義は次のように書ける。

f[1] = 1
f[n_] := n f[n - 1]

掛け算が併置(空白)でいいのか? へーー。