Indexへ
(14637)//【14617】→(14667)
------------------------
【タイトル】LISP による 外部変形の試作の報告について
【記事番号】 14617 (*)
【 日時 】09/01/25 21:34
【 発言者 】Kazuo Miyake qqza3hq89@aioros.ocn.ne.jp
【 リンク 】http://www17.ocn.ne.jp/~lite/



 LISP が JW_CAD 外部変形 で 使えることがわかりました
ことを報告します。

 今回 動作確認をしたのは
 clisp-2.47, jw_cad 6.11a, Windows 2000 です。

 LISP 自体は awk や ruby は おろか C や BASIC よりも
古い言語で、Common Lisp は LISP の 方言のひとつだそう
です。

 clisp は ANSI Common Lisp に基づくフリーソフトで 日
本語も使え Windows でも動きます。

 LISP プログラムの例です。バッチファイルに直接書いて
います。

:2点を結ぶ線
@echo off
REM #jw
REM #1- 始点を指示してください
REM #2 終点を指示してください
REM #e
echo ^
(with-open-file (f "jwc_temp.txt" :direction :input)^
 (loop for line = (read-line f nil) while line do^
  (setq a (regexp:regexp-split " \\+" line))^
  (if (regexp:match "^hp1" line) (setq hp1 (cdr a)))^
  (if (regexp:match "^hp2" line) (setq hp2 (cdr a)))^
 )^
)^
(with-open-file (f "jwc_temp.txt" :direction :output)^
  (format f "~{ ~a~}~%%" (append hp1 hp2))^
) | clisp -q > nul
exit

 プログラムは作図ライブラリを利用すれば つぎに示すく
らいまで簡単になると思います。

echo (jw (line 1 2)) | clisp -q -i %~dp0jw > nul
exit

 例えば H形鋼断面の作図は このパターンで

echo (jw (jisH 400 200 8 13 13)) | clisp -q -i %~dp0jw > nul

のようにすれば 外部変形ができるようになります。作図ラ
イブラリをつくっておくことが LISP による 外部変形では
極めて重要だと 考えています。

 AutoLISP が Common Lisp を ベースにしているというこ
となので clispによる外部変形も成熟してくれば AutoLISP
と 部分的ではあるにせよ互換性のあるプログラムが作れる
ようになると思われます。

 Common Lisp は ruby で プログラムをされている方なら
比較的 抵抗なく 受け入れられると思います。 ruby と比べ
ると Windows との 親和性に乏しいようなのですが 変数に
漢字やひらかなが使えたり 関数と変数で 同じ名前が使えた
りするなど プログラム言語としては 外部変形に向いている
と感じました。

 なお、clisp による外部変形プログラム の簡単な考察を
ホームページで紹介していますので興味のある方はどうぞ。

 タイトルは 「LISP してますか」です。

 皆様方のご健康とご活躍をお祈り申し上げます。


       記録 2009.01.25 三宅


Indexへ
(14617)←【14667】//(14624)
------------------------
【タイトル】Re(1):LISP による 外部変形の試作の報告について(2)
【記事番号】 14667 (14617)
【 日時 】09/02/01 22:41
【 発言者 】Kazuo Miyake qqza3hq89@aioros.ocn.ne.jp
【 リンク 】http://www17.ocn.ne.jp/~lite/



 clisp の 外部変形用作図ライブラリ jw.lisp をホーム
ページで公開しましたことを報告します。

 試作段階ですので 実用的なものではありませんが LISP
による 外部変形も成熟してくれば 第3の awk 候補 であ
ると思います。

 外部変形用作図ライブラリを利用して 線を引くなら

:複々線
@echo off
REM #jw
REM #1-%d
REM #99#%d
REM #e
echo ^
(jw ^
 (point (hp#n 1 hpn))^
 (loop for 中心線からのずれ in (scale (list 7.5 5 -5))^
    for 線色番号 in (list 1 2 3)^
  do^
  (lc 線色番号)^
  (loop for i from 1 to (- hpn 1)^
   do^
   (setq l1 (lnmove (hp# i (+ i 1)) 中心線からのずれ))^
   (setq p1 (if (= i 1) (subseq l1 0 2) p2))^
   (setq p2 (if (^^^< i (- hpn 1))^
    (inters l1 (lnmove (hp# (+ i 1) (+ i 2)) 中心線からのずれ))^
    (subseq l1 2))^
   )^
   (line p1 p2)^
  )^
 )^
) | clisp -q -i %~dp0jw > nul
exit

のようにして 複数の線を引くプログラムも 案外簡単です。

 バッチファイルに直接書いているので MS-DOS の 影響を
受けてしまうため < は ^^^< としなければならないのです
が こういうやり方もできなくはありません。

 LISP は 独自の哲学を持ったプログラム言語だと 思いま
す。awk や ruby のような柔軟性は持っていませんが LISP
のプログラムはきれいです。

 皆様方のご健康とご活躍をお祈り申し上げます。


       記録 2009.02.01 三宅