hpprc/jawiki-books huggingface dataset:
Java/インターフェース

Javaのインターフェースは、クラスが実装しなければならない動作を記述するために使用される抽象的な型です。 プロトコルに似ています。 インターフェイスは、キーワードinterfaceを使って宣言され、メソッドシグネチャーと定数宣言(staticとfinalの両方を宣言する変数宣言)のみを含むことができます。
Java 8以前のバージョンでは、インターフェースのすべてのメソッドに実装(メソッドボディ)は含まれません。
Java 8からは、デフォルトメソッドと静的メソッドがインターフェイス定義に実装を持つことができるようになりました。
Java 9で、プライベートメソッドとプライベート静的メソッドが追加された。現在、Javaのインターフェースは最大6種類まで持つことができます。
インタフェースはインスタンス化することはできず、実装(implement)されます。 インターフェースを実装するクラスは、インターフェースに記述されたデフォルト以外のメソッドをすべて実装するか、抽象クラスである必要があります。 Javaでは、オブジェクトの参照にインターフェイスの型を指定することができます。 この場合、参照はnullであるか、インターフェイスを実装したオブジェクトに結びつけられるかのどちらかでなければなりません。
インターフェイスを使う利点の1つは、多重継承をシミュレートできることです。 Javaでは、全てのクラスは、java.lang.Object(Javaの型システムのルートクラス)を除いて、厳密に1つのベースクラスを持たなければならず、クラスの多重継承は許されません。 しかし、インタフェースは複数のインタフェースを継承し、クラスは複数のインタフェースを実装することができます。
Java/抽象クラス

抽象クラス(abstract class)は、抽象メソッド(abstraction method)を1つ以上持つクラスを指します。 抽象メソッドは具体的な処理内容を記述せず、メソッド名と引数と戻値の型の定義(シグネチャー)だけを宣言するメソッドです。
抽象クラスは、それ自体はインスタンス化することは出来ません。 インスタンス化することは出来ませんが、抽象クラスを別のクラスが継承する事は出来ます。 また、抽象クラスを super() を使うことでメソッドを呼び出せるので、抽象メソッドではないメソッド(具象メソッド)を持つことも、データメンバーも持つことも出来ます。 次の例では、Shapeのコンストラクターが抽象クラスの具象メソッドとなっています。
次のプログラムは、二次元座標系の図形について扱っています。
高等学校物理/Ｘ線

本節では、X線について学習します。
科学者ヴィルヘルム・レントゲンは、1895年、放電管をもちいて陰極線の実験をしていた時、放電管の近くに置いてあった写真乾板が感光している事に気付きました。
彼(ヴィルヘルム・レントゲン)は、陰極線がガラスに当たった時、なにか未知のものが放射されてると考え、X線と名づけました。
やがて、様々な実験によって、X線は次の性質をもつことが明らかになりました。
この事から、X線は、荷電粒子ではない事が分かります。
(結論をいうと、X線の正体は、波長の短い電磁波です。)
なお現代では、医療用のX線を「レントゲン」ともいいます。
なでしこ (プログラミング言語)/なでしこ3/はじめに

ここでは、なでしこ3の簡単なプログラムの例を説明したい。
Hello Worldは、Hello Worldと表示させるプログラムです。 なでしこでは、これはとても簡単に作ることができます。以下がプログラムの例です。
または、警告ダイアログに表示させたい場合は、
なでしこでは、まず、文字列を扱うとき、「」や『』などで囲みます。「」や『』の違いについては、後に解説したいと思います。 画面にただ文字を表示したいときは、〜を表示、警告ダイアログに表示したいときは、〜と言うを使います。
Lua/はじめに

Luaは、ブラジルのリオデジャネイロにあるカトリック大学で設計され、メンテナンスされています。制作者は、Roberto Ierusalimschy、Waldemar Celes、Luiz Henrique de Figueiresoの3名です。
Luaは、TeCGraf(リオデジャネイロの教皇庁カトリック大学の研究室)が設計した2つの言語に由来しています。DELとSolです。DELは「データ入力言語」、Solは「単純なオブジェクト言語」という意味で、ポルトガル語で太陽を意味することから、Luaという名前になったそうです。ブラジルの石油会社ペトロブラスのために作られたものでしたが、TeCGrafの他のプロジェクトでも多く使われ、現在では世界中の多数のプロジェクトで使用されています。Luaは、組み込みゲーム開発の分野では代表的な言語の一つです。
Luaの大きなメリットの1つは、そのシンプルさです。企業によっては、この利点のためにLuaを独占的に使用しています。あるタスクを実行するためにプログラミング言語を使用できれば、従業員はより良い仕事ができると考えていますが、従業員に複雑なプログラミング言語のフルコースを提供する余裕はありません。BashやBatchのような非常にシンプルな言語では、これらのタスクを実行するには十分なパワーがありませんが、Luaはパワフルかつシンプルな言語なのです。Luaのもう一つの重要な長所は、その開発全体を通して最も重要な特徴の一つであった組込みが可能であることです。World of WarcraftやROBLOXのようなゲームでは、アプリケーションにLuaを埋め込んで、アプリケーションのユーザーが使えるようにする必要があります。
プログラミングは、組込みアプリケーションの内部で動作するプログラムの場合にはスクリプトと呼ばれることもあり、コンピューターのプログラムを書く作業のことです。プログラミング言語は、コンピューターのプログラムに含まれるコンピューター・コードを通じてコンピューターに指示を与えるために使われる言語です。プログラミング言語は、英語の文法のような「文法」と、その言語に備わっている基本機能「ライブラリ」の2つで構成されている。このライブラリは、英語でいうところのボキャブラリーに例えることができます。
Luaは、アプリケーションに組み込んで使用することも、単体で使用することもできます。本書では、Luaをコンピューターにインストールする手順については説明しませんが、Luaを使ったコードの実行には codepad または the Lua demo を使用してコードを実行することができます。 本書で紹介するLuaコードの最初の例は、基本的かつ伝統的なhello worldプログラムです。
上のコードは、Hello, world! というテキストを出力しています。これは、文字列 "Hello, world!" を引数として print 関数を呼出して行っています。これについては、/関数についての章で説明します。
なお、Luaはほとんどの場合、低レベルのアプリケーションに組込まれているため、print 関数が常にユーザーから見える範囲にテキストを表示するとは限りません。これらのアプリケーションのプログラミング・インターフェースのドキュメントでは、一般に、テキストがユーザーにどのように表示される可能性があるかが説明されています。
コメントとは、プログラミング言語では無視されるコード注釈です。コメントは、1行または複数行のコードを記述したり、プログラムを文書化したり、コードを一時的に無効にしたり、その他の理由で使用できます。Luaで認識されるためには、ハイフン(-)を2つ付ける必要があります。また、独自の行に記述することも、他の行の末尾に記述することも可能です。
プログラミング言語の文法は、文や言葉の書き方を定義する(自然言語の)文法と同じように、そのプログラミング言語で文や式をどのように書かなければならないかを定義しています。文と式は、それぞれ文と言葉に例えることができます。式は値を持ち評価されるコードの断片であり、文は実行可能なコードの断片で、命令とその命令を使用するための1つまたは複数の式を含んでいます。例えば、3 + 5 は式で、文 variable = 3 + 5 は変数variableの値をその式の値にに設定する文です。
Luaの全シンタックスは、LuaのウェブサイトにあるEBNF(Extended Backus–Naur Form)で見ることができますが、それを読んでも何もわからないと思います。EBNFはメタ言語、つまり他の言語を記述するために使われる言語で、ちょうどメタサイトがウェブサイトについてのウェブサイトであるように、そしてメタテーブルがLuaにおいて他のテーブルの動作を定義するテーブルであるように(この本の後半でメタテーブルとテーブルについて学びます)、他の言語を記述するために使われます。なぜなら、Luaのような言語はメタ言語を使って記述することもできますが、英語の単語や文章を使って記述することも可能だからで、本書はまさにそれを目指しています。
英語を使って他の言語を記述できるのだから、それ自体がメタ言語でなければならない(メタ言語の定義に対応しているから)。これは確かにそうです。そして、プログラミング言語の目的は命令を記述することであり、英語を使ってそれができるのだから、英語もまたプログラミング言語でなければならない。これもある意味事実です。実際、英語はいろいろなことに使える言語です。しかし、EBNFは専門言語であり、プログラミング言語もまた専門言語です。専門化とは、ある特定のことをするのは非常に得意ですが、他のことはできない、という特性です。EBNFは、他の言語を記述するのには非常に優れていますが、命令を書いたり、メッセージを伝えたりするのには使えません。プログラミング言語は指示を与えることには非常に優れているが、言語を記述したり、メッセージを伝達したりすることには使えません。
英語は、言語を記述すること、指示を与えること、メッセージを伝達することのすべてを行うことができます。しかし、そのうちのいくつかは苦手です。実際、英語は指示を与えることが苦手で、コンピューターに指示を与えても、コンピューターは何も理解できません。なぜなら、コンピューターは非常に正確で曖昧でない指示を必要とするからです。
LuaはLuaの公式サイトの、ダウンロードページで入手できます。ダウンロードのボタンはソースコード用ですが、おそらくあなたが欲しいのはソースコードではないでしょう。おそらくバイナリーを探しているのでしょうから、それに関する情報を探すために、このページを見て回る必要があります(厳密に何を探しているかは、使用しているプラットフォームに依存します)。本書の目的は、あくまでもLua言語を教えることであり、Luaツールの使い方を教えることではありません。一般的に、読者は組み込み環境でLuaを使用することを想定していますが、本書はその必要はありません。また、スタンドアロン言語としてのLuaの使用方法は説明しません。




1 What does "Lua" mean in Portuguese?
2 Which of these is a long comment of level 0?


3 What is extended Backus–Naur form?
Lua/付録：ソフトウェアのテスト

ソフトウェアテスト(software testing)とは、コンピューターソフトウェアのバグやプログラミングのミスを発見するための様々な手法やプロセスを指す言葉です。ソフトウェアテストには、コンピューターソフトウェアを実行せずに行う静的テストと、テスト対象のコンピュータプログラムを実行しながら行う動的テストがある。
型チェック(Type-checking)は、Wikipediaの抜粋にあるように、実行時またはコンパイル時に行うことができる。コンパイル時に行う場合、コンパイラはソースコードをコンパイルする際にプログラムの型安全性を検証し、プログラムが特定の型安全性プロパティを満たすことを保証する。一般に、静的型チェッカーは、変数が常に同じ型の値を持ち、関数に渡される引数が正しい型を持っていることを単純に検証する。
静的な手法では、開発サイクルの早い段階でバグを発見することができる。これに対し、動的なアプローチでは、プログラムが実行される際に型制約に従うかどうかを検証する。このため、動的型付け言語ではより多くの制約を検証できるはずだが、多くの動的型付け言語では型制約があまり存在しない。Luaは動的型付け言語です。Luaでは、値には型がありますが、変数には型がありません。つまり、変数の値はプログラム実行のある時点では数値であり、別の時点では文字列である可能性があります。
Luaの型システムは、他の多くの言語と比較して非常にシンプルです。演算子の使用時(少なくとも1つが数値でなく、強制的に1つにできない2つの値を加算しようとすると型エラーが発生する)や標準ライブラリの関数呼び出し時(標準ライブラリの関数は正しい型を持っていない引数を拒否して適切なエラーを発生させる)に型チェックが行われる。
Luaには関数の引数の型を指定する機能がないため、関数に渡される引数が適切な型であることを確認するために、type関数を使用すると便利です。これは、プログラム実行中にユーザから与えられた引数が渡されるような関数(例えば、定義済みのLua関数を呼び出す対話型環境)に対して最も有効です。関数に型チェックのコードを追加すると、関数が冗長になり、メンテナンスのオーバーヘッドが増えるためです。
ホワイトボックステスト(white-box testing)とは、ソフトウェアの内部構造に関する知識を用いて、その機能を検証するためのテストケースを作成することを指します。ソフトウェアテストには3つのレベルがありますが、Luaプログラムにとって最も興味深いのはユニットレベルです。なぜなら、Luaプログラムは通常、統合テストやシステムテストが行われるような大きなアプリケーションの一部だからです。
Luaのユニットテストには、複数のフレームワークが用意されています。ユニットレベルでのテストは、ライブラリーに最も適しており、関数に特定の引数を渡すテストケースを作成し、関数が予期せぬ値を返した場合に警告を表示することが一般的です。この場合、新しい機能に対してテストケースを書く必要がありますが、テストが通らなくなるような形で関数の動作が変更された場合、コードに混入したエラーに気づきやすくなるという利点があります。
Luaには複数のユニットテストフレームワークが存在します。そのうちの1つであるbustedは、LuaJITと同様に標準的なLua仮想マシンをサポートし、MoonScriptやTerra(前者はLuaにコンパイルする言語、後者はLuaと相互運用可能な低レベル言語)でも使用することができる。また、Lua用のユニットテストフレームワークであるLuaunitは、完全にLuaで書かれており、依存関係はありません。Shakeは、よりシンプルなテストフレームワークで、当初はKepler Projectに属しており、assertとprint関数を使用していたが、現在は活発に開発されていない。
高等学校 生物/いろいろな遺伝

この節の話題は、かつ2012年頃まで、下記の不完全優性~抑制遺伝子、伴性遺伝などの話題は、むかしは高校生物の教科書や参考書に良くある話題でしたが、しかし現代の高校教育では重要度が低いと考えられるように教育状況が変化しており(『もういちど読む』シリーズの高校生物にその事情が書いてあります)、現在の検定教科書にはほとんど載っていません。「生物資料集」にその内容が載っている程度です。
優性と劣性の関係が不完全な遺伝の仕方を不完全優性(incomplete dominance)と呼びます。 不完全優性では優性の法則は当てはまりません。
不完全優性は、マルバアサガオなどが行います。 マルバアサガオには、花の色が赤Rと白rのものがあります。 花の色が赤の純系RRと白の純系rrを両親Pとすると、 その子F1はRrで花の色が中間の桃色となります。 さらにその子F2は、RR:Rr:rr=1:2:1で、赤色:桃色:白色=1:2:1となります。

成体になるまでに致死作用がある遺伝子を致死遺伝子(lethal gene)と呼びます。
致死遺伝子は、多くの生物に存在します。 例えば、ハツカネズミは致死遺伝子を持っており、 毛の色が黄色Yと灰色yのものがあります。 黄色Yyを両親Pとすると、 その子F1はYy:yy=2:1で、[Y]:[y]=2:1となります。 YYの個体は発生の段階で死んでしまう。 これはYが劣性の致死遺伝子だからです。
同一の遺伝子座にある、同一形質を決める、複数の遺伝子を複対立遺伝子(multiallelic gene)と呼びます。
複対立遺伝子には、ヒトのABO式血液型などがあります。 ヒトのABO式血液型には、A型、B型、AB型、O型の4種類があり、 AとBとは不完全優性で、A,BはOに対して完全優性です。 例えば下の表のように、AO(A型)とBO(B型)を両親とすると、 その子はAB,AO,BO,OOとなり、それぞれAB型,A型,B型,O型となります。
対立しない2つ以上の遺伝子が、その働きを互いに補足しあって1つの形質を決めるとき、その遺伝子を補足遺伝子()と呼びます。
補足遺伝子には、スイートピーの花の色などがあります。 色素原を作る遺伝子をC、色素原から色素を作る遺伝子をPとし、 白色花CCppと白色花ccPPを両親Pとすると、 その子F1はCcPpで有色花となります。 さらにその子F2は、C-P-:C-pp:ccP-:ccpp=9:3:3:1で、有色花:白色花:白色花:白色花=9:3:3:1つまり有色花:白色花=9:7となります。 これはCとPの両方をもっていないと色素が作られないためです。
他の遺伝子の働きを抑制する遺伝子を抑制遺伝子(suppressor gene)と呼びます。
抑制遺伝子には、カイコガのまゆの色などがあります。 黄色遺伝子をY、Yの働きを抑制する遺伝子をIとし、 白まゆIIyyと黄まゆiiYYを両親Pとすると、 その子F1はIiYyで白まゆとなります。 さらにその子F2は、I-Y-:I-yy:iiY-:iiyy=9:3:3:1で、白まゆ:白まゆ:黄まゆ:白まゆ=9:3:3:1つまり白まゆ:黄まゆ=13:3となります。 これはIがYの働きを抑制するためです。
プログラミング言語/はじめに

プログラミング言語(programming language)は、コンピューターに特定のタスクを実行させるために使用できる人工言語です。一般的なプログラミング言語とみなされるためには、計算機的に完全であること、つまりチューリング完全であることが必要です。ただし、データベースクエリー言語やドメイン固有言語など、計算完全でない言語もプログラミング言語とみなすのが一般的です。
低水準プログラミング言語( low-level programming language )は、非常に基本的で機械語( machine's native language )に近い言語です。低水準プログラミング言語は、ソフトウェアの構成言語( building block language )と考えることができます。アセンブリコードは最も一般的な低レベル言語であり、機械語に組立てるための翻訳はほとんど必要ありません(バイナリを構成する1と0のこと)。
高水準プログラミング言語( high-level programming language )は、人間のコミュニケーションレベルに近いものです。この方式では、プログラマーに代わってコンパイラがより多くの作業を行います。言語が私たちの日常会話に近ければ近いほど、より複雑な問題を心配するのは容易になります。しかし、これは行き過ぎると大変なことになります。言語があまりにも英語(あるいは他の自然言語)に似ていると、複雑なプログラムを作るのが難しくなることがあるのです。なぜなら、冗長な言語は読むのに時間がかかるため、理解するのに多くの時間がかかってしまうからです。
機械語( machine code )は、コンピューターが直接理解できる言語です。機械語は2進数の列で構成されています。直接プログラムすることはほとんどありませんが、普通のコンピューターで実行するものは、まず機械語に翻訳する必要があります。機械語は、コンピューターのアーキテクチャーによって異なる場合があります。
アセンブリ言語( Assembly language )は、機械語をより人間に読みやすいように表現したもので、マシン命令を2進数ではなくニーモニックで表現しています。アセンブリ言語は、プログラムが自己修正しない限り、機械語と1対1の関係にあります。アセンブリプログラムをコンピューターで実行する前に、機械語に変換する必要があります。この変換を行うプログラムをアセンブラといいます。コンピューターの初期にはアセンブリ言語が広く使われていたが、現在では主にプログラムの非常に時間のかかる部分、オペレーティングシステムの中核部分、スマートカードのチップのような非常に小さなコンピューターに使われています。
機械語は第1世代、アセンブリ言語は第2世代のプログラミング言語と呼ばれています。算術式、ループ、関数など、プログラマーが機械語命令を直接扱わずに済むような構造を持つプログラミング言語を第3世代プログラミング言語といいます。
以前は、高水準・領域特化型プログラミング言語を第4世代言語、エキスパートシステムを第5世代言語と呼ぶことが多くありました。その後、Python、Haskell、Common Lispなど、非常に高度な汎用プログラミング言語が多数登場し、この区別は曖昧になっています。現在では、エキスパート・システムはほとんど使われていません。
コンピューターでプログラムを実行するには、まず機械語に翻訳( translate )し、翻訳された機械語を実行するか、インタープリタと呼ばれる別のプログラムによってシミュレーションする必要があります。 コンパイラは、ソースプログラミング言語( source programming language )と呼ばれるプログラミング言語を、デスティネーション言語( destination language )と呼ばれる別のプログラミング言語に翻訳するプログラムです。通常、ソースプログラミング言語は高級言語であり、デスティネーション言語は機械語です。インタープリターは、ソースプログラミング言語をバイトコード( byte code )と呼ばれる中間形式にコンパイルしてから解釈することを要求する場合があります。これは、より低レベルの言語であり、インタープリターを書くのが容易です。Javaでは、コンパイルは別工程で行われますが、インタプリタと一体で行われる場合もあります。PerlやPythonがその例です。CommonLispは例外的にインタプリタとコンパイルの両方を行います。
型システム( type systems )には2つの軸があります。動的か静的か、強いか弱いかです。
強い型付け言語では、オブジェクトの型が一致しない場合、そのオブジェクトに対する操作を許さしません。CommonLisp、Q-base、Pythonなどがその例です。
一方、弱い型付け言語では、そのような操作は可能です。CやC++がその例です。
動的型付け言語は型と値を結びつけます。静的型付け言語では型は変数に束縛されます。
プログラミング言語/文法仕様

言語を記述する方法には、構文( syntax )で記述する方法と意味論( semantics )で記述する方法があります。言語の構文は、その言語に属する文字列(文章( sentence )や文( statements ))を定義する一連の規則で、言語の意味論は、与えられた文の意味を記述するものです。
言語の場合、文を字句の一連の並べに分解できます。これは、言語の分解不可能な構成要素です。 たとえば、次のPerlの文は
次の字句を含みます。
字句はカテゴリーにグループ化することができます。このようなカテゴリーをトークン( token )といいます。
拡張バッカス・ナウル形式( Extended Backus-Naur Form )は、言語の構文を正確に指定するための方法であることを意図しています。言語を記述するための言語であるという点で、メタ言語であると言えます。また、コマンドの使い方やヘルプの文書でよく使われているのを見かけます。
EBNFの完全なドキュメントは、ここにあります。
.
言語の基本要素はEBNFの終端記号で記述し、それを非終端記号でまとめて言語全体の論理的な上位表現とします。終端記号は、言語の変数名の適切な構文や、数字を表現するために使われます、実際に有効な文字パターンを指定します。非終端記号は、与えられたもの(例えば、10進数、16進数、科学的記数法の数値定数)のさまざまな可能な表現を、1つの論理的なもの([Numerical_Constant])にまとめます。最終的には、さまざまな構文要素を積み重ね、それらの組み合わせ方を表現することで、その言語のプログラムを表す記号ができあがります。
いくつかの例は awk ユーティリティのマニュアルページにあります。
( より抜粋したものです。)
まず、その使用方法です。

大括弧の中の項目は EBNF の例で、awk のコマンドラインで使用するオプションのパラメータを示しています。
次に、使用法の詳細部分は部分的に EBNF で指定されています。
下の例では、'pattern', 'action', 'expression', 'statement' といった単語が EBNF の非終端記号になっています。
pattern-action文は次のような形式です。
{ action } がない場合は、その行を表示します。パターン-アクション文は、改行またはセミコロンで区切られます。
アクションは、一連のステートメントです。ステートメントは、次のいずれかになります。
文はセミコロン、改行、右中括弧で終端します。
言語全体がEBNFで文書化されることもあります。以下のリンクはC++のANSI定義を文書化したものですが、この文書の多くの部分はEBNFで書かれています。
高等学校数学C/行列

当ページ「高等学校数学C/行列」はまもなく削除される予定です。理由は以下の通りです。
削除に同意されないのであれば、方針などを確認して、ページを適切なものに書き換えた上で、このテンプレートを取り除いてください。勝手に取り除いた場合、投稿ブロックされる恐れがあります。
プログラミング言語/関数型言語

宣言型プログラミング(declarative programming)の考え方は、環境の動作に関するルールを定義し、あとは言語がすべて解決してくれるようにすることです。これは,機械に何をすべきかを正確に指示する手続き型言語とは対照的です。関数型プログラミングは、宣言型プログラミングを実現する方法の1つです。その典型的な例が階乗関数です。新しい関数を定義する最初のステップは、まず些細なケースを処理することです。次に、非自明なケースを、最終的に単純なケースに帰着するように定義します。nの階乗は、nにnより1小さい階乗を掛けたものと定義されます。
fac 0 = 1
fac n = (fac (n-1)) * n
このような単純な実装では、forループよりも多くのメモリーと処理時間を消費します(O(n)スタックスペースを使います)が、これは単純な変更で解決できます。コンパイラーやインタープリターが関数呼出しのコストを排除するために、累算器パラメーター(accumulator parameter)を使用するのです。
facb 0 acc = acc
facb n acc = facb (n-1) (n*acc)
fac n = facb n 1
関数型プログラミングには大きな用途があります。関数型言語をコードのプロトタイプとして使い、手続き型言語よりも関数型コードを書いて、それが望ましい結果を生成することを証明するのは多くの場合簡単です。そして、手続き型の技術を使って最適化します。関数型はバイナリツリーを非常に効率的にトラバースすることができます。
ラムダはアウトスコープで参照される変数への参照を保持し、なおかつこれらの関数を保存して呼出し関数が長く戻ったときに呼出すことができるため、ラムダを使用する言語にはガベージコレクションがあります。関数型プログラミング 「純粋関数」を書くことに焦点を当てた宣言型プログラミングのサブセットです。関数型プログラミングは、宣言型プログラミングの一種です。これに対して、C#、Visual Basic、C++、Javaなどのオブジェクト指向プログラミング(OOP)言語を含む主流の言語は、主に命令型(手続き型)プログラミングをサポートするように設計されています。コンピュータサイエンスでは、関数型プログラミングはプログラミングパラダイム(コンピュータプログラムの構造と要素の構築スタイル)の一つで、計算を数学関数の評価として扱い、状態の変化や変更可能なデータを回避しています。宣言型のプログラミングパラダイムであり、プログラミングは文の代わりに式や宣言で行われます。関数型コードでは、関数の出力値は関数に渡された引数にのみ依存するため、引数 x に同じ値を指定して関数fを2回呼出すと、毎回同じ結果 f(x) が得られます。これは、ローカルまたはグローバルな状態に依存する手続きが、同じ引数で異なるプログラム状態から呼出されると異なる結果を生成する場合があるのとは対照的です。副作用、すなわち関数の入力に依存しない状態の変化を排除することで、プログラムの挙動を理解し予測することが非常に容易になります。これが、関数型プログラミングの開発の主な動機の1つです。
コンビネーター論理は、モーゼス・シェンフィンケルとハスケル・カリーによって開発された、同等の理論的基盤です。もともとは、数学の基礎をより明確にするために開発されました。コンビネーター論理は一般にラムダより抽象的と認識されており、ラムダより先に発明されました。
プログラミング言語/命令型言語

命令形言語(Imperative Languages)、プログラミング言語のパラダイムの一種で、プログラムの状態を変化させる記述文で演算処理を行うものです。 しばしば、宣言型言語(Declarative Languages)と対比されます。 一般的な例としては、FORTRAN、COBOL、C言語、Algol系言語、Pascalなどがあげられますが、これらも命令形言語であるとともに、手続き型、構造化、モジュラー型などのパラダイムを含有しており、対立概念ではありません。
コンピューターサイエンスにおいて、宣言型プログラミング(declarative programming)とは対照的に、命令型プログラミング(Imperative programming)は、プログラムの状態とプログラムの状態を変更する文によって計算を記述するプログラミングパラダイムです。自然言語における命令形ムードが行動を起こす命令を表すのと同様に、命令形プログラムはコンピューターに実行させる一連の命令です。ほとんどすべてのコンピューターのハードウェア実装は命令型です。ほとんどすべてのコンピューターのハードウェアは、命令型スタイルで書かれたコンピューター本来の機械語を実行するように設計されています。この低レベルの観点から、プログラムの状態はメモリの内容で定義され、文はコンピューターのネイティブな機械語の命令となる。より高度な命令型言語では、変数やより複雑な文が使われますが、それでも同じパラダイムに従います。レシピや工程表も、コンピュータープログラムではないものの、各工程が命令であり、物理世界が状態を保持するという点で、命令型プログラミングに近い身近な概念です。このように、命令型プログラミングの基本的な考え方は、概念的になじみやすく、かつハードウェアに直接的に具現化されるため、ほとんどのコンピューター言語が命令型スタイルになっています。
プログラミング言語/プロシージャ型言語

手続き型プログラミング(procedural programming)では、プログラムは順番に実行される動作の集合体(プロシージャ)として記述されます。この順番が重要なのです。
手続きはアルゴリズムと呼ばれることもあります。
手続き型プログラミングの要素として、状態の考え方があります。プログラムの動作は、通常変数と呼ばれるデータ項目の値を変化させます。プログラムが実行されると、変数の値は変化します。ある時点では、変数には一組の値があり、これが状態です。
プログラミング言語/並行処理言語

コンカレントプログラミングとは、コンピュータプログラミングの手法の一つで、単一のコンピュータ内、あるいは複数のシステム間で同時に処理を実行するものである。後者の場合、分散コンピューティングという用語が使われる。マルチプロセッサ・マシンは、このようなプログラミングを活用することで、より優れた性能を発揮する。
現在では、CPU負荷の高いプログラムを2倍の速度で実行させるためには、並行プログラミングが唯一の方法となっています。 (歴史的には、クロック速度が2倍のCPUが現れるまで数年待つという方法もよく使われていたが、この傾向は2003年頃に終わった
並列プログラミングでは、1つのタスクを比較的独立して計算できるいくつかのサブタスクに分割し、それを集約して1つのまとまった解を形成する。並列プログラミングは、因数分解などの純粋に数学的な問題など、独立したタスクに容易に分解できるタスクに最も効果的である。
並列プログラミングを実現する一つの方法として、通信ネットワークで結ばれた別々のコンピュータで作業を行う分散コンピューティングという情報処理方法がある。
理解を容易にするために、元のベーカリーアルゴリズムを修正したものを2プロセスで始める。
[todo|C・A・R・ホアと彼の並行プログラミングの研究について言及する ]。
データ構造

本書は、効率的なデータ構造の作成と分析について説明しています。
本書の内容を理解するためには、変数、演算式、if-else条件、ループ、サブルーチン(関数ともいう)、ポインター(参照またはオブジェクトハンドルともいう)、構造体(レコードまたはクラスともいう)、簡単な入出力、簡単な再帰を自分で操作して書ける程度にプログラミング言語に慣れていなければなりません。
データ構造の構築は多くの言語でアプローチが異なるため、疑似コード( pseudo-code )を使って、自分の言語に翻訳できるようにしています。

本節は、英語版ウィキブックスの文章を和訳したもので、日本版ウィキブックスの現状を表していません。
ウィキブックは、オープンソースのソフトウェアプロジェクトに似た事業です。寄稿者は、他の人を助けたり、個人的に充実させたり、あるいは寄稿者自身の仕事のために何かを達成するためにプロジェクトのためのコンテンツを作成します(例:講義の準備)。
オープンブックは、オープンプログラムと同様に、完成までに時間を要しますが、読者からのささやかな貢献でも大きな恩恵を受けることができます。たとえば、よりよい本にするために、本文の「バグ」(バグは、組版、説明、技術、美学、その他にあるかもしれません)を修正することができます。バグを修正する機会を見つけたら、「編集」をクリックして、変更を加え、「保存」をクリックするだけです。他の投稿者は、あなたの変更が本にとって適切であるかどうかを確認するために、あなたの変更をレビューすることができます。もし不明な点があれば、ディスカッションのページで質問することができます。常識的な範囲でお願いします。
より大きな貢献をしたい場合は、短すぎるセクションや章など、もっと作業が必要な部分を見て、書き始めることができます! 内容の重複を避けるため、必ず最初に残りの部分に目を通すようにしてください。さらに、投稿者のためのガイドラインのページ(Guidelines for Contributors)を読んで、一貫性のあるヒントやアドバイスを得る必要があります。
一度にすべてを寄稿する必要はないことに注意してください。テンプレート「{{TODO|description of what remains to do}}」をページに追加すれば、おそらく他の人があなたの代わりにその部分を仕上げてくれるでしょう。
この本は、貢献しやすくするために、意図的に焦点を絞ってあります(そうすれば、最終目標が明確になりますから)。本書はアルゴリズムに関する3冊のコンピュータ科学の教科書のうちの1冊で、『アルゴリズム(英:Algorithms)』のアルゴリズムのテクニックに続き、『データ構造とアルゴリズム(英:Advanced Data Structures and Algorithms)』の上級編で終わります。もし、この3冊の本のどれにも載っていないトピックを投稿したい場合は、より折衷的な性格を持つAdvanced bookに載せてみてください。また、もしそのトピックが基本的なものだと思うのであれば、アルゴリズム(Algorithms)かデータ構造(Data Structures)のディスカッションページで提案することも可能です。
さらに、付録としてデータ構造の実装(Ada、C、C#、Perl、Python、Java、Ruby、Schemeのいずれか)も歓迎されます。
さらに、今日のアルゴリズムの範囲を示すオンラインリファレンスとして アルゴリズムの辞典 があります。
高校英語の文法/完了形

現在完了の省略形として、
I have → I've
you have → you've
のように省略することがある。コレは別にいいとして、
三人称単数の she,he,it などにつく has も同様に
he has → he's
she has → she's
it has → she's
のように省略する。be動詞のis の省略形ではないので、注意。
現在完了の基本的な使い方は、中学でも習うように、現在における「完了」「継続」「経験」である。
いっぽう、過去完了の使い方は、現在における「完了」「継続」「経験」のほか、過去から見た時点でのさらなる過去の事を使う用法がある。
典型的なのは、
「~したとき、・・・を忘れていたことに気づいた。」 I realized that I had forgotten(または left など) ・・・
という表現で、過去完了を使う。なお、こういう、過去からみた過去を表すために用いる過去完了形の用法のことを「大過去」という。
ほか、典型的な表現として、
I lost the watch that My father bought for me. 「父が買ってくれた腕時計を、なくしてしまった。」
のような例文もよくある。
ただし、完了形を使わずとも、起きた順番どおりに
My father bought the watch for me, but I lost it.
のように過去形だけで言う方法もある。高校の定期テストなどで、この過去形を過去完了形に置き換える表現など、いかにも典型的に出題されそうなので、覚えとこう。
実現しなかったことを表すのに、過去完了を使う用法がある。
参考書によくある典型的な例文は、
「君に来て欲しかったのに。」 I had expected yo to come.
である。
expect の代わりに hope でもよく、たとえば
「君に来て欲しかったのに。」 I had hoped yo to come.
という例文も参考書によくある。
ほか、
I had intend to go ・・・ 「・・・に行くつもりだったのですが(しかし私は行かなかった)。」
という例文もよくある。
expect(期待する), hope(望む), want(欲する)
や
intend(つもりである), think (思う)
などの動詞で、このような用法がある。
未来完了形とは、未来のある時点での、予定や予測における、その未来時点での完了や結果や継続のことである。
たとえば、「来年で私たちは結婚30周年になる」(継続の未来完了)(※ 桐原フォレストに似た例文)とか「もう1回その映画を見たら、合計で3回その映画を見たことになる」(経験の未来完了)(※ジーニアスだと映画、桐原だとミュージカルで、ともに3回)とか、そういう表現が未来完了である。
映画など合計3回の英文は
I will have seen (映画またはミュージカル) three times if I see it again.
となる。if の代わりに when でもいい(桐原がif, ジーニアスが when)。
高等学校 生物基礎/様々なバイオーム

本節では、国内外のバイオームとその分布について扱います。
またなお、グラフでの各植生の各領域の温度範囲や降水量範囲の広さや値は、教科書ごとに若干、異なります。なので、あまり細かな数値を覚えても無価値です。

日本では、その地域の気温によって、植生が決まります。
よって、その地域の気温の積算値をもとにした指数によって、植生が説明出来ます。
植物の生育がうまくできる下限の値を5°Cと考え、よって月平均気温からマイナス5°Cをした値を各月もとめ、さらにその各月の値を足し合わせた積算値を、暖かさの指数といいます。
WIが15〜45は、トドマツなどの針葉樹が分布し、亜寒帯に相当し、北海道の北東部などです。
45〜85は、ミズナラなどの夏緑樹林が分布し、冷温帯に相当し、東北地方などです。
85〜180は、スタジイなどの照葉樹林が分布し、温暖帯に相当します。
180〜240は、沖縄県や鹿児島などで見られ、亜熱帯多雨林が分布し、亜熱帯に相当します。
高等学校 生物/効果器

外界に作用する器官、細胞、細胞小器官を効果器といいます。動物は刺激に応じて様々な反応を示します。その時、効果器が働きます。刺激に対する通常の反応は運動ですが、筋肉、繊毛、鞭毛などはそのための効果器です。電気や光を出す特殊な効果器を持っている動物もいます。また、色素胞や分泌腺も効果器です。
筋肉は体の中で最も重い組織で、質量の約40%を占めています。
脊椎動物の筋肉には、横紋筋と平滑筋の2種類があります。横紋筋は顕微鏡で見た時に見えます。横紋筋は大きくなったり小さくなったりするのが早く、大きな力を出すのが特徴です。骨格筋も心臓の筋肉(心筋)も横紋筋です。骨格筋は骨に付いていて、体を動かしたり正しい位置に保ったりしています。平滑筋は、体内の血管や臓器にある筋肉です。
神経筋標本は、カエルのように骨格筋に運動神経がつながっている実験用動物から採取します。カエルのふくらはぎの筋肉(腓腹筋)に座骨神経を貼り付けて作った神経筋標本を使って、神経を1回電気刺激すると、0.1秒で筋肉が収縮・弛緩します。これが単収縮です。単収縮が終わる前に次の電気刺激を与えると、単収縮が重なり、収縮が大きくなります。刺激の頻度がある一定以上になると、強い収縮が長時間続くようになります。これを強収縮といいます。強収縮は、健康な骨格筋で起こる種類の筋収縮です。これは、活動電位が運動神経を1秒間に10回以上伝わっているために起こります。収縮の量が時間とともにどのように変化するかを示す曲線を収縮曲線といいます。刺激があまり起こらない時は、不完全強縮を示します。そのため、単収縮が重なり合ったギザギザの収縮曲線になります。頻度が高くなると、完全強縮を示し、大きく滑らかに収縮する曲線になります。
筋組織を作っているのは筋細胞という長い細胞で、筋繊維とも呼ばれます。骨格筋の筋細胞は、多くの細胞が集まってできており、それぞれの細胞には数百個の核があります。筋細胞は、細胞の長軸に沿って筋原繊維がずらりと並んでいます。筋原線維はサルコメア(筋節)で出来ています。両端はZ膜で仕切られ、サルコメアは長軸方向に何度もつながっています。サルコメアの真ん中の少し暗く見える部分を暗帯、Z膜に近い部分は明るく見えるので明帯といいます。ミオシンフィラメントとアクチンフィラメントは、サルコメアの筋原線維の長軸に沿って規則正しく並んでいます。ミオシンフィラメントはミオシン分子の束がたくさん集まって出来ており、ミオシン分子の頭がたくさん飛び出しています。
横紋筋が収縮すると、明帯と呼ばれる明るい色の部分の長さだけが変化し、サルコメアの幅は小さくなります。明帯にはアクチンフィラメントがあり、暗帯にはミオシンフィラメントがあります。筋肉は、ミオシンとアクチンが連携して、収縮します。ミオシン分子の頭にATPが付着していない時は、頭はアクチンフィラメントに傾いた状態で付着しています。ATPがミオシン分子の頭部に結合していると、頭部はアクチンから離れます。ADPが頭部から放出されると同時に、頭部は再び傾きます。このため、頭部はアクチンフィラメントから離れます。この動きによって、アクチンフィラメントはサルコメアの中央部に向かって移動します。この動きを何度も繰り返すと、サルコメアの長さが短くなり、筋肉が収縮します。サルコメアが短くなっても、ミオシンフィラメントもアクチンフィラメントも長さは変わりません。アクチンフィラメントがミオシンフィラメントの間をすり抜けると、筋肉は収縮します。このような仕組みを滑り説といいます。なお、ミオシンは、筋肉を収縮させたり弛緩させたりするので、モータータンパク質と呼ばれています。
筋肉も神経系の力を借りて動かしています。骨の中にある筋肉は運動神経によって調節され、好きな時に収縮出来ます。このような筋肉を随意筋といいます。その他、平滑筋や心臓のように、自律神経系が働き方を調節している場合もあります。脊髄からの興奮が運動神経細胞を伝わって軸索末端に達すると、シナプス小胞からアセチルコリンという神経伝達物質がシナプス間隙に放出されます。アセチルコリンが筋繊維のリガンド依存性イオンチャネルに結合すると、チャネルが開き、ナトリウムイオンが流れ込みます。その結果、神経細胞と同じように筋繊維に活動電位が発生します。
筋小胞体は、筋繊維の筋原線維を包む袋のような構造をしています。筋繊維の膜が興奮すると、膜から内側に伸びているT字管から筋小胞体に興奮が送られます。そして、筋小胞体に蓄えられていたカルシウムイオンが放出されます。トロポニンとトロポミオシンは、アクチンフィラメントに付着するタンパク質です。カルシウムイオンが少なくなると、ミオシン頭部がアクチンに付着しなくなるため、筋肉が弛緩します。筋小胞体からのカルシウムイオンがトロポニンに結合すると、トロポミオシンの形が変化します。これにより、ミオシン頭部がアクチンに結合し、筋肉が収縮します。
筋細胞は、ATPがADPになる時に収縮します。これが筋細胞のエネルギーになります。筋細胞はATPをあまり持っていないので、グリコーゲンという形でエネルギーを蓄えています。呼吸と解糖によってグリコーゲンが分解され、ATPが作られます。また、筋細胞はクレアチンリン酸の形でエネルギーを蓄えており、激しい運動でATPが必要になった時に、ADPからATPを作るために使われます。また、ATPは、安静時にエネルギーを貯え、クレアチンリン酸を作り直すためにも使われます。
動物が外界のものに反応するのは、筋肉だけではありません。
微細な生物や精子は、繊毛や鞭毛を使って泳いでいます。筋肉は細胞全体を収縮させて動きます。一方、繊毛や鞭毛は、細胞の表面に生えている小さな動く毛です。水を動かすために、この毛が動きます。1つの細胞にはたくさんの繊毛があり、細胞が泳ぐ時に、波打つように動きます。海に住む動物の幼生はよく繊毛を使って泳ぎます。長い繊毛は鞭毛といいます。
汗腺、乳腺、唾腺などの効果器は、刺激に反応して物質を送り出す動物の部分です。これらの腺は、その中の細胞が分泌した物質が管状の排出管を通って外に出るため、外分泌腺と呼ばれます。甲状腺は内分泌腺の一種なので、排出管を通さずに血液中にホルモンを送り込みます。中枢神経系からの自律神経やホルモンは、多くの腺組織を制御しています。
メダカの体の色は、背景の明るさによって変化します。色素胞とは、鱗粉の中に色素の子実体をたくさん持っている細胞です。色素胞が色を変えるのは、細胞の中の子実体が移動するためです。子実体が細胞全体にあると色がついたように見えますが、細胞の真ん中に集まると透明になります。
ホタルの腹部には光を放つ器官があります。種によって決められた時間に相手が光を放つと、自分も光を放ち、他の雌雄に話しかけます。
デンキウナギやシビレエイは、電気を使って身の安全を確保したり、餌を捕まえたりしています。
高等学校 生物/個体群と生物群集

ある地域に住む同種の個体(indvidual)の群れを個体群(こたいぐん、population)といいます。ゾウの群れでもウマの群れでも、ハエの群れでも、同種の個体の群れでさえあれば、個体群といいます。
ショウジョウバエの雄と雌とのつがいを、エサの足りた飼育ビンなどの中で飼育すると、初めは個体数が急激に増加します。
もし、エサが限りなく豊富にあり、居住空間も広ければ、どんどん増えていくことになります。しかし、実際には、エサには限りがあります。
ある環境において、個体数の密度が高まると、食べ物の不足や、居住空間の減少、排出物の増加などによって、生活空間が悪化します。その結果、生まれてくる子が減ったり、あるいは生存競争が激しくなって死亡率が増えるなどして、個体数の増加が抑えられます。そのため、個体数の時間についてのグラフを書くと、図のようにS字型になります。このグラフのように、個体群における個体数の推移を描いたグラフを個体群の成長曲線(せいちょうきょくせん、growth curve)といいます。
動物でも植物でも、このような現象が見られます。
ある環境においての、個体数の最大数を環境収容力(かんきょう しゅうようりょく、carrying capacity)といいます。
また、密度によって、個体の成長や発育などが変化することを密度効果(みつど こうか、density effect)といいます。
植物でも密度効果はあります。 ダイズでは、種をまいたときの密度に関わらず最終的な単位面積あたりの総重量が、ほぼ同じ値になります。 これを最終収量一定の法則(さいしゅうしゅうりょう いってい の ほうそく、law of constant final yield)といいます。
トノサマバッタでは、幼虫時の密度で、成虫になったときの様子が変わる。 幼虫時に密度が低いと、成虫は孤独相(こどくそう、solitarious phase)になります。子には遺伝しありません。
孤独相
いっぽう、幼虫時に密度が高いと、成虫は群生相(ぐんせいそう)になります。子には遺伝しありません。
群生相
移動能力の高さは、新しい環境を探すためのものです。
このように、個体群密度によって、同じ種の形態や行動に違いが出ることを相変異(そうへんい)といいます。アブラムシやヨトウガでも相変異が見られます。
動物の、ある個体群で、個体の生存数を数表にしたものを生命表(せいめいひょう、life table)といい、生命表の内容をグラフにしたものを生存曲線(survival curve)といいます。
種によって生存曲線は違い、主に3つの型に分かれます。
晩死型と早死型と平均型という3つです。 晩死型は、死期が寿命の近くです。早死型は、生まれてから、すぐに死ぬ個体が多くあります。平均型は、時期によらず死亡率が、ほぼ一定です。
魚類など、産卵数の多い生物は、子育てをせず、そのため早死型が多くあります。 いっぽう、大型の哺乳類は、晩死型です。
鳥類・爬虫類などは平均型です。


ハチ、アリ、シロアリなどでは、同種の個体が密集して生活し、コロニーとよばれる群れを形成しています。これらの昆虫(ハチ、アリ、シロアリ)は、社会性昆虫と呼ばれます。
シロアリの場合、産卵を行う個体は、ふつうは1匹に限られます。その産卵を行うアリが、女王アリです。
女王アリ以外のメスは不妊です。
女王以外のアリには、ワーカーや兵アリがいます。
ワーカーとは、いわゆる「はたらきアリ」のことで、食物の運搬や幼虫の世話などの仕事をする個体のことです。 シロアリのワーカーや兵アリには生殖能力が無い。
ハチも同様に、女王バチやワーカーがいます。ハチでも、産卵を行うのは女王ハチのみで、ワーカーや兵ハチには生殖能力が無い。
(ほうかつ てきおうど)
ニワトリやニホンザルやオオカミなどで、よく見られます。
ニワトリの場合、何羽かを檻(おり)の中で買うと、つつきあいをして順位が決まる。順位の高いほうが、つつく。順位のひくいほうが、つつかれます。
ニホンザルの場合、順位の高い個体のほうが、順位の低い個体の尻の上に乗っかり、これをマウンティングといいます。
ある種の個体群について、必要とする資源の特徴や、活動時間などのように、生態系の中で占めている地位を生態的地位(ニッチ、niche)といいます。
異種の個体群のニッチが似ている場合、ニッチを奪い合って競争が起きる場合が多いので、そのようなニッチの似ている異種個体群が共存するのは難しい。
たとえばゾウリムシ(P.caudatum)とヒメゾウリムシ(P.aurelia)は、ともに細菌を食物とするためニッチが似ており、よって共存は難しい。
いっぽう、タカとフクロウは、食べ物が似ていますが、活動時間が違うため、自然界なら共存は可能です。
ゾウリムシとヒメゾウリムシのように、異種がニッチを奪い合って競争することを種間競走(しゅかん きょうそう、interspecific competition)といいます。
ヒメゾウリムシのほうが体が小く、そのため、少ない食料でもヒメゾウリムシは有利です。なので、ヒメゾウリムシとゾウリムシを、たとえば狭い容器などに入れて競走させると、ゾウリムシが競争にやぶれて減少し、やがてゾウリムシは絶滅するという場合が多くあります。
このように、異種が競争して、どちらかが絶滅することを競走的排除(きょうそうてき はいじょ、competitive exclusion)といいます。
ニッチが異なっていれば、同じ場所であっても、異種の個体群が共存できる場合があります。 たとえばミドリゾウリムシとゾウリムシは、ニッチが微妙に異なっており、そのため共存しやすい。ミドリゾウリムシは光合成でエネルギーを生産出来ます。
縄張り(テリトリー)
シジュウカラは一夫一妻制。
アリとアブラムシ
サメとコバンザメ

寄生者、宿主(しゅくしゅ)
寒冷地ほど、体が大型化。 ホッキョクグマ(大きい)と、ツキノワグマ(小さい )との関係など。
寒冷地の動物は、耳などの突起物が小型です。寒冷地であるほど、突起物が小型化しています。