お楽しみプログラム

AutoLispの関数

 CADソフトの AutoCadに組み込まれている関数のうち、Cad 機能とかかわりのない、言語的な側面のものを取り上げています。


制御関数

 AutoLisp は、非常に多くの関数がありますが、ほとんどは、Cadシステムとの対話のためのものです。それを除いた制御構造に関する関数をまとめて見ました。

評価処理
eval (eval expr )

式(を評価してその値)を評価する。

_$ (eval (car '( (+ 1 2) (- 1 2))))
3
関数呼出
apply (apply function list )

引数として list の要素を与えて、関数 function を評価する。

_$ (apply '+ '(1 2 3 4 5))
15

上の例では、(+ 1 2 3 4 5) と同じになる。関数をあらかじめ変数にセットしておくと次のようになる。

_$ (setq a +)
#<SUBR @10a6f778 +>
_$ (apply 'a '(1 2 3 4 5))
15

あらかじめクォートしてから変数にセットしておけば次のように書ける。

_$ (setq a '+)
+
_$ (apply a '(1 2 3 4 5))
15
ブロック構造
progn (progn [expr]... )

一つの式しか書けない場所に複数の式を書ける。戻り値は最後の式の結果。

条件実行
if (if testexpr thenexpr [elseexpr])

testexpr が nil以外なら thenexprを評価。nilなら、elseexprを評価、elsepxrがなければnilを返す。

cond (cond [(test [result]...)]... )

(test [result]...)のtestを順次評価する。

testの値がnil以外なら、resultを順次評価し最後の式の値を戻り値とする。resultがなければ、testの値。 すべて評価してもtestの値がnilにならなければ、nilを返す。

and (and [expr]...)

exprを順次評価し、nilになったらそこで処理を中断し戻り値をnilとする。すべてnilでなければ T を返す。

or (or [expr]...)

exprを順次評価し、nil以外になったら処理を中断し、Tを返す。すべて nil ならば、nil を返す。

繰返し
while (while testexpr [expr]...)

testexpr がnilでなければ、exprを繰返し評価する。戻り値は最後のexprの値。

repeat (repeat count [expr]...)

count で与えた回数 exprを評価する。count は整数。戻り値は最後に評価された式の値。

map 関数
mapcar (mapcar function list [list]... )

すべての要素を評価し、結果をリストで返す。

listの要素をfunctionの引数にして繰り返し、functionの戻り値のリストを返す。リストの数とfunctionの引数は一致していなければならない。

もっとも短いリストの要素だけ繰り返す。

_$ (mapcar '+ '(1 2 3) '(4 5))
(5 7)
foreach (foreach name list [expr]...)

すべての要素をについて評価する。

listのすべて要素について、その値を name に割り当て、exprを評価する。 戻り値は最後に評価したexprの値。nameのスコープは、expr評価の間。

_$ (setq sum 0)
0
_$ (foreach n '(1 2 3 4 5 6 7 8 9 10) (setq sum (+ sum n)))
55
_$ sum
55
vl-every (vl-every function list [list]...)

すべての要素検定が成立するか検査。

mapcar と同様に、listの要素をfunctionの引数にして実行し、nilが返った時点で中断し、nilを返す。すべてがTであればTを返す。functionの引数の数とlistの数は同じでなければならない。一番短いリストの分だけ繰り返す。

_$ (vl-every '(lambda (a b) (print a) (< a b)) '(1 2 3) '(2 2 2))
1 
2 nil
vl-some (vl-some function list [list]...)

どれか一つの要素検定が成立するか検査。

mapcar と同様に、listの要素をfunctionの引数にして実行し、Tが返った時点で中断し、Tを返す。すべてがnilであればnilを返す。functionの引数の数とlistの数は同じでなければならない。一番短いリストの分だけ繰り返す。

_$ (vl-some '(lambda (a b) (print a) (= a b)) '(1 2 3) '( 2 2 2 ))
1 
2 T
vl-member-if (vl-member-if function list)

条件に合致したメンバーを探す。

先頭から順に、リスト要素を引数としてfunctionを呼び出し、戻り値がnilでなくなった時点で、その要素以降のリストを返却する。該当するメンバーがなければnilを返す。

_$ (vl-member-if '(lambda (x) (> x 4)) '(1 2 3 4 5 6))
(5 6)
vl-member-if-not (vl-member-if-not function list)

条件に合致しないメンバーを探す。

先頭から順に、リスト要素を引数としてfunctionを呼び出し、戻り値がnil になった時点で、その要素以降のリストを返却する。しないメンバーがなければnilを返す。

_$ (vl-member-if-not '(lambda (x) (< x 4)) '(1 2 3 4 5 6))
(4 5 6)
vl-remove-if (vl-remove-if function list)

条件に合致した要素を除外したリストを返す。

すべての要素に対して、その要素を引数としてfunctionを呼び出し、戻り値がnilでない要素を除外したリストを返却する。 言い換えると、条件に合致しないもののリストを返すことになる。

_$ (setq lis '(1 2 3 4 5 6 7 8 9 10))
(1 2 3 4 5 6 7 8 9 10)
_$ (vl-remove-if '(lambda (x) (< x 5)) lis)
(5 6 7 8 9 10)
vl-remove-if-not (vl-remove-if-not function list)

条件に合致しない要素を除外したリストを返す。

すべての要素に対して、その要素を引数としてfunctionを呼び出し、戻り値がnilである要素を除外したリストを返却する。 言い換えると、条件に合致したもののリストを返すことになる。

_$ (setq lis '(1 2 3 4 5 6 7 8 9 10))
(1 2 3 4 5 6 7 8 9 10)
_$ (vl-remove-if-not '(lambda (x) (< x 5)) lis)
(1 2 3 4)


アトムとリストの処理

基本関数
cons (cons item1 item2)

car部にitem1、cdr部にitem2を入れた、新しいセルを返す。

item2がリストならば、その先頭にitem1を入れたリストを返すことになる。

_$ (cons 'a '(b c))
(A B C)

item2がリストでなければ、ドットペアを返す。

_$ (cons 'a 'b)
(A . B)
car (car item)

itemのcar部を返す。item が nil ならば、nil を返す。

itemは、セルまたは、nil でなければならない。

item が リストならば、先頭の要素を返すことになる。

cdr (cdr item)

itemのcdr部を返す。item が nil ならば、nil を返す。

itemは、セルまたは、nil でなければならない。

item が リストならば、二番目以降のリストを返すことになる。要素が一つしかなければ '() つまり、 nil を返す。

list (list [item]...)

itemを順に要素とするリストを返す。itemがなければ () すなわち nil を返す。

append (append [list]...)

引数listの要素をつなぎ合わせたリストを返す。引数listは、リストであること。

引数list が nil ならば、空リストなので、無視される。

引数list は、リストだけが許される。ドットペア (a . b) や、ドットリスト (a b . c) には適用できない。

アトムと判定
atom (atom item)

item(を評価した結果)がアトムならば T、そうでなければ nil を返す。

セル以外は、アトムとして扱われる。従って、nil もアトム。

listp (listp item)

item(を評価した結果)がリストならば T、そうでなければ nil を返す。

セルと nil が、リストとして扱われる。

vl-consp (vl-consp item)

item(を評価した結果)がセルならば T、そうでなければ nil を返す。

null (null item)

item(を評価した結果)が nil ならば T、そうでなければ nil を返す。

判定関数をまとめておく。

atomlistpvl-conspnull
セルnilTTnil
nilTTnilT
シンボル/数値/文字列などTnilnilnil
type (type item)

item(を評価した結果)に応じてその型を表すシンボル値を返す。

Symbol
シンボルSYM
整数INT
実数REAL
文字列STR
セルLIST
nilnil
組込関数SUBR
ユーザー定義関数USUBR
ファイルディスクリプタFILE
セーフアレイsafearray
ヴァリアント型変数variant
選択セットPICKSET
図形名ENAME
VLAオブジェクトVLA-OBJECT
eq (eq expr1 expr2)

expr1 と expr2 が同じものを指していれば、T。そうでなければ nil 。

セル以外の場合は、同じ値ならば同じものとみなすようです。 セルの場合は、同一のセルを指している場合のみ、T となります。

_$ (setq a '(1 2))
(1 2)
_$ (setq b '(1 2))
(1 2)
_$ (eq a b)
nil
_$ (setq a "abc")
"abc"
_$ (setq b "abc")
"abc"
_$ (eq a b)
T
equal (equal expr1 expr2 [eps ])

expr1 と expr2 が同じ値ならば、T。そうでなければ nil 。

数値の比較の場合は、同じ値とみなす違いの範囲を eps で指定できます。

_$ (setq a '(1 2))
(1 2)
_$ (setq b '(1 2))
(1 2)
_$ (equal a b)
T
_$ (equal 1.2 1.3 0.2)
T
シンボル操作
vl-symbolp (vl-symbolp item)

item(を評価し、その結果)がシンボルならば、T。そうでなければnilを返す。

_$ (vl-symbolp (car '(a)))
T
_$ (vl-symbolp 'a)
T
_$ (vl-symbolp nil)
nil
_$ (vl-symbolp 'nil)
nil
_$ (setq a 'b)
B
_$ (vl-symbolp a)
T
_$ (vl-symbolp '(a b c))
nil
vl-symbol-value (vl-symbol-value item)

item(を評価し、その結果)がシンボルならば、その値を返す。 シンボルに値が設定されていなければ nil を返す。シンボルでなければ、エラーとなる。

シンボルの値をとるだけならば、単にシンボル名を示せばよいが、この関数を使うと、シンボル名を式によって指定できる点に留意すること。

_$ (setq a 15)
15
_$ (setq b 'a)
A
_$ (vl-symbol-value b)
15
boundp (boundp item)

item(を評価し、その結果)がシンボルでnil以外の値が割り当てられていれば、Tを返す。そうでなければ nil を返す。

シンボルにnilが割り当てられている場合も、nil を返す。

vl-symbol-name (vl-symbol-name item)

item(を評価し、その結果)がシンボルならばシンボル名を表す文字列を返す。シンボルでなければエラーとなる。

この関数と逆に文字列からシンボルを作る場合には、(read str)を利用できる。

set (set var value)

var(を評価し、その結果)がシンボルならばvalueを代入する。戻り値は代入した値。シンボルでなければエラーとなる。

setq と異なり、シンボル(変数)を式で指定できる。

_$ (set (car '( a b) )  22)
22
_$ a
22
setq (setq {var value...)

変数名 var に value を代入する。var と value の組は複数書ける。戻り値は、最後の代入の値。

また、代入は逐次行われる。

atoms-family (atoms-family format [ symlist ])

現存するシンボルのリストを返却する。

format の値で 出力の形式を指定する

0シンボルのリストを返す
1シンボルを文字列で表したリストを返す

symlistを省略すると現存するすべてのシンボルのリストを返す。

symlistにシンボルの文字列表記のリストを与えると、該当するシンボルのリストを返す。このとき、存在しないシンボルに相当する要素は nil となる。また、シンボルに割り当てられた値がnilの場合も、nilが返される。

リスト処理
cadr 他 (cadr list)

listに対して、car、cdrを続けて適用することが多い。このため、専用の関数が用意されており、cxxr の形で書き、x の部分を a または d で置き換える。cadr ならば (car (cdr ...))を表す。AutoLispでは4レベルまで、つまり、cxxxxrまで用意されている。

caaaarcadaarcdaaarcddaar
caaadrcadadrcdaadrcddadr
caaarcadarcdaarcddar
caadarcaddarcdadarcdddar
caaddrcadddrcdaddrcddddr
caadrcaddrcdadrcdddr
caarcadrcdarcddr

vl-list* (vl-list* { item }...)

item を順に要素としたドットリストを返す。itemは一つ以上書かなければならない。

item が一つだけの場合は、item をそのまま返す。

item が二つの場合は、ドット・ペア ( a , b) を返し、それ以上の場合はドット・リスト (a b c . d)を返す。

最後の item がリストならば、それ以前の要素をリストの前の方に追加したリストを返すことになる。 consの拡張処理ともいえる。

_$ (vl-list* ())
nil
_$ (vl-list* '(a))
(A)
_$ (vl-list* nil)
nil
_$ (vl-list* 'a)
A
_$ (vl-list* 'a 'b)
(A . B)
_$ (vl-list* 'a 'b 'c)
(A B . C)
_$ (vl-list* 'a 'b '(c d e))
(A B C D E)
length (length list)

リストの要素の数を返す。

引数listは、リストで無ければならない。ドットペア、あるいはドットリストは扱えない。

vl-list-length (vl-list-length list)

リストの要素の数を返す。

length と同じ機能だが、引数がドットペア、あるいはドットリストの場合、nil を返す。

vl-position (vl-position item list)

list の 中での item の位置を数字で返す。位置は最初の要素を0として数える。見つからなかった場合には、nilを返す。 list 内に item が複数あるときは最初に見つかったものの位置を返す。

_$ (vl-position '(a b c) '(s "abc" (a b c)))
2
last (last list)

リストの最後の要素を返す。リストが空(nil)の場合は nil を返す。

nth (nth pos list)

引数 list の pos 番目の要素を返す。list は、長さ1以上のリスト。
リストがドット・ペア、あるいは、ドットリストの場合、最後の要素(最後のドットペアのcdr部)は取り出せない。

member (member item list)

引数 list に item が含まれれば、item 以降のリストを返す。含まれなければ nil を返す。

list は、リスト、または、nil。

リストがドットペア、あるいは、ドットリストの場合、最後の要素(最後のドットペアの cdr 部)は比較の対象外。

_$ (member '(a b ) '(a b (a b) c))
((A B) C)
reverse (reverse list)

リストの要素の並びを反転したリストを返却する。

subst (member newitem olditem list)

リストの中の olditem をすべて newitem に置き換えたリストを返却する。

assoc (assoc key list)

リストの要素の第一要素(car)とkeyが等しければ、その要素を返す。

リストの各要素はセルであること。

acad_strlsort (acad_strlsort list)

文字列のリストを昇順に整列する。

vl-sort (vl-sort list function)

リストを整列した結果のリストを返す。順序はfunctionで示す。

fuunction は、二つの引数を取り、第一引数が第2引数より前にあるとき、nil以外を返し、そうでないとき、nilを返す。 同じ要素が重複して現れると、取り除かれることがある。

_$ (vl-sort '(3 2 1) '(lambda (a b) (< a b)))
(1 2 3)
_$ (vl-sort '(3 2 1 2) '(lambda (a b) (< a b)))
(1 2 3)
vl-sort-i (vl-sort-i list function)

リストを整列した結果のインデックス・リストを返す。順序はfunctionで示す。

fuunction は、二つの引数を取り、第一引数が第2引数より前にあるとき、nil以外を返し、そうでないとき、nilを返す。

_$ (vl-sort-i '(3 2 1) '(lambda (a b) (< a b)))
(2 1 0)
_$ (vl-sort-i '(3 2 1 3) '(lambda (a b) (< a b)))
(2 1 3 0)

数値、文字列など

数値
numberp (numberp item)

item(を評価した結果)が 数値(整数、あるいは、実数) ならば T、そうでなければ nil を返す。

= (= {expr}...)

引数に書いたすべての式が等しければ、T 。そうでなければ nil 。

数値を想定している関数だと思うが、実際は、値の制限はない。たくさんの引数が書ける eq 。

引数を一つだけ書いた場合は常に T 。

_$ (= 1 1 1)
T
_$ (= 123.0 123)
T
_$ (= 'a 'a)
T
_$ (= '(a b) '(a b))
nil
/= (/= {expr}...)

隣り合わせた二つの引数がすべて等しくなければ、T。それ以外では nil。

= と同様に、数値を想定していると思うが、値の制限はない。比較は eq で行っているらしい。 引数を一つだけ書くと常に T 。

_$ (/= 'a 'a)
nil
_$ (/= '(a b) '(a b))
T

隣り合わせた…が解りにくいが、要するに比較は隣同士しか行わないということ(隣り合っていなければ、同じ値が合っても良い)。

_$ (/= 1.2 2.0 1.2)
T
< (< { expr }... )

すべての隣り合わせた二つの引数の左が右より小さければ、T 。そうでなければ nil。

数値か、文字列以外ではエラーとなる。また、数値と文字列の比較はできない。

<= (<= { expr }... )

すべての隣り合わせた二つの引数の左が右より小さいか等しければ、T 。そうでなければ nil。

> (> { expr }... )

すべての隣り合わせた二つの引数の左が右より大きければ、T 。そうでなければ nil。

>= (>= { expr }... )

すべての隣り合わせた二つの引数の左が右より大きいか等しければ、T 。そうでなければ nil。

+ (+ [ span ]... )

すべての引数の和。引数はすべて数値であること。引数を省略すると 0 を返す。

- (- [ span ]... )

最初の引数から二番目以降の引数を引いた値を返す。引数はすべて数値であること。
引数が一つだけの場合は、0 から引いた値を返す。引数がない場合は0を返す。

* (* [ span ]... )

すべての引数を乗じた値を返す。引数はすべて数値であること。
引数が一つの場合はその引数を、引数がない場合は0を返す。

/ (/ [ span ]... )

最初の引数を、二番目以降の引数を乗じた値で割った結果を返す。引数はすべて数値。
引数が一つの場合はその引数を、引数がない場合は0を返す。
整数同士の除算は結果が整数となる。整数と実数、あるいは、実数と実数の除算では結果は実数。

_$ (/ 1 2) 0 _$ (/ 1.0 2) 0.5 _$ (/ 1 2 2.0) 0.25 _$ (/ 1 2.0 2) 0.25 _$ (/ -3 -2) 1 _$ (/ -3 2) -1 _$ (/ 3 -2) -1
rem (rem [ span ]... )

最初の引数を二番目以降の引数を順に剰余演算を適用した結果を返す。すべての引数は数値。

引数が一つの場合はその引数を、引数がない場合は 0 を返す。 剰余と被除数が同じ符合になるように結果を計算する(らしい)。符号を外して計算後、符号をつけている?

_$ (rem 3 1.2)
0.6
_$ (rem -3 1.2)
-0.6
_$ (rem 3 -1.2)
0.6
_$ (rem -3 -1.2)
-0.6
1+ (1+ item )

数値に1を加えた値を返す。

1- code>(1- item )

数値から1を減じた値を返す。

zerop (zerop item )

引数の値が 0 ならば T。それ以外の数値ならば nil。

引数が数値でなければエラー。

minusp (minusp item )

引数の値が負ならば T。それ以外の数値ならば nil。

引数が数値でなければエラー。

fix (fix item)

引数小数点以下を切り捨てた整数を返す。32ビットの整数の範囲を超える場合は、相当する実数を返す。

引数は数値。

_$ (fix 1.5)
1
_$ (fix -1.5)
-1
float (float item)

数値を実数にして返す。

引数は数値。

max (max {item}..)

引数の中で最大の数値を返す。引数はすべて数値であること。

min (min {item}..)

引数の中で最小の数値を返す。引数はすべて数値であること。

abs (abs item)

引数の絶対値を返す。引数は数値。

exp (exp x)

e のべき乗( ex )を返す。引数は数値。

log (log x)

xの自然対数( ln x )を返す。

expt (expt x y )

x の y 乗( x y )を返す。引数は数値。

sqrt (sqrt x)

x の平方根(√x)を返す。引数は数値

sin (sin x)

正弦関数( sin(x) )の値を返す。引数は数値で、単位はラジアン。

cos (cos x)

余弦関数( cos(x) )の値を返す。引数は数値で、単位はラジアン。

atan (atan y [x})

逆正接関数。引数が一つの場合は、atan(y)の値。引数が二つの場合は、atan(y/x)に相当するatanの値。

結果の単位はラジアンで、-π/2 〜 +π/2 の範囲。

logand (logand [ item ]...)

引数すべてをビット単位で and を取った結果を返す。引数はすべて整数。

引数が一つの場合は引数の値、引数がなければ 0 を返す。

logior (logior [ item ]...)

引数すべてをビット単位で or を取った結果を返す。引数はすべて整数。

引数が一つの場合は引数の値、引数がなければ 0 を返す。

~ (~ item)

引数のビット反転を返す。引数は整数。

lsh (lsh [ value [ shift ]] )

value を shift 回左へシフトした値。shiftが負の値の場合は右シフトとなる。

また、シフト数は、shift の値の32の剰余。

shift が省略された場合、valueの値を返し、valueも省略された場合は 0 を返す。

boole (boole opr { value }..)

oprに従って、以降のパラメータに順にビット演算をする。

opr のビットによって、演算の種類を表す。valueはすべて整数。

param1param2opr bit
008
014
102
111

左の表でparam1/param2はそれぞれ、引数のビットの値を表す。引数のビットの組み合わせに対して、opr bit が1ならば、その組み合わせの結果は 1、そうでなければ 0 となる。oprのビットパターンででビット演算の真偽表を記述できる。

opr演算
1AND
7OR
6XOR

左の表は代表的な演算のビットパターン。

文字列
strlen (strlen [ str ].. )

引数の文字列の長さの合計。漢字は2文字と数えられる。

引数がなければ 0 を返す。

_$ (strlen "漢字" "入力")
8
_$ (strlen "abc" "de")
5
strcat (strcat [ str ].. )

引数の文字列を連結した文字列を返す。引数がなければ長さ0の文字列を返す。

strcase (strcase str [ flag ] )

文字列を大文字または、小文字にした文字列を返す。

flagが nil 以外の値ならば、小文字に変換する。それ以外、あるいは、flag が省略されていれば大文字に変換。

substr (substr str pos [ len ] )

文字列 str の pos 番目の文字以降 len 文字分だけ取り出した文字列を返す。

pos は先頭から数えた位置で、先頭を 1 とする。従って必ず正の数。

len を省くと、pos以降のすべての文字列。

pos が str の外側を指定している場合は、""を返す。

len が取り出せる文字列より大きな場合は、取り出せるだけの文字列を返す。

vl-string-search (vl-string-search pattern str [ pos])

文字列 str から、部分文字列 pattern を探し、見つかった最初の位置を返却する。見つからなければ nil。

返却される位置は数値で、先頭が 0 。

検索開始位置を pos で指定できる。この pos も、先頭を 0 として指定する。

wcmatch (wcmatch str pattern)

strをpatternで検定する。引数は二つとも文字列。検定が通れば、T。そうでなければ、nil を返す。

patternには、ワイルドカードと呼ぶ文字列のシーケンスパターンを書く。文字列内にパターンを「,」で区切って複数書ける。パターンを複数書いた場合には、いずれか一つがマッチすれば、T を返す。

正規検索に近づけたワイルドカードといった印象。日本語対応している印象があるが…。

文字機能
#数字1文字
@半角英字1文字
.
ピリオド
半角英数字以外1文字
*任意の文字の任意の長さの文字列
?任意の文字1文字
~
ティルダ
パターンの先頭に書いた場合、以降のパターンにマッチしないことを表す(?)
[...] []内の文字のいずれか 1 文字
[~...] []内の文字以外の 1 文字
-[]内で文字の範囲指定に使用。[a-z]など
, 2 つのパターンを区切る
`
バッククォート
文字をエスケープ。`,など
_$ (wcmatch "漢字" "??")
T
_$ (wcmatch "漢字abc" "??@@@")
T
vl-string-mismatch (vl-string-mismatch str1 str2 [ pos1 [ pos2 [ flag ]]])

二つの文字列の先頭から一致するところまでの長さを返す。

文字列の比較開始位置を pos1 、 pos2 で指定できる。この値は文字列先頭を 0 として指定する。

フラグを指定して、その値が nil 以外ならば、英字の大文字小文字を無視して比較する。

_$ (vl-string-mismatch "漢字" "漢和辞典" 0 0)
2
_$ (vl-string-mismatch "abc漢字" "大きな漢和辞典" 3 3)
0
_$ (vl-string-mismatch "abc漢字" "大きな漢和辞典" 3 6)
2

結果から類推すると、漢字の処理は行われていない。

vl-string-subst (vl-string-subst new old str [ pos ] )

文字列 str 内の 文字列 old を文字列 new に置き換えた文字列を返却する。置換は一度しか行わない。
検索開始位置を pos で指定できる。文字列の先頭は 0 とする。

vl-string-elt (vl-string-elt str pos )

文字列 str の posで指定された位置の文字コードを返却する。
文字列の先頭は 0 。文字列の範囲外を指定するとエラー。

vl-string-trim (vl-string-trim remover str)

文字列 str から、文字列 remover に含まれる文字を先頭と末尾から取り除いた文字列を返却する。

_$ (vl-string-trim "az" "abcabczabcz")
"bcabczabc"
vl-string-left-trim (vl-string-left-trim remover str)

文字列 str から、文字列 remover に含まれる文字を先頭から取り除いた文字列を返却する。

vl-string-right-trim (vl-string-right-trim remover str)

文字列 str から、文字列 remover に含まれる文字を末尾から取り除いた文字列を返却する。

vl-string-position (vl-string-position code str [ pos [ flag ]])

文字列から、文字コードが code の文字を探し、その位置を返す。見つからなかった場合には nil を返す。

返す位置は 先頭を 0 とする。

pos で検索開始位置を指定できる。この指定も、文字列の先頭を 0 とする。

flag を指定し、値が nil 以外ならば、文字列末尾からposに向って検索する。

vl-string-translate (vl-string-translate source alt str )

文字列 str の中の文字のうち、文字列 source に含まれる文字を 文字列 alt の対応する文字に置き換えた文字列を返す。

文字列 source の文字は、文字列 alt の同じ位置の文字と置き換えられる。文字列 alt に対応する文字がない文字は、置換対象としない。 また、sourceの中に重複して文字が現れる場合は後にでたものが有効になる。

_$ (vl-string-translate "abc" "12" "abcdefg")
"12cdefg"
_$ (vl-string-translate "abc" "" "abcdefg")
"abcdefg"
_$ (vl-string-translate "abc" "1234" "abcdefg")
"123defg"
_$ (vl-string-translate "aaa" "1234" "abcdefg")
"3bcdefg"
_$ (vl-string-translate "aba" "1234" "abcdefg")
"32cdefg"
vl-string->list (vl-string->list str )

文字列を構成する文字のコードからなるリストを返す。

vl-list->string (vl-list->string lis )

文字のコードからなるリストから文字列を作り返す。

vl-prin1-to-string (vl-prin1-to-string item )

item を prin1 で出力したような形式の文字列を返す。

lispプログラムでの表現に対応する。例えば、文字列ならば引用符で囲んだ形。

vl-princ-to-string (vl-princ-to-string item )

item を princ で出力したような形式の文字列を返す。

「生」の表現に対応する。例えば、文字列ならば引用符では囲まない

read (read [ str ] )

文字列をリスプデータとして解釈して、最初の要素を返す。文字列を省略すると nil を返す。
シンボル操作に限れば、この関数の逆関数として、vl-sumbol-name がある。

_$ (setq vname (read (strcat "my" "var")))
MYVAR
_$ (set vname 15)
15
_$ myvar
15
ascii (ascii str)

文字列 str の先頭の文字のコードを返す。文字列が""ならば 0 を返す。

chr (chr code)

文字コード code の文字一つからなる文字列を返す。code は、整数。
code が 0 の場合は、長さ 0 の文字列を返す。

itoa (itoa value )

整数を表す文字列を返す。引数は、整数。

atoi (atoi str )

文字列の数値表記にあたる整数を返す。文字列の先頭から、できるだけ解釈して値を返す。全く変換できない場合は 0 を返す。

引数は文字列で無ければならない。

解釈した結果は整数の範囲でクリップする。

rtos (rtos number [ mode [ precision ]] )

数値を文字列表記にする。

数値 mode で出力形式を指定し、数値 precisionで小数以下の出力桁数を指定する。

省略可能だが、省略時はシステムに設定されたデフォルトが指定されるので、省略しない方が良い。

mode値内容
1指数表記precisionは小数以下の桁数。
(rtos 1.5 1 4) → "1.5000E+00"
2十進表記precisionは小数以下の桁数。
(rtos 1.5 2 4) → "1.5"
(rtos 1.7320508 2 4) → "1.7321"
3フィートと小数インチprecisionは小数以下の桁数。
(rtos 1.5 3 4) → "1.5\""
(rtos 1.7320508 3 4) → "1.7321\""
4フィートと分数precisionは分数の精度
(rtos 1.333333333 4 3) → "1 3/8\""
(rtos 1.333333333 4 15) → "1 10923/32768\""
5分数precisionは分数の精度
(rtos 1.333333333 5 3) → "1 3/8"
(rtos 1.333333333 5 15) → "1 10923/32768"
atof (atof str )

文字列をできるだけ解釈して実数を返す。全く数字が読めなければ 0.0を返す。

読める形式は、十進形式と、指数形式である。

メニューへ戻る
アルゴ算法堂へ戻る