88. Error and warning messages
この章は
いくつかのエラーメッセージやエラーから復帰する方法についての詳細情報を提供します。
88.1 Error messages
88.1.1 apply: no such "list" element
このエラーメッセージの共通の原因は、
要素番号が < 1
か > length(list)
のリストの要素にアクセスしようと
鍵括弧演算子 ([ ]
)を使うことです。
88.1.2 argument must be a non-atomic expression
これは通常
1つ以上の(訳注: 原文はmore than one)要素からなるリストや集合、他の何かが期待されたことを意味します。
このエラーメッセージの1つの起こりうる原因は以下の型の生成です:
| (%i1) l:[1,2,3];
(%o1) [1, 2, 3]
(%i2) append(l,4);
append: argument must be a non-atomic expression; found 4
-- an error. To debug this try: debugmode(true);
|
リストに変数や数を追加する正しい方法は最初にそれらを要素1つのリストでラップすることです:
| (%i1) l:[1,2,3];
(%o1) [1, 2, 3]
(%i2) append(l,[4]);
(%o2) [1, 2, 3, 4]
|
88.1.3 assignment: cannot assign to <function name>
Maximaはいくつかの割り当て演算子をサポートします。
関数を定義しようとする時には、:=
を使わなければいけません。
88.1.4 expt: undefined: 0 to a negative exponent.
このメッセージは古典的なゼロ除算エラーを通知します。
88.1.5 incorrect syntax: , is not a prefix operator
これは、コンマ (,
)で始まるコマンドか、別のコンマが直接後に続くコンマが原因です。
88.1.6 incorrect syntax: Illegal use of delimiter )
このエラーの共通の理由は、括弧を開くことなしに閉じたり、コンマが直接先行する閉じ括弧です。
88.1.7 loadfile: failed to load <filename>
このエラーメッセージは通常、ファイルは存在するが読み込めないことを示します。
もしファイルが存在していて可読なら、このエラーメッセージに関して別の可能性があります:
Maximaは高速化のためパッケージをネイティブバイナリファイルにコンパイルできます。
もしファイルをコンパイルした後にシステム上の何かがバイナリと非互換にするような方法で
バイナリを変更したら、ファイルはもはやロードできなくなります。
Maximaは通常、パッケージから生成するバイナリファイルを
以下のようにタイプした後印字される名前のフォルダ内の
binary
と名付けられたフォルダの中に置きます:
| (%i1) maxima_userdir;
(%o1) /home/gunter/.maxima
|
もしこのディレクトリがなければ、maximaはパッケージをコンパイルしなければいけない時すぐにそれを再度作ります。
88.1.8 makelist: second argument must evaluate to a number
makelist
は2番目の引数に刻まれる変数名を期待します。
今回、未定義の変数の名前の代わりにmaximaが他の何か、多分リストかリストの名前を見つけました。
88.1.9 Only symbols can be bound
このエラーのもっともありえる原因は
ループカウンタとして知られる数値の数や変数を使おうとしたことにありました。
88.1.10 operators of arguments must all be the same
このエラーメッセージが現れる1つのありえる理由は等式をリストに追加するために
append
を使おうとしようとしたことです:
| (%i1) l:[a=1,b=2,c=3];
(%o1) [a = 1, b = 2, c = 3]
(%i2) append(l,d=5);
append: operators of arguments must all be the same.
-- an error. To debug this try: debugmode(true);
|
等式をリストに追加するために最初に要素1つのリストにラップしなくてはいけません:
| (%i1) l:[a=1,b=2,c=3];
(%o1) [a = 1, b = 2, c = 3]
(%i2) append(l,[d=5]);
(%o2) [a = 1, b = 2, c = 3, d = 5]
|
88.1.11 Out of memory
普通Lispは、少なくとも1つのスタックとユーザーオブジェクトを含むヒープを含むいくつかのタイプのメモリを扱います。
メモリの枯渇を避けるにはいくつかの手法が役に立つかもしれません:
- 可能なら、通常の最善解はよりメモリ効率がよいアルゴリズムを使うことです。
- 関数をコンパイルすると、必要なメモリの総量を劇的に減ることがあります。
- 固定長のタイプの配列はリストよりメモリ効率がいいかもしれません。
- もし maximaが sbcl上で走っているなら、 sbclのメモリ制限が
現在の問題を解くには低すぎる値に設定されているかもしれません。
この場合、コマンドラインオプション
--dynamic-space-size <n>
を使うと
sbclにヒープを n
メガバイト確保するように命令できます。
しかし、 sbclはいくつかの異なるタイプのメモリを扱わなければならなくて、
なので利用可能な物理メモリの半分ぐらいまでしか確保できないことに注意してください。
また、 32-bitプロセスは 物理メモリに 2GBまでしかアクセスできないことに注意してください。
88.1.12 part: fell off the end
part()
が
n
より少ない項目を持つ何かの中の
n
番目の項目をアクセスするのに使われました。
88.1.13 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.14 VTK is not installed, which is required for Scene
これは、VTKが実際にインストールされていないかー
maximaが見つけられないかー
以下の maximaコマンドを入力した時の出力の名前のディレクトリへの書き込みアクセスができないか
を意味します:
| (%i1) maxima_tempdir;
(%o1) /tmp
|
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 October, 5 2017 using texi2html 1.76.