このシリーズでは、BricsCADでのLISPプログラミングについて説明します。このブログ投稿では、生産性の高いプログラマーになるために知っておくべきことを説明します。最初の2つまたは3つの投稿では、用語、構文、およびデータ型を紹介します。

LISPプログラミングとは

舌足らずの発音 (LISトン PBricsCADのrocessing)は、非プログラマー向けの学習しやすいプログラミング言語です。プログラミングとは、単にインテリジェントにデータを取得、使用、再利用することです。

用語とデータ型

これらは、正しい方向に進むためのいくつかの一般的な用語です。用語のリストを下に向かっていくにつれて、フローが多少発展することに注意してください。このすべてが非常に論理的であることを覚えておいてください。トリックはありません。それは論理的です。物事はいつも同じように動作します。それは論理的です。いつも同じ。私はそれが論理的であると述べましたか?

用語

  • リスト 括弧のセット()内に含まれるすべて
  • 原子 リスト内の個々のアイテム
  • 関数 LISPの「コマンド」、通常はリスト内の最初のアトム
  • 引数 関数名に続くアトム。これらは、タスクを完了するために使用している関数が必要とするデータです。
  • 表情 関数、および場合によっては引数を含むリスト

データ型

  • 整数 整数、小数点なし
  • 実数 浮動小数点数、常に小数点があります
  • 文字列 常に一連の引用符で囲まれたテキスト:「Like this」
  • リスト 同じ用語を2回使用しているのは論理的に思えないかもしれませんが、それについては説明します。

練習のための準備作業

コマンドプロンプトで機能を使用する前に、ダイナミック入力設定をオフにしておくと便利です。 BricsCADのステータスバーを使用して、オフ(暗くする)に切り替えます。

ダイナミック入力bricscad

また、コマンドプロンプト領域に通常よりも「数行」高い行を表示することをお勧めします。おそらく8行または10行です。彼のホバーを行うには、二重矢印が表示されるまでコマンドラインエッジの上にマウスを置き、クリックアンドドラッグしてコマンドラインの高さを変更します。

bricscadコマンドラインバープロンプトでのlispの設定

基本的な構文

(functionname argument1 argument2…)

私たちが扱うリストの基本的なタイプは、式と呼ぶことができます。式は、常に上記の形式をとるリストです。式の最初の要素(またはアトム)は常に関数です。リスト内の追加のアトムは引数と呼ばれます。引数は、関数が適切に機能するために必要なツールまたは「もの」です。私たちの目的のために、関数に渡される引数は、整数、実数、文字列、またはリストの4つのデータ型のいずれかである必要があります。

数学関連関数

以下の単純な関数は、以前にリストされた構文と用語がどのように連携するかを理解するのに役立ちます。シンプルで短い関数は、コマンドラインに直接入力できます。これにより、テストとトラブルシューティング(および最初の学習!!)が非常に便利になります。

紹介する内容を自由に入力してください。

(+ num num…)

加算関数(+)は任意の数の数値引数を取り、それらを加算して合計を返します。

(-num num…)

減算関数(-)は、任意の数の数値引数を取ります。最初の引数は、基本数と見なすことができます。追加の引数はすべて、そのベース引数から順次減算されます。

(* num num…)

乗算関数(*)は、任意の数の数値引数を取り、それらを乗算して積を返します。

(/ num num…)

除算関数(/)は、任意の数の数値引数を取ります。最初の引数は、基本数と見なすことができます。基数は、追加の引数のそれぞれで順次除算されます。

数学のルール:

  • 負の数を使用するには、マイナス記号をその前に置くだけです。 (オプションで、正の数値の前にプラスが表示される場合がありますが、非常にまれです)。
    -3.75, -42, +6.953
  • 1未満で-1より大きい実数 しなければならない 小数点の前にゼロ(0)があります。 125、0.5、-0.67
  • もし すべて 数学関数に渡される引数は整数であり、整数が返されます。もし 少なくとも 引数の1つは実数であり、実数が返されます。
  • 実数は、小数点以下15桁まで正確に格納されますが、有効桁数15桁以下に「返されます」(コマンドプロンプトに表示されます)。

コマンドラインに入力された数学関数の例:

コマンドラインでのLISPの数学関数

データの保存

これらすべての数学関数を実行できることは素晴らしいことですが、値を保存しない限り、あまり役に立ちません。 (setq)関数を使用すると、値またはデータを変数またはシンボルに格納できます。

(setq sym値)

setq関数には、偶数の引数が必要です。奇数番号の引数はシンボルであり、偶数番号の引数はそのシンボルに格納される値です。わかりやすくするために、(setq)を2つの引数で使用します。シンボルとそれが保持する値記号はほとんどのタイプされた文字にすることができますが、 ただ 数。 (数値はすでに値を保持しています!)+、-、*、/、(、)、またはLISPですでに定義されている関数名など、他のいくつかの文字も無効です...これらの記号は、LISPですでに意味または値を持っています。有効な記号の例:

A B X PT PT1 PT2 MIDPT CNTRPT CLR1ファーストネームDWGNUM

(setq)関数を使用して、前に参照したデータのタイプのいくつかを保存できます。

(setq A 1) 戻り値 1
(setq B 2.5) 戻り値 2.5
(setq C「BricsCAD LISP」) 戻り値 「BricsCAD LISP」
(setq X 1.25 Y 6.375 Z 0.0) 戻り値 0.0
(setq CPT 3.5
OPT「直径」
RAD 4.0
)
戻り値 4.0

上記の最後の2つの式は有効なコーディング方法ですが、あまり使用されません。トラブルシューティング、コードの追加または削除、あるいはその両方を行うと多少混乱を招く可能性があります。

最後から2番目の例では、XとYが「設定」されなかったように見え、最後の例では、CPTとOPTが「設定」されなかったように見えます。しかし、2つの例の間では、6つのシンボルすべてが実際に「設定」されました。 (setq)関数 戻り値 渡された最後の引数を評価した結果。 

ネスト式

上記のコードシーケンスは、「ハードコーディング」と呼ばれます。シンボルが保持している値を変更することはできません(Xは絶対に「1」であり、それ以外は絶対にありません)。それらは常に正確に示されているとおりになります。シンボルは、プログラマーが2番目の引数として入力した値を保持します。ユーザーからの入力は許可されません。

LISPには、式を他の式内にネストできる機能があります。まず、(setq)関数内にネストする関数は、プログラムのユーザーから特定のデータ型を取得できるようにする関数です。

最初に、いくつかのデータ型収集関数を見て、次にそれらを(setq)内にネストして値を格納します。 

特定のデータの取得–データの種類別

以前、LISPは特定のタイプのデータを適切に使用することに依存していると述べました。整数、実数、文字列、リストの4種類のデータについて言及しました。 LISPは、プログラマー、プログラムのユーザーが必要に応じて異なる値を入力できるようにする関数を提供します。

 

(getint  str)

ユーザーが整数値を入力できるようにします。

オプションで、文字列引数をプロンプトとして使用できます。入力値を 整数.

 

(getreal  str)

ユーザーが実数または浮動小数点値を入力できるようにします。

オプションで、文字列引数をプロンプトとして使用できます。入力値を リアル 数。

 

(getstring  フラグstr)

ユーザーが整数値を入力できるようにします。

オプションで、文字列引数をプロンプトとして使用できます。オプションの引数も許可します。「値がある」場合、入力文字列にスペースを含めることができます。入力文字列を ストリング.

 

(getpoint  pt str)

ユーザーがポイント値を入力できるようにします。

オプションで、文字列引数をプロンプトとして使用できます。また、オプションで「開始」ポイント引数を許可します。入力ポイントを リスト.

 

これは解釈するのが少し難しいですが、一度理解すればそれは確かに論理的です!

最後の文は、データ型に関する以前の議論を理解するための鍵です。データには4つの主要なタイプがあることを述べましたが、これらの関数の最初の3つは、言及した最初の3つのデータタイプを処理することは明らかです。最後の関数は(getpoint)で、「ポイント」と呼ばれるデータ型はありません。 「リスト」と呼ばれるデータ型があることは述べました。明確にするために…リストは括弧のセットに含まれるものであると述べました。また、式はリストの特定のタイプであることにも言及しました。リストの最初のアトムとしての関数を持ち、追加のアトムは引数と呼ばれます。 (getpoint)関数は「単なる」リストを返します。これまでに扱ってきたすべてのリストのような式ではありません。この関数が返すリストは、3つのアトムで構成されています。 3つのアトムはすべて「実際の」データ型です。最初のアトムはポイントのX値、2番目はY値、3番目はZ値です。したがって、(getpoint)はリストを返します。これは特に「ポイントリスト」と呼ばれることがよくあります。この段落の背後にあるロジックを理解することは、LISP言語がどのように機能するかを理解するための鍵となります。

保存されたデータの使用

ユーザーからデータが収集されたら、そのデータを使用してオブジェクトを図面に追加したり、図面内の既存のオブジェクトを変更したりするのが一般的です。ここでは、格納されたデータを使用して、いくつかのオブジェクトを描画します。

(コマンド)関数は、プログラマーが図面内のオブジェクトを追加または変更できる1つの方法です。

(コマンド 文字列引数引数 …)

(コマンド)の最初の引数はコマンド名になります。常に文字列として表現されます。追加の引数の数とそのデータ型は、使用されているコマンドによって異なります。これは、次のセクションで明らかになります(そして今回は最後です!)。

すべてをまとめる

今後の投稿では、これらの各機能と概念についてさらに詳しく説明しますが、ここでは、コマンドプロンプトにコード行を入力して、これらをすべて結び付けます。これらのコード行をコマンドプロンプトに直接入力します。何か問題が発生した場合は、今のところ、エスケープキーを押してコード行を再入力してください。

(setq CPT(getpoint“中心点を選択:“))
(setq RAD(getreal“ Enter a radius:“)))
(setq OFF(getreal“オフセット値を入力してください:“))
(setq NEWRAD(+ RAD OFF))
(コマンド「サークル」CPT RAD)
(コマンド「サークル」CPT NEWRAD)

以上、プログラムの作り方があります!次の投稿では、これらのコード行をテキストファイルに保存する方法を学習します。これにより、オフセット円を描画するたびにコマンドラインに入力する必要がなくなります。 (そしてもちろん、私たちは新しく見つけた知識を、いくつかの円を描くよりもさらに深くします!)

著者からのメモ:

ときどき、私の投稿が重複したり、繰り返し表示されたりすることがあります Ralph GrabowskiによるこのブログのLISP投稿。私は長年、さまざまなソースからのラルフの記事を楽しんでいます。読者としては、似たような資料が少し違った形で表示されるのを楽しんでいただけると思います。これにより、トピックをより丸く理解できるようになります。