以下は概念的な話ですので、あまり手を動かしてどうこうという内容ではありません。
オブジェクト
- MuPAD が(内部的に)扱う対象を総称してオブジェクト(object)と呼ぶ。
- MuPAD の処理は与えられたコマンドに対して評価(evaluation)をおこない
その結果としてのオブジェクトを返すことの繰り返し。
- 評価をおこなっていく過程で「環境」が変化していく。
- 入出力やグラフィックスは「副作用」として扱われる。
オブジェクトの種類
オブジェクトは次のようなデータ型に分類される。
- 整数 (integer, DOM_INT)
- ex. -3, 10^5
- 有理数 (rational number, DOM_RAT)
- ex. 7/11
- 浮動小数点数 (floating number, DOM_FLOAT)
- ex. 0.123
- 複素数 (complex number, DOM_COMPLEX)
- ex. 1+2/3*I
- 変数/識別子 (symbolic identifier, DOM_IDENT)
- ex. x, y, f
- ex. _x23, the_MuPAD_system
- 数式 (symbolic expression, DOM_EXPR)
- ex. x + y
- リスト (list, DOM_LIST)
- ex. [1,2,3]
- 集合 (set, DOM_SET)
- ex. {1,2,3}
- 行列 (array, DOM_ARRAY)
- 真偽値 (boolean value, DOM_BOOL)
- ex. TRUE, FALSE, UNKNOWN
- 文字列 (string, DOM_STRING)
- ex. "I am string"
- 関数 (function / procedure, DOM_PROC)
- データ型 (domain type, DOM_DOMAIN)
- ex. DOM_EXPR
- ...
domtype(ほげほげ)
でオブジェクトのデータ型(domain type)が返される。
コマンド
わりといいかげんかつ大雑把な分類です。
- オブジェクトそのもの
- 変数操作
- :=
- 変数への値(オブジェクト)割り当て
- delete
- 変数への値(オブジェクト)割り当て解除
- 特殊構文
- if - then - else
- loop
- ...
評価(evaluation)
- 未定義変数の評価値は変数そのもの。
- 基本的には再帰的に評価されるが、特殊構文などの場合はその限りではない。
- ex.
a := PI/3; sin(a)
- ようするに括弧の中身も評価される、ということ。
関数/手続き
- オブジェクト(s)に対してオブジェクトを返すオブジェクト。
- 数百個くらいの関数は最初から定義済み。
- 新しい関数は特殊構文procで定義する。
- ->は単なる省略記法。
副作用
- 入出力やグラフィックスは MuPAD の外部世界との相互作用であり、オブジェクトの範疇におさまらない。
- こういう場合は「副作用」(side effect)として処理される。
ライブラリ
- MuPAD の拡張として様々な分野についての定数や関数などが定義されているパッケージ。
- info() ライブラリの一覧
- 異なるライブラリで同じ名前の関数や定数があると「名前の衝突」が発生してしまう。
それを避けるために ライブラリ名::関数名 という命名方式を用いている。
- ただし、よく使われる関数名についてはライブラリ名を省略できるようにすることができる。
- より正確には「名前空間の分離」という話になるが…ここでは略。
- ライブラリの例
- linalg -- 線形代数
- numlib -- 整数論
- plot -- グラフィックス
- RGB -- 色名
- ...
f() ?>