"ExprStruct" (データ構造)

"ExprStruct"

評価せずに変更できる式を表す.

詳細

  • "ExprStruct"は,Wolfram言語式を評価せずに作業する場合に役立つ.
  • "ExprStruct"は,不変の変更を行い,常にその結果を新しいexpr structとして返す.
  • CreateDataStructure["ExprStruct",expr]expr を含む新しい"ExprStruct"を作成する
    Typed[x,"ExprStruct"]x"ExprStruct"型を与える
  • Import形式の"WL"は,"ExprStructs"の要素を使うと"ExprStruct"のデータ構造を作成する.
  • Import形式の"WXF""MX"は,"ExprStructs"の要素を使うと"ExprStruct"のデータ構造を作成する.
  • "ExprStruct"型のデータ構造には,以下の演算が使える.
  • ds["Apply",fun]式の頭部が fun で置き換えられるexpr structを返すtime: O(n)
    ds["ConstructWith",fun]fun が式に適用される新しいexpr structを返すtime: O(1)
    ds["Depth"]式の任意部分を指定するのに必要な指標の最大数time: O(1)
    ds["Drop",i]i 番目の要素を削除した新しいexpr structを返すtime: O(n)
    ds["Drop",i,j]i から j の間の要素が削除された新しいexpr structを返すtime: O(n)
    ds["Evaluate"]式を評価した新しいexpr structを返す
    ds["Fold",fun]fun を式の要素に適用し,結果を累積するtime: O(n)
    ds["Fold",fun]fun を式の要素に適用する.init で始めて結果を累積するtime: O(n)
    ds["Get"]ds がホールドする式を返すtime: O(1)
    ds["Head"]式の頭部を含む新しいexpr structを返すtime: O(1)
    ds["Insert",x,i]位置 ix を挿入した新しいexpr structを返すtime: O(n)
    ds["Length"]式の中に保存された要素数time: O(1)
    ds["Map",fun]fun を式の各要素に適用する新しいexpr structを返すtime: O(n)
    ds["MapImmediateEvaluate",fun]fun を式の各要素に適用し,それを評価する新しいexpr structを返すtime: O(n)
    ds["Part",i]式の i 番目の部分の新しいexpr structを返すtime: O(1)
    ds["ReplacePart",ix]式の i 番目の部分を x で置き換えた新しいexpr structを返す  time: O(n)
    ds["Visualization"]ds の可視化を返すtime: O(n)
  • 以下の関数もサポートする.
  • dsi===dsjdsidsj に等しい場合はTrue
    FullForm[ds]ds の完全形
    Information[ds]ds についての情報
    InputForm[ds]ds の入力形
    Normal[ds]ds を通常の式に変換する

例題

すべて開くすべて閉じる

  (2)

新しい"ExprStruct"は,CreateDataStructureを使って作成できる:

式の長さは ds でホールドされる:

式を h でラップする新しい"ExprStruct"を返す:

新しい"ExprStruct"でホールドされる式を返す:

もとの"ExprStruct"は変わらない:

"ExprStruct"の可視化:

スコープ  (4)

情報  (1)

新しい"ExprStruct"は,CreateDataStructureを使って作成することができる:

データ構造 ds についての情報:

インポート  (3)

"ExprStructs"の要素を使った"WL"形式のインポートは,"ExprStruct"のデータ構造を作成する:

Importを使って,文字列を"ExprStruct"にロードする:

式は評価されずにホールドされる:

"ExprStruct"要素を使った"WXF"形式のインポートは,"ExprStruct"のデータ構造を作成する:

式は評価されずにホールドされる:

"ExprStruct"要素を使った"MX"形式のインポートは,"ExprStruct"のデータ構造を作成する:

もとの式を返す:

アプリケーション  (1)

未評価の式  (1)

"ExprStruct"は,未評価の式で作業を行う場合に役立つ.新しい"ExprStruct"を作成する:

頭部をPlusで置き換える:

もとになる式は評価しない:

f を各要素に適用すると,新しい式が作成される:

しかし,"Map"演算は適用時には評価されない:

適用後に各要素を評価する場合は,"MapImmediateEvaluate"演算を使うとよい: