==================================================発行部数724======
AutoCADカスタマイズ入門講座 No.2 1999/04/10
===================================================================
 AutoCADカスタマイズ入門講座第2号をお送りします。
皆さん花見をされましたか?。私は残念ながら仕事の都合や天気が悪かった
りしたため、とうとう花見をする事は出来ませんでした。私の住む辺りでは
もう殆ど桜の花は散ってしまい本当に残念ですが、毎日通勤途中にある桜が
きれいだったのでとりあえずは満足しています(特に、深夜会社帰りに見る
街頭に照らされた夜桜は妖しくて格別でした...(^。^)。
 さて、前回のサンプルは試してもらえましたか?。初めての方には説明も
無く難しかったかも知れません(ちょっと反省しています)。ただ、英会話を
勉強するには会話してみなければ始まらないのと同じように、プログラム言
語は書いてみないと始まりません。まだ試してない方はぜひ一度試してみて
ください。
今回から数回に別けてAutoLISPの文法について説明する予定です

--------------------------------------------------------------------
1.インタプリタ
--------------------------------------------------------------------
 AutoLISPを含むプログラム言語には多くの種類がありますが、それらの分
別方法の1つとしてインタプリタ言語とコンパイル言語に別ける事が出来ま
す。インタプリタ言語とは、インタプリタと呼ばれるプログラムがユーザの
書いたプログラムを1行、1行コンピュータが理解できる機械語に翻訳しなが
らプログラムを実行していきます。AutoLISPはこのタイプです。また、コン
パイル言語とは、ユーザの書いたプログラムをコンパイラ及びリンカと呼ば
れるプログラムで1度全て機械語に翻訳した後、改めて機械語を実行する事
でプログラムが実行されます。
 上記の様にAutoLISPはインタプリタ言語なのですが、この為にAutoLISPは
AutoCADのコマンドラインから実行する事が可能です(AutoCADにAutoLISP用
のインタプリタが内包されています)。もちろん、前回示したサンプルプロ
グラムもコマンドラインから入力し、実行する事が可能ですが(但し、*.dcl
はファイルとして作成しておく必要があります)、せっかく入力したプログ
ラムはAutoCADを終了したら消えてしまいます。また、毎回AutoCADを起動す
るたびにプログラムを入力し直すのは非常に大変ですし、効率が良い事では
ありません。この為、プログラムは*.lspファイルとして保存し、簡単に再
利用できるようにしているのです。今回から数回はAutoCADのコマンドライ
ンからAutoLISPの式を入力して、動作を確認して下さい。

--------------------------------------------------------------------
2.式と関数、引数
--------------------------------------------------------------------
 AutoLISPでは対応する"("から")"までを式と呼び以下の形式で表します。
(関数 引数)
AutoLISPで2つの数の足し算を実行するには、(+ 5 19)と表しますが、ここ
で"+"が関数、"5"と"19"が引数です。"+"関数では引数を2個取りますが、関
数により引数の数は異なります。"+"関数は2つの引数の和としてコマンドラ
イン上に24を表示します。また、以下の様に引数が関数となる事も可能です

  (関数 (関数 引数))
例えば、次の足し算を考えてみてください。
  (+ (+ 2 3) (+ 10 9))
まず、AutoLISPは内側の()内の評価から行い内部的に式を次の様に変換しま
す。
  (+ 5 19)
この後、初めの式と同様に計算されコマンドライン上に24が表示されます。
 さて、先ほどから関数という言葉を断り無しに使っていますが、関数とは
何でしょうか?。関数はよくブラックボックスに喩えられます。ブラックボ
ックスは何らかの入力を行うと、中で何を行っているかは解らないけれど何
らかの出力が得られるというものです。ジュースの自動販売機にお金を入力
するとジュースの出力が得られます。ユーザには中で何が行われているかは
全く解りません。もしかしたら小さな缶ジュース工場が入っているのかも知
れません(実際にはご存知だと思いますが(^_^;))。

 これらの事を頭の中に留めておき"+"関数を再び考えてみると、"+"関数は
2つの入力値から、関数の中ではどのような事が行われているのかは解りま
せんが、2つの入力値の和を出力してくれるものと考える事が出来ます。こ
の様に関数とは入力値に何らかの加工を行った結果を出力してくれるものと
言えます。何となく解って頂けましたか?。

 AutoCADには"+"関数のほかにも多くの関数が標準で付属しています。また
、関数はユーザが作成する事も可能です。実際のプログラミングではこれら
付属の関数を如何に上手に使いこなすかという事と、自分にとって便利な関
数を作り上げて行く事がポイントとなってきます。

--------------------------------------------------------------------
3.変数
--------------------------------------------------------------------
 先ほど(+ 5 19)という例を示しましたが、この計算の答えである24と他の
値を計算させたい(例えば20を足したい)場合はどうすれば良いでしょうか?
。(+ (+ 5 19) 20)とするのも確かに一つの方法ですが、事前に20を足すと
いう事が分かっていないとこの様にする事は出来ません。普通ちょっとした
電卓にはメモリ機能が付いていると思います。電卓ではメモリに24を記憶さ
せておく事で後からいつでも(+ 5 19)の計算結果を参照する事が出来ます。
同様な事をAutoLISP内でも行えます。コマンドラインから以下の式を入力し
てください。  
(setq memo (+ 5 19))
次に、再びコマンドライン上で !memo と入力すると24とコマンドライン
上で表示されるはずです。memoを変数と呼びます。memoに記憶された値は、
再び(setq memo .....)とするまで有功です。ただし、新規図面を作成した
場合や新たに既存の図面を開いた場合には値がクリアされます(R14ではクリ
アされないかも知れません)。
 memoに記憶させた値を使用するには次のようにします。
  (+ memo (+ 5 19))
この様にする事で、(+ (+ 5 19) 20)と同様の計算を行う事が可能です。
 電卓のメモリ機能とは異なり変数には数字(整数、実数)の他にも文字列や
リストなどを記憶する事が可能です。変数のタイプについては次回詳しく説
明します。

--------------------------------------------------------------------
4.まとめ
--------------------------------------------------------------------
 今回私たちは以下の事を学習しました。
1.AutoLISPはインタプリタ言語である事。
2.AutoLISPは複数の式から構成される事。
3.関数の意味
4.変数の使い方

 今回学習した関数の"+"の所を"-"、"*"、"/"とする事で引き算、掛け算、
割り算が計算できます。電卓が手元に無い時などもAutoCADでちょっとした
計算が出来るので重宝します。その他、算術計算を行う関数にはSin、Cosな
どの三角関数や平方根の計算を行うsqrt関数などがありますので、一度
AutoLISPマニュアルの関数一覧を見て、どのような関数があるのか確認する
事をお勧めします。また、宿題として
  (/ 5.0 2.0)及び(/ 5.0 2)、(/ 5 2.0)と
  (/ 5 2) の計算結果が異なる事を確認しておいてください。

次回は変数の種類について詳しく説明する予定です。

====================================================================
■登録/解除の方法
http://www2u.biglobe.ne.jp/~Saturn5/alisp.htm
「AutoCADカスタマイズ入門講座」は、上記URLよりいつでも
登録/解除可能です。
====================================================================
●「AutoCADカスタマイズ入門講座」No.1
発行責任者 :わんきち(wankichi@mba.nifty.ne.jp)
発行システム:インターネットの本屋さん『まぐまぐ』
http://www.mag2.com/
マガジンID:0000011579
====================================================================

戻る