ここ数回の投稿では、「非プログラマ」がBricsCAD(LISPプログラミング言語)をカスタマイズするために利用できる最も強力な方法を紹介しました。この投稿では、LISPコーディングを、LISPコードを作成するための7つのヒントで締めくくります。

ヒント#1。 ASCIIテキストエディタを使用する

BricsCADには、独自のLISPエディタが組み込まれています。 。アクセスするには、単に コマンドラインに。

LISPコードはプレーンASCIIテキストで記述する必要があります—特殊文字やフォーマット( ボーフェイス または )ワードプロセッサーがファイルに追加する種類の。たとえば、WordでLISPをプログラミングする場合は、 .doc形式のファイル(デフォルト)、BricsCADは、ファイル拡張子が次の場合でも、LISPファイルのロードを拒否します。 .lsp.

ますますウィンドウ化された世界では、真のASCIIテキストエディターを見つけることは困難です。ただし、WindowsでMicrosoftから無料で提供されているメモ帳と呼ばれるものがあります。これは、\にあります。ウィンドウズ フォルダ。 Windowsに付属の書き込みまたはワードパッドは使用しないでください。これらのどちらにもASCIIで保存するオプションがありますが、時々忘れてイライラすることになります。 Linuxは優れたテキスト編集(別名gedit)テキストエディタを提供し、Macはテキスト編集を備えています。

他のほとんどすべてのワードプロセッサには、テキストをプレーンASCIIで保存するオプションがありますが、デフォルトではありません。ワードプロセッサには、「純粋なASCII形式」という意味でさまざまな用語があります。 Wordはこれを「テキストのみ」と呼んでいます。 WordPerfectはこれを「DOSテキスト」と呼んでいます。ワードパッドはこれを「テキストドキュメント」と呼んでいます。そしてアトランティスはそれを「テキストファイル」と呼んでいます。あなたはアイデアを得ます。

ヒント#2:LSPコードをBricsCADにロードする

LISPコードをBricsCADにロードするには、 負荷 関数。ここに例があります ポイント。

lsp LISPルーチンの名前です。

: (負荷 「ポイント」)

入力する必要はありません .lsp 拡張。

BricsCADが見つからない場合 points.lsp、フォルダー名は、スラッシュまたは二重のバックスラッシュのいずれかを使用して指定する必要があります—選択:

: (ロード“\\BricsCAD\\ポイント」)

これを数回入力した後、面倒なことに気づくでしょう。この問題を解決するには、次のように、キーストロークを減らす1行のLISPルーチンを記述します。

: (defun c:x () (「ポイント」をロード))

ロードする必要があるときはいつでも points.lsp ルーチン、あなたはただタイプする バツ そして押す 入る、 次のように:

: バツ

Windowsでは、単にドラッグすることもできます .lsp ファイルマネージャからBricsCADへのファイル。コードは一方向に移動することに注意してください。テキストエディターからBricsCADへ。 BricsCADからテキストエディターにコードをドラッグして戻すことはできません。

ヒント#3:システム変数の切り替え

プログラミングの1つの問題は、次のとおりです。値がわからないときに値を変更する方法は? BricsCADでは、システム変数でこの問題に遭遇します。システム変数の多くはトグルです。あ トグル システム変数の値は0または1で、値がオフ(0)またはオン(1)であることを示します。たとえば、システム変数 SplFrame デフォルトは0です。オフにすると、スプライン化されたポリラインはフレームを表示しません。

プログラマーは、 SplFrame それがデフォルト値であるという理由だけでゼロになります。トグルシステム変数の場合、2つの解決策があります。

  1. if関数を使用して、値が0か1かを確認します。
  2. 1を引いて、絶対値をとります。

ヒント#4:きちんと整頓する

覚えておいてください、あなたのお母さんはいつもあなたのものを拾うようにあなたに言いましたシステム変数の設定に関するこの問題は、普遍的に当てはまります。 LISPルーチンがシステム変数の値を変更するときは、常に、ルーチンが実行を開始する前の状態に戻す必要があります。

多くのプログラマーは、ルーチンの最初に現在の設定を保存し、変更を実行してから、ルーチンの最後に保存された値を復元する一連の汎用関数を記述します。これを示すコードフラグメントは次のとおりです。 SplFrame 変数に格納されます SplVar を使用して getvar 次に復元します setvar:

(setq splvar (getvar“ splframe”))

(setvar“ splframe” splvar)

ヒント#5:大文字と小文字

(ほとんど)すべての場合において、LISPプログラミング言語は、コードの記述に大文字または小文字のどちらを使用してもかまいません。

読みやすくするために、いくつかの規則があります。

  • すべて小文字のLISP関数名。
  • 関数名は大文字と小文字が混在しています。
  • すべて大文字のBricsCAD変数とコマンド名。

言ったように、LISPは気にせず、すべてを大文字に変換します。また、すべてのコメント、余分な空白、タブ、リターン文字を取り除きます。例外は、プロンプトなどの引用符付きのテキストで、そのまま残されます。

LISPが注意する例外は2つあります。エスケープコードと文字Tを使用している場合です。

エスケープコード テキスト文字列で使用され、小文字のままにする必要があります。例えば、 \ e エスケープ文字(ASCII 27に相当)および \ t タブ文字です。

注意: バックスラッシュを使用します。このため、バックスラッシュを使用してフォルダ名を分離することはできません。 ヒント#2。 LISPは、エスケープコードを入力していると思います。

そしていくつかの関数は文字Tを 国旗。大文字のままにする必要があります。

ヒント# 6:引用符としての引用符

これまで見てきたように、LISPプログラミング言語は文字列に引用符(”)を使用します。したがって、引用符を使用して、25インチを25インチとして表示するなど、引用符とインチを表示することはできません。

回避策は、上記のエスケープコードを使用することです。 ヒント#5、具体的には引用符のASCII文字に相当する8進コード。複雑に聞こえますか?そうです。しかし、知っておく必要があるのは042だけです。

まず、次のように文字列を変数に割り当てます。

(setq disttxt“長さは“)
(setq distval 25)
(setq qumark“\042“)

8進数の042を変数に割り当てた方法に注意してください クマーク。バックスラッシュは、以下の数値が8進数であることをLISPに伝えます。ちなみに、8進数は16進数の半分です:0 1 2 3 4 5 6 7 10 11 12 … 16 17 20 21 …

次に、3つの文字列を連結して strcat 関数:

(strcat distxt distval qumark)

プロンプトを生成するには:

長さは25インチです

ヒント#7:タブと引用符

Vijay Katkarは、リストボックス付きのダイアログボックスのコードを書いています。彼は私に言った、「私はそれに文字列を表示したい-によって表示されるダイアログボックスのように コマンド。値を連結して文字列を出力することはできますが、文字列の長さが異なるため、垂直方向の配置はありません。文字列でタブメタ文字(\ t)を使用しようとしましたが、リストボックスにリテラル '\ t'が出力されます。この問題を回避する方法はありますか?」

同様の問題を思い出します。テキスト文字列内に引用符またはインチ記号を表示するにはどうすればよいですか?

たとえば、次のように出力したいLISPコードの行があります。

直径は2.54インチです

通常、文字列に引用符(“)文字を使用することはできません。 LISPは、引用符を文字列の区切り文字として使用して、文字列の開始と終了をマークします。次のコード行:

(プロンプト「直径は2.54です」)

LISPは、最初の引用符を文字列の先頭、2番目の引用符を文字列の終わり、3番目の引用符をエラーと見なします。解決策は\ nnnメタ文字です。これにより、タブ、エスケープ、引用符などの特殊文字を含む、任意のASCII文字を挿入できます。

ここでの回避策は、次のように引用符\ 042にASCIIコードを使用することです。

(プロンプト「直径は2.54です。\042“)

同様に、Vijayは \009 ダイアログボックス内のテキストの間隔を空けるメタキャラクター。そして実際、それはうまくいきました:「あなたが私に言ったことによると、私は同じものを使い、それはうまくいきました。」

次は何ですか?

LISPプログラミングについては以上です!次回は、BricsCADでカスタムダイアログボックスを作成する方法を紹介します。


BricsCAD体験版を
ダウンロード

今すぐLISPプログラミングを開始

多言語、広範囲で使える永久ライセンスとサブスクリプションです。