hpprc/jawiki-books huggingface dataset:
Lisp/始めの一歩/インストール

Common Lisp でプログラミングを始めるには、 Common Lisp の処理系を手に入れることが必要となります。ほとんどの処理系は大体のオペレーティングシステムで利用可能です。処理系には無料で利用できるものと、商業ベース(有料)のものがあります。
Common Lisp のコマンドを全くインストールすることなしに試してみるには、最も現実的なツールは以下のようなブラウザベースの処理系となります。
ほかにも以下のような Lisp 方言のための便利なオンライン対話型環境もあります。
Lispbox は初心者にも優しいように、すぐに動かせるような Common Lisp の環境を提供しようとする試みです。Lispbox には Common Lisp の処理系に加えて以下のようなものが含まれています。
Lispbox を使い始めるのは非常に容易なはずです。 Lispbox を起動すると、EmacsはLispのプロンプトを表示するでしょう。プロンプトでは対話的にあなたの書いているコードを編集することが出来ます。ためしにプロンプトで、この Wikibooks のサンプルコードをコピーペーストして何が起こるかを確かめてみてください。もしあなたが編集しているコードを失いたくないのなら、Emacsでどのようにファイルとバッファーを操作するか学ばなければなりません。が、Emacsの操作はこのWikibooksの範囲外となります。(Emacsの使用法を学ぶには、Emacs付属のチュートリアルを見てください。Emacsのチュートリアルを実行するにはEmacsの"Help"メニューを見るか、それかEmacs流に Ctrl-H, T あるいは C-h t とタイプしてください。) Lispコードを含む新しいファイルをEmacsで作成したとき、バッファがLispモードになっているかどうか確かめてください。(もしそのファイルの拡張子が .lisp ならば、すでにLispモードになっているでしょう。)そして、 C-c C-k とタイプすると、ファイル全体がコンパイルされ、読み込まれます。あるいは C-c C-c とタイプすれば、あなたが編集しているトップレベル表示にファイルがコンパイルされ読み込まれます。
Slimeに関する情報がもっと書かれるべきなのですがまだ書かれていません。
Able は able/systems ディレクトリにインストールされたライブラリが利用できるエディタです。このエディタは設定後すぐに利用できるように期待が込められています。デフォルトでいくつかのライブラリが含まれています。
注意: Lispbox をインストールしたくない場合でも、 Emacs/SLIMEの組み合わせを実行環境として利用することを強く推奨します。理由は、無料で提供されている実装のテキスト制御は非常に扱いづらいからです。そのため、ほとんどのユーザーにはSLIMEが提供するような快適な開発環境の方がいいでしょう。
GNU CLISP はWindowsや、ほとんどのUnix系のシステムで動かすことが可能な、人気のある無料で利用できる実装です。もしあなたがWindowsを使っているのなら、選択肢は CLISP しかありません。 CLISP は ANSI規格 Common Lisp の全ての機能を備えており、インストールも非常に簡単です。
CMU Common Lisp は高性能な Common Lisp の実装です。
Steel Bank Common Lisp は CMU Common Lisp から派生したものです。移植性に優れ、マシン語コンパイルを行うことに特徴があります。複数のプラットフォームの間で一番人気のある Common Lisp のコンパイラは CMUCL でも CCL でもなく断然 SBCL でしょうし、この人気もしばらく継続するでしょう。これらの中から選ぶにしても、SBCLはより優れたデバッガをサポートしているので結構な選択です。(たとえば、SBCLのコンパイラは、より多くの警告を吐き出し、ANSI準拠と言う点では、より厳格だと言われています。)
Clozure CL はPowerPCとAMD64向けの Common Lisp の実装です。x86向けの開発段階のリリースもあります。Mac OS X ならば Clozure CL は最も人気のある選択でしょう。しかし Mac OS X 上で動くように、GNU/Linux や FreeBSD/amd64 でもうまく動くはずです。 Windows 向けのベータ版も存在します。 Mac OS X では Clozure CL は Cocoa インターフェイスを持つことに特質があります。
ECL は拡張性と組み込み可用性に焦点を当てた Common Lisp の実装です。この二つの目標は Common Lisp を C言語に翻訳することと、それを gcc のような C言語コンパイラでコンパイルすることで達成されました。 Embeddeble CL は Linux, FreeBSD, NetBSD, OpenBSD, Solaris そして Windows 上で動作します。また、Intel, Sparc, Alpha そして PowerPC といったプロセッサの上位レベルで動作します。
ABCL は Java仮想マシンのトップレベルで動作する Common Lisp の実装です。 Armed Bear Common Lisp はランタイムシステムと、コンパイラを備えており、コンパイラは Lisp ソースを Java仮想マシンコードに変換します。そしてプログラム開発環境である対話的な REPL も備えています。
Allegro, LispWorks, そして Corman Lisp にはお試しバージョンがあります。言語を学ぶには役に立つでしょう。全て Windows 上で動作します。
学習方法/高校理科全般

主に普通科高校生および普通科卒業生を対象に説明します。また、主に理系大学や経済学部経済学科への進路志望を前提に説明します。
多くの高校普通科での理科のカリキュラムの傾向は、
というのが現状です。
商業高校や工業高校などの実業高校では、カリキュラムが異なります。多くの実業高校では、化学基礎、生物基礎、物理基礎の範囲までしか習いません。また、学科(商業科や機械科など)の内容と関係の薄い科目は、あまり履修出来ません。
たとえば商業高校では、おそらく「物理」科目は、物理基礎すら、全く扱わないでしょう。
また、工業高校では、普通科2年の範囲(物理基礎および化学基礎)までしか、理科を扱わないでしょう。
なぜなら実業高校では専門科目の時間のため、普通科理科の学習時間は足りないからです。
また、高専(高等工業専門学校)という5年生の学校では(大学基礎レベルまで物理を習う場合が多い)、生物基礎や地学基礎などは履修出来ないかもしれません。
理科のどの科目でも、とりあえず大学受験対策には参考書が必要です。初めから参考書を読んでも構いません。最終的に物理・化学・生物を履修しますので、それらの科目の参考書を買っても構いません。理系志望なら、入学後に初めから高校3年の範囲の内容まで載ってる参考書を買ったほうが効率的です。
ただし、地学はカリキュラムが特殊なので、中々参考書が売っていません。とりあえず、高校3年になってから地学基礎を学ぶかどうかを考えたほうが良いでしょう。
多くの理系大学や経済学部経済学科では、入学後に数学IIIレベル(三角関数や積の微分法などの微分積分)の知識が必要になります。また、大学入試の理科でも、「物理」科目だと、数学IIIを知っていて当然というような問題も出るし、物理の参考書でも数学III知識を前提にした参考書もあります。
日本の高校理科の大学入試では、まず微分積分は出ませんが、しかし大学入学後は微分積分を知っていて当然とされます。微分積分を学びたくない人は理系や経済学部経済学科を目指さないほうが良いでしょう。
とりあえず理系大学や経済学部経済学科を目指す場合は、新課程数学III・Cを学ぶのが定石とされています。(2022年に本文を記述、改訂。)
まず、「地学」科目は理系大学の入試で選択できない場合があります。
高校によっては、そもそも時間割の仕組み上、「地学」が履修出来ない、もしくは履修しづらい仕組みになってる高校もあります。
なぜなら、日本では理系の多くの大学は工業大学の私立大学なので物理や化学が重視されるからです。他は農学部や医学部、薬学部などであり、生物・化学が重視されます。理学部のある大学は、意外とあまりありません。
さらに理学部の中ですら、「地学」は物理学などの一分野として含まれてしまってる場合もよくあります。多くの理学部の学科編成は、数学科・物理学科・化学科・生物学科です。
理科教育とはいえ、産業などへの実用とは無関係とは言えません。
たとえ地学を学ぶ場合でも、物理と化学の知識は、どちらにせよ必要になります。
教科書出版社などが出してる資料集については、無くても、入試突破は出来ます。ただし、生物や化学の資料集は、高校で買わされる場合もあります。授業用の副教材としての用途などとして、です。
資料集を熟読するよりも、参考書を熟読したり、あるいは問題集を練習したほうが良いでしょう。
資料集よりも、参考書と問題集のほうが必要です。参考書は学校では買わされないのが普通ですが、しかし参考書を買っておこう。
問題集は、学校で、定期テスト対策の問題集を買わされる場合もあるでしょう。しかし、もし理系志望なら、もうちょっと高度な、入試基礎レベルの参考書も、早いうちに買っておきましょう。
検定教科書には発展的内容が書いてあるが、入試にでる範囲の発展内容なら、参考書と問題集でカバーできる。参考書よりも高度な発展内容も、検定教科書に書かれている場合もあるが、入試にはあまり出題されません。
なぜなら、参考書を越えたレベルの教科書・発展内容は、教科書会社ごとに発展内容が違うので、せっかく参考書に出てない発展的内容まで学んでも、市販の参考書に無い内容は入試には出題されにくいからです。
それら参考書を越えた教科書・発展内容も、資料集を見れば、だいたい書いてあります。
理科の場合、教科書の補足的な説明や簡単な問題などがガイドに書かれています。基本的に、教科書以上の情報の学習を勉強したい場合でも、市販の参考書や問題集で間に合います。参考書にも書かれてない発展内容については、資料集で充分です。教科書ガイドは入手も大変だし(一般書店では売ってない)、特定の教科書会社の教科書にしか対応していないので、入試対応では、無理に買う必要はありません。
中学生向けの参考書と、高校生の参考書では、出版社と難度の関係が、違っています。高校参考書には、数研出版、学研、文英堂など、いろいろな参考書がありますが、高校参考書では数研出版の参考書が難し目であることに注意して下さい。一方、学研の参考書は、どちらかというと、高校では入門的です。
参考書の難易度は、おおむね、
のような難易度になっています。
旺文社(おうぶんしゃ)や学研(がっけん)は、平成の半ば頃になってから参考書に本格的に参入してきたので、評価があまり定まってません。もともと旺文社は、問題集のほうで有名な出版社でした。学研は元々昭和のころは、図鑑や小中学生向けの教材などを優先していました。
数研出版は、平成の半ば頃から、中学の参考書に参入しました。
このように、平成の半ば頃に参考書事業を拡大してきて、中学参考書の出版社が高校に参入したり、逆に高校参考書の出版社が中学参考書に参入したりしたので、
中学参考書と高校参考書の難易度の序列が違っていますので、気をつけてください。
なお、中学受験参考書などで有名な受験研究社は、今のところ、高校参考書は出してません。
チェザロ平均

数列 { a n } {\displaystyle \left\{a_{n}\right\}} に対して、初項から第n項までの総和をnで割ったもの、即ち
をw:チェザロ平均という。
さて、チェザロ平均について、次の性質が成り立つ。
この結果の数学的利用価値については上記のWikipediaへのリンクを参照してもらうとして、ε-N論法の練習としてこの命題を証明してみよう。
証明 まず、仮定をε-N論法で書き直しておく。
ここで、
を考えると、
三角不等式を用いて変形すると、
となる。 いま、(1)の各εと対応するNに対して、n>Nとして、
ここで、任意の実数より大きな自然数が存在するから(これをアルキメデスの原理と言う/アルキメデスの原理は定理である)、
すなわち
を満たす自然数Mが存在する。 よって、各εに対して、Nより大きくかつM以上のnで、
以上のように、任意の正の実数εに対して、max{N,M}なる自然数が存在して、nがこれより大きいとき、 | 1 n ∑ k = 1 n a k − α | {\displaystyle \left|{\frac {1}{n}}\sum _{k=1}^{n}a_{k}-\alpha \right|} がεの定数倍より小さくなるから、
電気工事士試験


電気工事士試験は第一種、第二種の2種類があります。受験資格に制限はありません。
主に筆記試験と実技試験があり、筆記試験で100点中60点以上で実技試験を受けることができます。
筆記試験は50問あり、1問2点なので、50問中30問以上が正解ならば、筆記試験は合格となります。
実技試験は筆記試験を合格した場合に受けることができます。第二種電気工事の実技試験は40分で、シンプルな電気回路を完成させ、欠陥が無かった場合に合格となります。
どのような回路を作るのかは事前にいくつか発表され、試験当日にいくつかの回路の中からどれか1つを選ばれ、その回路を完成させます。
筆記試験は50問あり、1問2点なので、50問中30問以上が正解ならば、筆記試験は合格となります。
(調整中)
Lisp/基本/List

Common Lisp の list は cons セル と呼ばれるもののペアから成り立っています。それぞれのセルは二つの部品を持っていて、それぞれの名前は歴史的経緯で car(セルの最初の部分)とcdr(セルの残りの部分)と言います。
List は最初のセルの cdr が、別の consセル へのポインタを保持した cons セル によって実装されています。
空の list は nil としても理解され、そのまま nil という表現で表記されるか、空の list () という表現で表記されます。
cons 関数を使用すれば右部分と左部分がある新しい consセル から成る list を作ることが出来ます。
list ではない consセル を作成することも可能だと憶えておいてください。
これはドットリストと呼ばれます。適正な list にするには連なった consセル の最後の cdr が空の list(nil) にポインタを保持していなければなりません。 list 関数を使用して list を作ることも出来ます。
上の式は下の表現と同様です。
List のそれぞれの要素を取得するには car 関数(あるいは first 関数)、 cdr 関数(あるいは rest 関数)を使用します。
Common Lisp においては second 関数、 third 関数、 forth 関数(以上 tenth まで続く)が定義されています。 second 関数は cdr や rest とは違うということに注意してください。 cdr と rest は list の最初の要素の後の残りの list を返します。一方で second は list の2番目の要素を返します。
List は連なった順序になっているので、順序を操作する関数は list も操作します。
nth 関数は list から選択した項目を抜き出します。
最初の項目は 0th だということに注意してください。 Common Lisp はいくつもの list を操作するフォーム(関数やマクロのことです)を持っています。 mapcar は list のそれぞれの要素を、一度に一つずつ新しい list を作り出す処理に使うことができます。
上の例では、一つの list に対して mapping しています。そのため単項関数(引数を一つとる関数)を使いました。 #' は引数として関数を渡すための特殊な方法です。このことに関しては次の章で詳しく紹介します。一つ以上の list を map することも可能です。関数は list にある同じ数の引数をとらなくてはなりません。
Lisp/基本/関数

関数 はほとんど全てのプログラミング言語で出会う概念です。しかし Lisp においては特別に重要なものです。歴史的な経緯で言えば Lisp はラムダ計算の、全てのオブジェクトは関数だというところから示唆を受けています。まったく反対側の領域では、関数はほとんどまったくオブジェクトではないとするプログラミング言語もあります。これは Lisp のことではありませんが、ここでの「関数」は他のオブジェクトと同じ特権を持ちます。このことについてはこの章で論じます。
関数はほとんどの場合 defun(DEfine FUNction)マクロを用いて作成されます。このマクロは引数の list と関数の body と呼ばれる連続した Lisp式 を持ちます。 defun の典型的な使用法は以下の様になります。
ここでは引数の list は (x1 x2) となり、 body は (print x1) (print x2) (+ x1 x2) となります。関数が呼ばれたとき、 body のそれぞれの式は最初から最後にかけて順番に評価されます。最後の式にたどり着く前に、何かがあって関数から返り値が欲しい、ということになったときはどうなるでしょうか? return-form マクロによって返り値を得ることができます。例えば以下の様にです。
return-from の二番目の引数はoptional(任意)です。これはこのマクロを呼び出す際は引数が一つだけでも呼び出すことが出来るということです。上の例では関数は nil を返します。しかし、どのようにしてこのような結果になるのでしょうか?今回の関数では引数を2つ受け取ります。それ以上でもなく、それ以下でもありません。答えは、我々が "引数の list" と呼んでいるものは見た目どおりの単純なものではないということです。実はこれは、 lambda list と呼ばれるもので出くわすことになるのは今回だけではありません。今後、どのように optional(任意) の引数を可能にするのか、keyword 引数を可能にするのかを見ていきます。
初心者向けチュートリアルの章で見たように、 Lisp の関数は他の別のオブジェクトのように扱うことが可能です。例えば、関数は変数に保存することも出来ますし、他の関数の引数として渡すことも、関数の返り値になることもできます。前の章で関数を定義しましたが、前の章で定義した関数は、シンボル print-arguments-and-return-sum の function cell に保存されています。 defun が関数をそこに配置したのです。しかし、この関数が永遠にこの場所に束縛されるわけではありません。この関数を抜き出して、また別のシンボルに配置することも出来るのです。例えば、シンボルの function cell を利用するには symbol-function を利用します。では他のシンボルに先ほどの関数を保存してみましょう。
早速打ち込んでみての最初の反応はおよそ以下のようなものでしょう。
こうなってしまうのはシンボルの function cell ではなく value cell に関数を配置したからです。修復するのは簡単です。
symbol-function を利用しているので setf を使用することができます。 (paars 1 1) これで目的のものが得られました。
symbol-function が存在するのには理由があるのですが、実際のコードではほとんど使われることはありません。なぜなら他の Lisp の機能に取って代わられたからです。そのうちの一つが特殊命令 function です。これは特殊命令 symbol-function のように動きますが、引数を評価しません。その代わりに、そのシンボルに束縛されている関数を返します。それは実質的な function cell 出はないことに注意です。 (function foo) は #' に短縮することもでき、非常に有用です。一方で以下の様には書くことは出来ません。
幸いなことにシンボルの function cell 以外の場所から関数を呼び出すことは可能です。 function designator はシンボル(このケースでは function cell が使われています)か関数そのもののどちらでもあります。 funcall や apply は function designator を使用して関数を呼び出すのに使います。シンボル paars が今は同じ関数をその function cell と value cell に含んでいることを思い出してください。 value cell を変更してみると違いがわかります。
それでは funcall をそれぞれ違った方法で試してみましょう。
二番目と三番目の例の違いは paars が flet や labels を用いて他の関数に一時的に束縛されたものかどうかということです。三番目の funcall はこの一時的な関数を使い、一方で二番目の funcall は自身の function cell を使っているのです。
Lisp/基本からさらに一歩進んで/数値

Common Lisp は、ほとんどのプログラミング言語よりもたくさんの複雑な計算課題を実行するためのサポートを行います。これは、巨大な整数、有理数、複素数などへのサポートと、それらのために機能する関数によって達成されるものです。
数値型の階層は以下の様になります。
定整数(fixnum)はあまり大きすぎない数値で、非常に頻繁に処理される整数です。Common Lisp の実装にもよるのですが、 [-2,2-1] の範囲の全ての整数は定整数とみなされます。
任意長整数(bignum)は定整数ではない整数です。この整数のサイズは Lisp に割り当てられたメモリの量によります。メモリの割り当ての限りにおいてどれだけでも大きな値をとることが出来ます。しかし、その代わり定整数の処理に比べて非常に処理が遅くなります。もちろんだからといってこれが役に立たないというわけではありません。
分数(ratio)は二つの整数の比、割合を表したものです。分数は 分子 / 分母 という形を持ちます。割り算の機能を持つ / 関数は、引数が整数か分数の場合、常に分数を作り出します。例えば、 (/ 1 2) の結果は 1/2 であって 0.5 ではありません。他の数値計算の関数も分数でしっかりと動きます。
小数(float)は浮動小数点数を省略した言い方で、ほとんどのプログラミング言語では非整数の数値を表すのに使用されるデータ型です。 Common Lisp では4つの小数を表す型があり、処理系の実装によるのですが、型ごとに精確性が高いものを提供します。デフォルトでは処理系は小数を短小精度浮動小数点(short-float)とみなしますが、これは正確性に限界があります。もっと正確な小数を入力するには、たとえば倍精度浮動小数点(double-float)での "1.0d0" のような他の記法が使用されなければなりません。
複素数(complex)は文字通り複素数を表すデータ型です。複素数の表記法は #C(実数部 虚数部) の形式となります。実数部と虚数部の部分は有理数か、小数となります。全ての数値計算の処理においては複素数の処理が可能です。また、乗数や対数などの、その他の多くの関数においても複素数は拡張可能です。
次に挙げる関数は全ての種類の数値のために定義されています。
次の関数は特殊な数値のために定義されています。 gcd と lcm は複数の整数から最大公約数と最小公倍数を計算します。 isqrt は与えられた自然数の平方根の整数で最大のものを返します。 cis は e を計算します。φ はラジアンとして与えられた数値です。
次の関数は数値の比較に使用することができます。それぞれの関数はどんな数値も引数として取ることができます。
これらの関数はある型の数値を別の型に変換するときに使われます。
述語は真の場合は nil でない返り値を、偽の場合は nil を返します。
Lisp/基本からさらに一歩進んで/数値/Example 1

問題: 複素数と、函数の唯一の根を含む正方形の面積によって定義された函数 f が与えられる。この場合の根(ルート、√)を求めよ。
この函数 1/f(x) のために留数定理を使います。まずは正方形上の経路積分をできるようになる必要があります。
main loop は拡張された loop 構文でもっと簡潔にすることが出来ます。上記の関数は非常に手続き型として自然です。 C言語 のようなプログラミング言語でも同様のアルゴリズムを使うことができるでしょう。それでも、 Lisp は組み込みの複素数のサポートがあり、 C言語 の switch とは違い、返り値を返す case 文もあるために、ちょっとした利点があるのです。
float 関数は割り算の結果を小数型に変換するということに注意してください。こうしなければ、 Lisp は分数で計算を行い、結果が見栄えのいいものになりません。(1000桁の分母を持つ分数の見栄えがいいと思うのでなければですが。)この関数を Lisp で読み込むとすぐに試してみることが出来ます。
これには、 2πi が結果になると予想する理屈が関連しています。
ここで、留数定理の推論によれば、 0 でない面積の線積分を行う限りにおいて、その面積には極がある、ということになります。ここで私たちが求める物を提供してくれる先ほど定義した関数の一つ上の階層のシンプルな関数を書くとこうなります。
この返り値は、次の関数の再帰を終了する場合に役に立ちます。次の関数では正方形を四つの正方形に分け、この課題を終えるために相互再帰を使用します。
これは、関数型プログラミングがいかにコードの行数を節約できるかという実例になります。ここでは小さな補助関数を定義します。これは、そのレキシカル環境のために f, start, h そして precision の値がわかっているので、この関数に渡すのは正方形の右上の角の座標だけでいいのです。また、 or マクロの機能が余分な分岐を省いてくれます。しかし、 check-pole と find-pole が違った状況で何を返すのか、返り値が制御構造にどのような影響を及ぼすのかを苦労して理解するのはいい練習になるでしょう。
最後に、函数 f の根を見つけるために、 1/f の極を見つけなければなりません。これは非常に簡単に出来ます。
では試してみましょう。函数 f(x)=x2+2 は ±sqrt(2)*i という二つの複素数の根を持っています。ここまで定義したプログラムが上部の根を見つけられるか見てみましょう。
正しい答えを返しているみたいですね。
X86アセンブラ/x86チップセット

チップセットは、プロセッサーのアーキテクチャに基づいて設計された集積回路のセットです。
プロセッサーとマザーボード上の資源;メモリー、拡張カード、USBポート、マウス、キーボードなど、ボード上の他のコンポーネントとの通信の橋渡しをする役割を果たします。
かつてマザーボードには、ノースブリッジとサウスブリッジと呼ばれる2つのチップセットが搭載されているましたが、近年、プロセッサーに集積されことが多くなり、プロセッサーとメモリそれにバッファなどでコンピュータシステムが完結する SoC(system-on-chip)化が進んでいます。
水先人試験

メインページ > 技術 > 水先人試験
メインページ > 試験 > 資格試験 > 水先人試験
船舶を安全に誘導するのに必要な水先免許を三級海技士 (航海)または上位免許を取得し登録水先人養成施設の課程を受講して当該級の水先試験に合格して取得する試験である。
液化石油ガス設備士試験

液化石油ガス設備士試験は一般家庭用等のLPガス供給設備・設置工事を行う際に必要な液化石油ガス設備士を取得するために必要な試験である。筆記試験と技能試験がある。受験資格に制限はありません。
建築士試験

建築士試験は一級、二級、木造の3種類からなり、それぞれ設計する建築物によって分かれます。受験資格にはそれぞれ制限がある。筆記試験と技能試験がある。また、一級は試験実施権者が国土交通大臣、二級、木造は試験実施権者が都道府県知事となっています。
一級、二級、木造については
Lisp/基本からさらに一歩進んで/ファイルとディレクトリ/C struct

C言語や C++ などで作成された 構造体 を処理するには、バッファーに構造体をロードして、それぞれのフィールドを抽出することが必要になります。同様に、そのような構造体を送信する場合も、バッファーの作成を伴うことになります。
Lisp では文字列や文字を扱うときにいくつかのタイプの変換が必要となります。
C構造体とデータをやり取りするための、ここでの好ましいやり方は '(unsigned-byte 8) を使用することです。
一方で、文字の配列は C言語 のような他の言語や、あるいは事実上の初期設定である ASCII文字コード の利用を許可することでより簡単になるでしょうが、これは ANSI Common Lisp では間違ったやり方です。
ANSI の特徴は文字が ASCII や ISO-8859-1 や似たような文字コードを含むことを保証しないことです。実際、 ANSI では、たとえ最新の実装が Unicode をサポートしようが、文字コード 96 しか保証しません。
同様に、ファイルとディレクトリについての助言ですが、読み書きは単純に符号なしバイトのベクトルで行うのが良いでしょう。
Lisp プログラムでは、実際の文字列を用いるか、読み込んだ後に必要なときにだけ変換する文字を用いる必要があるでしょう。
配列に fill-pointer を使用することは任意ですが、受け取った実際の長さは読み込もうとしたものとは違うでしょうから、それまでの手順を役立てるためには推奨します。
'(unsigned-bytte 8) の要素のベクトルを処理するとき、 C構造体の同様のそれぞれのフィールドを、必要に応じてバイトオフセットに基づいたものに変換します。(make-arrayで作成されたものですが、実際に配列ではなくベクトルだということに注意してください。この区別は、1次元だけの配列かどうかによります。)
文字列 を生のバイトから抜き出す。
一つのバイトだけを取り出す。
当然、上の二つの例でも、結果の値を代入したくなることがあるでしょう。
話は変わりますが、生のバイトのバッファーに代入するには以下のようにします。
代入するものを保護することは重要なことです。logandのようなビットマスクがこのような場合に役立ちます。
1バイト以上のもののためには、 sequence2 を挿入することで subsequence1 の部分集合となります。以下のように使うことができます。
あるいは以下の例も参考になるでしょう。
下で作成する補助関数も作成されたものから中間ベクトルを回避します。
他の言語から時間の値を変換するときは、一つのオペレーティングシステムを使用していても、エポックタイム(意味的には 0 の値)が異なるかもしれないことに気をつけましょう。 ANSI Common Lisp ではUTCの1900年1月1日の真夜中午前0時が 値0 になるのに対して、 Unix や他の多くの C言語 ライブラリでは1970年の1月1日を 値0 としています。この二つを変換するのは単純な計算になります。
OpenSCAD User Manual/STL ファイルのインポートとエクスポート

テンプレート:Incomplete
OpenSCAD のモデリングに用いる STL ファイルをインポートする。
引数
OpenCSGで正しくレンダリングするためだけに必要であり、最終的なレンダリング結果には影響をおよぼさない。
例:
(Windows ではパス名中のバックスラッシュはバックスラッシュでエスケープする必要がある)。

上図は2次元のconvexityが4である例である。赤線は図形と最大4回交差する。 3次元オブジェクトのconvexityも同様に計算される。 大抵のオブジェクトでは、10とすれば十分である。
最新バージョンの OpenSCAD では、import() は2次元のDXFファイル (押し出しのため) および3次元のSTLファイル (オブジェクト) の双方をインポートするために用いられる。
インポートしたSTFファイルを後でレンダリングするために、STL ファイルは "クリーン" な状態でなければならない。 メッシュは manifold (訳注: 閉じた面で囲まれた状態) であり、穴があったり自己交差していてはいけない。 もし STLファイルがクリーンでない場合、下記のようなエラーが出る。
あるいは
STLファイルをクリーンにするために、下記のような方法がある:
- http://wiki.netfabb.com/Semi-Automatic_Repair_Options の方法を用いる。穴は埋められるが自己交差は削除できない。
- netfabb basic を用いる。このフリーソフトは穴を埋めるオプションも自己交差の削除もできない。
- MeshLab を用いる。このフリーソフトはすべての問題を解決できる。
MeshLab を用いる場合:
- メニュー『Render』→『Show non Manif Edges』を選択する、かつ・または
- メニュー『Render』→ 『Show non Manif Vertices』を選択する。
- もしこれらを用いて、manifoldでない辺や点が見つかったら、メニュー『Filters』→『Selection』→『Select non Manifold Edges』または『Select non Manifold Vertices』 を選択し、『Apply』で実行、『Close』で閉じる。 次に『'Delete the current set of selected vertices...'』ボタンを押す。 Youtubeに http://www.youtube.com/watch?v=oDx0Tgy0UHo この方法の動画がある。 このようにすると "0 non manifold edges"、"0 non manifold vertices" と表示される。
次に、『'Fill Hole'』ボタンを押し、すべての穴を選択し『Accept』ボタンを押す。 以上の操作は複数回繰り返す必要があるかもしれない。
その後、メニュー『File』→『Export Mesh』でSTL形式でセーブする。
<DEPRECATED.. Use the command import instead..>
Imports an STL file for use in the current OpenSCAD model
Parameters
Usage examples:
中学受験ガイド

ここでは中学受験について、大まかな解説や、入試前後の過ごし方の説明をします。 小学生のみなさんは、お父さん・お母さんたち保護者のかた、学校や塾の先生と読まれることをおすすめします。
受験勉強ノウハウ
受験制度など
Lisp/基本からさらに一歩進んで/パッケージ

パッケージは Common Lisp における名前空間を分割する機能です。パッケージはパッケージの関数、マクロ、そして変数定義を他のシステムからの区別を可能にします。これにより名前衝突、つまり別々の人が違うものに同じ名前を使用して生じる、いくつもの問題を減らします。
シンボルは出力書式の PACKAGE-NAME::SYMBOL-NAME を持っています。しかし、もし PACKAGE-NAME のパッケージを使用していると、出力は SYMBOM-NAME を吐き出すだけです。動的変数 *PACKAGE* は常に現在使用しているパッケージを示します。パッケージの名前が ‘::’の記法で表示されているのでなければ、インターンされたとき、シンボルは *PACKAGE* の名前のパッケージにインターンされます。
パッケージは DEFPACKAGE で定義されます。パッケージでは PACKAGE-NAME:SYMBOL-NAME で命名された、言い換えれば一つの‘:’記号で命名されたようなケースの、パッケージのどのシンボルでも EXPORT してもかまいません。パッケージは他のパッケージからシンボルを IMPORT してもかまいません。もし、インポートされたシンボルが、すでにそのパッケージでインターンされた別のシンボルと同じ名前を持っていた場合、エラーが生じます。そこで一つのシンボルを選択しなければならなくなります。 USE-PACKAGE はパッケージから API を一つ選択してインポートするのに役立ちます。パッケージがエクスポートするシンボルと、パッケージが使用しているパッケージは DEFPACKAGE によって明示されます。
Common Lisp ではパッケージのマクロを繰り返し処理するいくつものマクロが用意されています。最も関心を引くのは DO-SYMBOLS and DO-EXTERNAL-SYMBOLS です。 DO-SYMBOLS はパッケージの利用可能なシンボルをたどります。 DO-EXTERNAL-SYMBOLS は外部シンボルだけをたどります。(外部シンボルは実際のパッケージAPIとして見ることが出来ます)
たとえば "PACKAGE" という名前のパッケージのエクスポートされた全てのシンボルを出力するには、以下のように書くことが出来ます。
これらの全てのシンボルを list にまとめることもできます。
あるいは LOOP を使用しても記述することができます。
Copyright © 2002-2007 The Common Lisp Cookbook Project http://cl-cookbook.sourceforge.net/
Lisp/基本からさらに一歩進んで/CLOS

Common Lisp Object System (CLOS) は Common Lisp のプログラムで使用することのできるオブジェクト指向のプログラミングテクニックの一機能です。 CLOS では オブジェクト, クラス, メソッド といった概念とそれらの相互作用について定義されています。 CLOS ではどんなプログラミング言語よりも強力なオブジェクトシステムが利用可能です。ですが、 CLOS に特有の側面について習熟するには時間がかかるでしょう。幸いなことに、 CLOS を使うのに CLOS の専門家になる必要はありません。
CLOS に関する2つの概念で クラス群 と ジェネリック関数 というのがあります。では最初の一つから見ていきましょう。
クラスは構造の記述と、その インスタンス(実体) の振る舞いを示した "雛形" です。 Lisp での全ての種類のデータは何かのクラスのインスタンスです。例えば、数値のクラスや文字列のクラスのような組み込みクラスがあります。class-of 関数を使うことで、 Lisp オブジェクトのクラスを判別することが出来ます。
実際に表示されている結果はあなたの使用している実装環境によって違うかもしれませんが、しかし考え方は同じです。#< >は unreadable data のための Lisp の構文です(unreadable とは人間が読めないことを意味するのではなく、 Lisp リーダーが読み込めないということを意味します)。 5 が組み込みクラス integer のインスタンスであること、 "aaaa" が組み込みクラス string のインスタンスであることが容易に理解できます。
組み込みクラスは普通はあまり興味を引くものではないでしょうが、ユーザー定義のクラスを作成する方法もあります。ユーザー定義のクラスの作成は defclass マクロで行うことが出来ます。ユーザー定義クラスのそれぞれのインスタンスは、様々な Lisp のデータを含むことができるいくつもの slots を保持します。 defclass の典型的な使い方を見てみましょう。
これは以下のような構造を持ちます。
今はスーパークラスについては無視します。とりあえずは代わりにスロットについて見ていきましょう。それぞれのスロットには名前といくつものオプションが付属しています。オプションは以下のようなものです。
全てのオプションは完全に任意ですが、しかし少なくとも一つの :initarg か、あるいは :initform はオブジェクトが作成されたときにスロットの初期化が可能なように、与えられなければなりません。失敗するとランタイムエラーを返します。
クラスのオプションとして、唯一便利なのが :documentation です。これは全てのクラスに文書文字列を提供します。
ではもうクラスのことがわかったので、クラスのインスタンスが作れるはずです。 Lisp の全てはオブジェクトです。しかし上記の defclass で定義されたような一般クラスのインスタンスは、標準オブジェクトと呼ばれます。この項の残りのワードオブジェクトは標準オブジェクトのことです。
新しいオブジェクトを作るにはどうしたらいいのでしょうか? make-instance 関数がこの要求に沿ったものになります。
これでシンボル *my-book* の値はクラス book のオブジェクトとなりました。 make-instance の最初の引数は、それが class-of で呼び出した結果のように、クラスそのものかどうか、あるいは、そのシンボルがシンボルをクオートした結果のように、それがクラスの名前かどうかを評価します。このケースではシンボルを使用しましたが、これがオブジェクトを作成するにはより簡単です。
ではシンボル *my-book* を見てみましょう。
この wikibooks は今はまだ面白みに書けますね。このオブジェクトのフィールドはデフォルトクラスの値にセットされますが、これを変更するのは簡単です。
これは適切なアクセサ関数がクラス定義で用意されるからなのですが、一般的なケースでのオブジェクトのスロットへのアクセスはいくぶん難しくなっています。例えば、もし読み込み関数だけが定義されていて、まだスロットの変更が可能な場合は slot-value 関数を使います。
同様に読み込み関数を捨てて slot-value 関数でスロットの値を読むこともできますが、しかし、これはコードの可読性を減らすことになるでしょう。
ほとんどの場合は作成したオブジェクトの全てのスロットにデフォルトの値を設定して欲しくはないでしょう。例えば、特定の本を表すオブジェクトを作成したかったとします。あなたは既にその本のタイトル、著者、そして出版年を知っていて、新しいオブジェクトを役に立たない空の値ではなく、これらの値で初期化したいとします。もしスロット定義で指定された :initarg オプションがあるのなら、そのスロットはオブジェクトの作成の際にユーザー指定の値に初期化することが出来ます。これは make-instance に同様のキーワード引数を与えることで可能になります。
book のスロットのデフォルトの値はほとんど役に立たないので、( 0 年という年はありませんし、空のタイトルの本もありません。) :initform スロットオプションは削除されなければなりません。それでスロットの初期値を入れ忘れたユーザーはエラーをもらうことになり、ユーザーが次にスロットを作成するときには必要な情報をスロットに与えることでエラーを修正しようとするでしょう。変更をしたくないスロットに :reader 関数だけを与えるのも賢いやり方です(今回の book クラスでは全てがこの「変更したくない」ケースに当たりますね。)。短く言えば、これらのオプションを単体で付与するのは親切な設計にもなりうるということです。
実用新案法第10条の2

実用新案法第10条の2
実用新案登録出願の審査について規定していた。
なし
(実用新案登録出願の審査)
第10条の2 実用新案登録出願の審査は、その実用新案登録出願についての出願審査の請求をまつて行なう。
実用新案法第10条の3

実用新案法第10条の3
実用新案登録出願の審査の請求について規定していた。
なし
(出願審査の請求)
第10条の3 実用新案登録出願があつたときは、何人も、その日から4年以内に、特許庁長官にその実用新案登録出願について出願審査の請求をすることができる。
2 特許法第48条の3第2項から第4項まで(出願審査の請求)の規定は、前項の出願審査の請求に準用する。
出願審査請求期間が原則4年であることを除けば特許法と同じである。なお、特許法における期間徒過についての救済措置は本条削除後に追加されたものである。
この節は書きかけです。この節を編集してくれる方を心からお待ちしています。
Lisp/基本からさらに一歩進んで/CLOS/Example 1

映画の字幕を含んでいる .src フォーマットのファイルを持っているとしましょう。例えば以下のようなものです。
しかしこの字幕はあまりうまくありません。なぜならあなたの持っている映画の版では何かの理由で映画の最初に 10.532 秒の静止時間が含まれるからです。全ての字幕の表示時間を手作業で変えるのは不可能です。しかも、表示時間を変更するための道具もありません。ということで Common Lisp (かあるいは他の何か) のスクリプトをコーディングします。では始めましょう。
display メソッドは srt-time オブジェクトの本文の表示を返します。 normalize は補助関数で、スロットの全ての "オーバーフロー" を修正します。(60秒以上になったりすることがないようにです。) make-srt-time は make-instance を囲むラッパーで srt-time オブジェクトの作成を容易にします。
ここで、時間を加算するための二つのメソッドを追加しました。
時間を加算する二番目の方法を追加したのは、よくないように見えるかもしれません。しかし、加算で呼び出される全ての関数は第二引数に srt-time の代わりに数値を渡していることを考慮してください。後で見るように、この関数的拡張はプログラムの上方のレイヤに伝播し、これはユーザーに呼び出されることを意図した関数も含まれます。
では我々の課題の二番目の部分を考えてみましょう。テキスト文字列を与えられ、我々はタイムスタンプのインスタンスを修正されたタイムスタンプに交換しなければなりません。幸いなことに、 CL-PPCRE ではまさにそれが可能になっています。われわれには適当な正規表現が必要です。正規表現はこの wikibooks の範囲ではありませんが、正規表現にあまり親しんでない場合は、正規表現の概念を学ぶことが出来る良いサイトがたくさんあるので参照してみてください。ここではただこのケースに合う正規表現を記すにとどめます。: "([0-9]{2,}):([0-9]{2}):([0-9]{2}),([0-9]{3})" これは例えば 00:00:44,132 のような特定のタイムスタンプに一致するか判定しようとするものです。 "(" と ")" の間にある正規表現の部分にマッチしたものが CL-PRCRE に記憶されるということに注意してください。これを活用することになります。では正規表現に一致する scanner を生成します。
この scanner は実際にコンパイルされた関数ですが、意図した働きをしているのなら、実装の詳細を知る必要はありません。次のステップでは scanner で文字列の部分文字列を検索し、入れ替えるために使います。
この関数は任意の文字列をと任意の関数を引数に取り、この関数を使用し、 scanner の *find-time* が文字列で見つけた全てのタイムスタンプを変換します。では modify-times に適切な関数を与える関数を書きましょう。
それほど面白くはなかったですか?まだユーザーがどれだけの時間を加算したいのかわからないので、ランタイムに必要となる関数を作成しました。 regex-replace-all は adder を5つの引数と共に呼び出します。最初の引数の match は全体一致のためのもので、今回の我々には必要ありません。今回必要なのは部分一致です。(括弧で囲まれた部分です。)それらは時、分、秒、そしてミリセカンドと一致するものです。これらを文字列から数値に変換するのが parse-integer です。それで、 srt-time オブジェクトはこれらの数値から作られ、 delta がこの数値に加算されます。(delta は sort-time か数値、どちらでも可能だということに注意してください。知らないなら知らないでかまわないことでもありますが。)そして、 display メソッドを使用することで結果が文字列に返還されます。これこそが CL-PRCRE がこの関数から必要としていたもので、もうここで CL-PRCRE について忘れて、他の事に集中してもかまいません。
次の関数の mapline はファイルを複数の行に切り分けます。これらの切り分けられた行に関数を与え、それらの行を出力ファイルに出力します。
with-open-file はお嫌いですか?簡潔で格好の良いコードです。
さていよいよ、最後の関数です。 mapline と modify-times の力を掛け合わせます。
最後となりますが、どうしてこの example が CLOS の説明に配置されているのでしょうか?それは、どうして CLOS が優れているかを示すためです。 CLOS を使用することであなたのプログラムを大規模に実現可能なものにします。それでは、最後に練習として、少数秒だけ遅らせることが出来る機能を追加したいとします。この課題に合うような add メソッドを書いてみましょう。
Lisp/基本からさらに一歩進んで/Condition System

Common Lisp は非常に発達したコンディションシステムを備えています。このコンディションシステムでは、例外的状態、あるいは、プログラマに定義されたプログラムの通常の処理から外れた状況の処理を可能とします。例外的状況の一般的な例は例えばエラーです。しかし Common Lisp のコンディションシステムではエラーハンドリング以上のものを含んでいます。
コンディションシステムは3つの部分に分けることが出来、その3つは通知、あるいは連絡コンディション、ハンドラーコンディション、そして備えられているそれらのコンディションからの回復方法です。ほとんど全ての最近のプログラミング言語では、最初の二つのプロトコルは提供されています。しかし最後のものを提供しているものはほとんどありません。(あるいは最後の2つは区別されます。)この最後のプロトコルが再起動か、あるいはプログラムの回復の手段を準備します。これは Common Lisp のコンディションハンドリングの最も重要な側面のうちの一つです。
再起動は例外的な状態から復帰するための手段です。例外的状況はしばしばエラーとしてですが、いつでも起こります。もし REPL でこの本に沿って操作していたのなら、間違いなく少なくとも一回はデバッガセッションに陥ったはずです。デバッガは重大な状態が起こったときや、 Lisp システムがほかに頼る人もいないので、あなたに何をすべきか尋ねるために呼び出されます。デバッガはその状況から回復するためのいくつかの選択肢のリストを与えてくれます。これらの選択肢が複数の種類の再起動で、しばしばデバッガの提供する再起動だけが REPL のトップレベルに戻るものですが、時には実行をそのまま続けたり、あるいは計算を再試行したりするのも可能となります。加えて、そのほかの再起動をあなた自身で定義することも出来ます。
例えば、ファイルからデータを読み込もうとしているとします。そこには相当数の間違いを犯しえます。例えば、ファイルそのものが存在しないかもしれません。あるいはあなたはファイルの読み込みのために十分な権限を持っていないかもしれません。あるいはファイルの中身のデータが破損しているかもしれません。これらの出来事はしばしば例外状況として考えられるものです。そしてそれぞれの状況にはいくつもの方法で対処しえます。ファイルが存在しない、と言うケースでは、他のファイルの名前を指定したくなるでしょうし、ファイルの読み込みのための十分な権限がない場合では、他のファイルの名前を指定するか、読み込み可能なようにファイルの権限を変更したいと考えるでしょう。データが破損しているケースでは、新しいファイルの名前を指定したくなるか、破損したデータを意味のある方法で処理したくなるでしょう。あるいはファイルの修復と再読み込みさえ試みるかもしれません。
再起動を利用する際のあなたの役目は、利用可能な復帰メカニズムとコンディションシステムの再起動の適切さを確認することです。例題を充実させるために、あなたは何行ものデータが入ったファイルを読んでいるとしましょう。それぞれの行にはスペースで区切られた (x, y) 座標の list が含まれているとします。例えばそのファイルは以下のようなものになるでしょう。
まずは、このファイルを読みこむ関数を書き出してみましょう。以下のようなものです。
では次に、関数でファイルを呼び出したときにファイルがなかった場合にどうなるかを見てみましょう(この例では SBCL を使用しています。)
SBCL がエラーを吐き出すのを見てみました。処理系はこの後どうすればいいかわからないため、ユーザーにどうするかを尋ねています。最初のものは再起動の手段のリストです。 RETRY, ABORT, そして TERMINATE-THREAD です。もしこのあと does-not-exist.data というファイルを作成したら RETRY で再起動するのが良いでしょう。もしファイルが存在していても権限のためファイルが読めない、というのでしたら、ほとんど同じ結果ですが、 "Again" というメッセージの代わりに "Permission denied" というエラーメッセージを受け取るでしょう。ファイルを修正し、 RETRY で再起動を行うことが出来ます。
ユーザーが間違ったファイル名を入力することもあるかもしれませんから、そうした場合に読み込みのためにファイルが開けないのは賢明なことです。こうした点を考慮して、開こうとするファイルの名前を変更して再起動する方法を提供するようにしてみましょう。これは restart-case フォームかあるいは、より一般的な restart-bind で実現できます。
このようにファイルが読み込めないときのためにデバッガを入れると TRY-DIFFERENT-FILE という特別なオプションを得ることになります。
restart-case フォームは最初の引数を再起動が有効な環境で実行します。これは TRY-DIFFERENT-FILE のような特別な再起動が最初のフォームの実行時にはいつでも呼び出せることを意味します。今回の例ではフォームの実行時にデバッガが呼び出されます。これは再起動がとりうる動作のリストに含まれているということです。
コンディションは、プログラマがメインプログラムの流れの制御をしたくない状況の説明に利用されます。上の小さな例題ではコンディションを定義はしませんでしたが、コンディションは示されています。このコンディションはファイルを開こうとして出来なかったときに立ち上がるエラーのことです。このエラーは sb-int:simple-file-error という型で Lisp システムに組み込まれているものです。
あなた自身が自分のコンディションを define-condition マクロによって定義することが出来ます。 define-condition マクロは defclass マクロと非常によく似ています。
ハンドラーはコンディションを再起動する試みのシンプルな目的にかなうものです。これはつまり、もしそのコンディションが起動すると、特定の再起動が自動的に選ばれ、我々がデバッガにダンプ出力せずに、再起動が呼び出されるということを意味します。
ハンドラーのインスタンスを生成するフォームは handler-case と、より一般的な handler-bind です。
Common Lisp では、ほとんどのほかの言語にも見られるような挙動を真似して作られたエラーハンドリングメカニズムのセットを提供しています。