88. Error and warning messages
この章は
いくつかのエラーメッセージやエラーから復帰する方法についての詳細情報を提供します。
88.1 Error messages
88.1.1 part: fell off the end
part()
が
n
より少ない項目を持つ何かの中の
n
番目の項目をアクセスするのに使われました。
88.1.2 undefined variable (draw or plot)
maximaが値を知らない変数を含んでいたので関数が描画できませんでした。
どの変数がわからないのか見つけるためには、
描画コマンドの名前
(draw2d
, plot2d
や似たようなもの)を
既存の関数名と衝突しない適当な名前(例えば ddraw2d
)で一時的に置き換えて
maximaに描画コマンドがなんのパラメータを見ているのか印字させることが時々役に立ちます。
| (%i1) load("draw")$
(%i2) f(x):=sin(omega*t);
(%o2) f(x) := sin(omega t)
(%i3) draw2d(
explicit(
f(x),
x,1,10
)
);
draw2d (explicit): non defined variable
-- an error. To debug this try: debugmode(true);
(%i4) ddraw2d(
explicit(
f(x),
x,1,10
)
);
(%o4) ddraw2d(explicit(sin(omega t), x, 1, 10))
|
88.1.3 loadfile: failed to load <filename>
このエラーメッセージは通常、ファイルは存在するが読み込めないことを示します。
もしファイルが存在していて可読なら、このエラーメッセージに関して別の可能性があります:
Maximaは高速化のためパッケージをネイティブバイナリファイルにコンパイルできます。
もしファイルをコンパイルした後にシステム上の何かがバイナリと非互換にするような方法で
バイナリを変更したら、ファイルはもはやロードできなくなります。
Maximaは通常、パッケージから生成するバイナリファイルを
以下のようにタイプした後印字される名前のフォルダ内の
binary
と名付けられたフォルダの中に置きます:
| (%i1) maxima_userdir;
(%o1) /home/gunter/.maxima
|
もしこのディレクトリがなければ、maximaはパッケージをコンパイルしなければいけない時すぐにそれを再度作ります。
88.1.4 Only symbols can be bound
このエラーのもっともありえる原因は
数やループカウンタとして知られる数値の変数を使おうとしたことにありました。
"The most probable cause for this error is that there was an attempt to either
use a number or a variable whose numerical value is known as a loop
counter."
88.1.5 Out of memory
普通Lispは、少なくとも1つのスタックとユーザーオブジェクトを含むヒープを含むいくつかのタイプのメモリを扱います。
メモリの枯渇を避けるにはいくつかの手法が役に立つかもしれません:
- 可能なら、通常の最善解はよりメモリ効率がよいアルゴリズムを使うことです。
- 関数をコンパイルすると、必要なメモリの総量を劇的に減ることがあります。
- 固定長のタイプの配列はリストよりメモリ効率がいいかもしれません。
- もし maximaが sbcl上で走っているなら、 sbclのメモリ制限が
現在の問題を解くには低すぎる値に設定されているかもしれません。
この場合、コマンドラインオプション
--dynamic-space-size <n>
を使うと
sbclにヒープを n
メガバイト確保するように命令できます。
しかし、 sbclはいくつかの異なるタイプのメモリを扱わなければならなくて、
なので利用可能な物理メモリの半分ぐらいまでしか確保できないことに注意してください。
また、 32-bitプロセスは 物理メモリに 2GBまでしかアクセスできないことに注意してください。
88.1.6 assignment: cannot assign to <function name>
Maximaはいくつかの割り当て演算子をサポートします。
関数を定義しようとする時には、:=
を使わなければいけません。
88.1.7 apply: no such "list" element
このエラーメッセージの共通の原因は、
要素番号が < 1
か > length(list)
のリストの要素にアクセスしようと
鍵括弧演算子 ([ ]
)を使うことです。
88.1.8 incorrect syntax: , is not a prefix operator
これは、コンマ (,
)で始まるコマンドか、別のコンマが直接後に続くコンマが原因です。
88.1.9 makelist: second argument must evaluate to a number
makelist
は2番目の引数に刻まれる変数名を期待します。
今回、未定義の変数の名前の代わりにmaximaが他の何か、多分リストかリストの名前を見つけました。
88.1.10 incorrect syntax: Illegal use of delimiter )
このエラーの共通の理由は、括弧を開くことなしに閉じたり、コンマが直接先行する閉じ括弧です。
88.1.11 VTK is not installed, which is required for Scene
これは、VTKが実際にインストールされていないかー
maximaが見つけられないかー
以下の maximaコマンドを入力した時の出力の名前のディレクトリへの書き込みアクセスができないか
を意味します:
| (%i1) maxima_tempdir;
(%o1) /home/gunter
|
88.2 Warning messages
88.2.1 Encountered undefined variable <x> in translation
関数をコンパイルしましたが、変数 x
の型がわかりませんでした。
これはコンパイルされたコマンドが、
maximaがこの変数に関して提供するすべての柔軟性を保持する追加のコードを含むことを意味します。
もし x
が変数名を意味しなくてコマンドへの名前付きオプションを意味するなら、
名前オプションの前にシングルクォート ('
)をつけることでこの問題を解決するでしょう。
88.2.2 Rat: replaced <x> by <y> = <z>
浮動小数点数は、最大数が普通は十分大きなものですが、依然制限はあります。
無害に見える例でこの制限が小さすぎることを示すよい例はとして、
Wilkinson's Polynomial,
Rump多項式、そして正確な1/10は2進数の浮動小数点で表現できないという事実があります。
それゆえに、
浮動小数点エラーが徐々に大きくなったり、項が互いに打ち消し合うことを妨げるあちこちの場所で、
maximaはデフォルトでそれらを正確な分数に置き換えます。
ratprint
, ratepsilon
, bftorat
, fpprintprec
, rationalize
も参照してください。
This document was generated by 市川雄二 on June, 21 2016 using texi2html 1.76.