Wikibooks jawikibooks https://ja.wikibooks.org/wiki/%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%9A%E3%83%BC%E3%82%B8 MediaWiki 1.42.0-wmf.26 first-letter メディア 特別 トーク 利用者 利用者・トーク Wikibooks Wikibooks・トーク ファイル ファイル・トーク MediaWiki MediaWiki・トーク テンプレート テンプレート・トーク ヘルプ ヘルプ・トーク カテゴリ カテゴリ・トーク Transwiki Transwiki‐ノート TimedText TimedText talk モジュール モジュール・トーク 特殊相対論 0 1980 246663 246658 2024-04-13T15:38:13Z Nermer314 62933 wikitext text/x-wiki {{Pathnav|メインページ|自然科学|物理学|frame=1|small=1}} 本項は特殊相対論の解説です。特殊相対論は電磁気学、相対論的量子論、場の量子論、一般相対論など広範な物理学の基礎となる理論である。 == 原理 == '''光速度不変の原理''' 真空中の光の速度はどの慣性系から見ても一定である。 '''特殊相対性原理''' どの慣性系でも物理法則は同じ形式で表される。 == 世界間隔 == == ローレンツ変換 == 慣性系 <math>K</math> の座標を <math>ct,x</math>、 慣性系 <math>K'</math> の座標を <math>ct',x'</math> とする。<math>K'</math> は <math>K</math> に対して速度 <math>V</math> の一様な並進運動をしているとき、2つの慣性系の間の対応を求めよう。 まず、<math>ct',x'</math> は <math>ct,x</math> に関する一次関数でなくてはならない。なぜなら、二次以上の項が含まれていると、世界間隔が任意の慣性系で不変であるという条件 <math>c^2dt'^2 - dx'^2 = c^2dt^2 - dx^2</math> が満たされないからである。さらに、<math>ct',x'</math>の原点を適当に選ぶことで、定数項も0とすることができる。 また、<math>K'</math> で静止している物体について考えると明らかに <math>x'=\mathrm{const}.</math> この物体の位置を <math>K</math> で観察すると、 <math>x = Vt + \mathrm{const.}</math> すなわち、<math>x'</math> は <math>x - Vt</math> に比例して、その比例係数を <math>\gamma</math> とすると、 <math>x' = \gamma(x-Vt)</math> と表される。<math>ct' = \gamma(act + bx)</math> と置くと、 <math>cdt' = \gamma(acdt + bdx),\, dx' = \gamma(-Vdt + dx).</math> 世界間隔が慣性系で不変であるから、 <math>\begin{align} c^2dt'^2 - dx'^2 &= \gamma^2\{(acdt+bdx)^2 - (-Vdt + dx)^2\} \\ &= \gamma^2 \{(a^2c^2-V^2)dt^2 + (b^2-1)dx^2 + 2(abc+V)dtdx\} \\ &= c^2dt^2 - dx^2 \end{align}</math> すなわち、 <math>\begin{cases} \gamma^2 (a^2c^2-V^2) = c^2 \\ \gamma^2 (b^2-1) = -1 \\ abc+V=0 \end{cases}</math> 第三式を第二式に代入して、 <math>\gamma^2\left(a^2 - \frac{V^2}{c^2}\right) = a^2. </math> これを第一式と比較して <math>a=1.</math> 第三式より <math>b = -\frac V c .</math> 第二式より <math>\gamma = \frac{1}{\sqrt{1-\frac{V^2}{c^2}}}.</math>ここで、<math>\gamma,a</math> は正に選ばなくてはいけない。<math>\gamma</math> が負であるとすれば <math>x' = \gamma(x-Vt)</math> から <math>x</math> と <math>x'</math> が逆向きとなってしまう。それは慣性系 <math>K,K'</math> の設定と異なる。<math>a</math> も同じ理由である。 <math>\beta = \frac V c</math> とすると、ローレンツ変換は <math>\begin{pmatrix} ct' \\ x' \end{pmatrix} = \gamma \begin{pmatrix} 1 & -\beta \\ -\beta & 1 \end{pmatrix}\begin{pmatrix} ct \\ x \end{pmatrix}</math> と書かれる。 [[ファイル:Lt_hyperbolic_functions_2.svg|サムネイル|313x313ピクセル|ローレンツ変換の図示]] ローレンツ変換をまた別の方法で求めよう。ローレンツ変換を原点からの世界間隔 <math>s^2 = (ct)^2 -x^2</math> が変化しないミンコフスキー空間の回転として表してみる。<math>s^2</math> を正として <math>t>0</math> の部分は、 <math>ct = s \cosh \theta, \, x = s \sinh \theta</math> と表すことが出来る。この点を回転角 <math>-\psi</math> だけ回転させた点 <math>ct',x'</math> は、 <math>\begin{align} ct' &= s \cosh(\theta - \psi ) \\ &= s \cosh \theta \cosh \psi - s \sinh \theta \sinh \psi \\ &= ct \cosh \psi - x \sinh \psi \end{align}</math> <math>\begin{align} x' &= s \sinh(\theta - \psi ) \\ &= s \sinh \theta \cosh \psi - s \cosh \theta \sinh \psi \\ &= x \cosh \psi - ct \sinh \psi \end{align}</math> という変換になる。 行列で表すと、<math>\begin{pmatrix} ct' \\ x' \end{pmatrix} = \begin{pmatrix} \cosh \psi & -\sinh \psi \\ -\sinh \psi & \cosh \psi \end{pmatrix} \begin{pmatrix} ct \\ x \end{pmatrix}</math> である。前述の議論より、ローレンツ変換は線型変換だから、この変換が時空間全体に適用されると考えるべきである。実際に、<math>s^2</math> が正で <math>t<0</math> の部分については、<math>\theta \to \theta + \psi</math> として上の変換を得る。<math>s^2</math> が負で <math>x>0</math> の部分には、 <math>\theta \to \theta - \psi</math>、<math>x<0</math> の部分には、 <math>\theta \to \theta + \psi</math> と変換すれば良い。<math>K</math>系での原点 <math>x=0</math> は <math>K'</math> 系では、<math>ct' = ct \cosh \psi,\, x' = -ct \sinh \psi</math> である。二式を割って、<math>\tanh \psi =- \frac{x'}{ct'} = \frac V c.</math> ここで、<math>\frac{x'}{t'}</math> は <math>K'</math> での <math>K</math> の原点の速度に等しいから <math>-V</math> である。双曲線関数の公式 <math>1 - \tanh^2 \psi = \frac{1}{\cosh^2 \psi}</math>から、<math>\cosh \psi = \frac{1}{\sqrt{1-\frac{V^2}{c^2}}}, \, \sinh \psi = \tanh \psi \cosh \psi = \frac{\frac V c}{\sqrt{1-\frac{V^2}{c^2}}}</math> となる。 この結果は前述の結果と一致する。また、<math>\psi</math> はラピディティと呼ばれる。 === 速度の合成則 === 慣性系 <math>K</math> に対し、系 <math>K'</math> は速度 <math>V_1</math> の一様な並進運動を行っている。また、系 <math>K''</math> は <math>K'</math> に対して、速度 <math>V_2</math> の一様な並進運動を行っている。このとき、 <math>K''</math> は <math>K</math> から見てどのような運動を行っているだろうか? <math>\tanh \theta_1 = \frac{V_1}{c},\, \tanh \theta_2 = \frac{V_2}{c}</math> としてラピディティを導入すると、 <math>\begin{align} \begin{pmatrix} ct'' \\ x'' \end{pmatrix} &= \begin{pmatrix} \cosh \theta_2 & -\sinh \theta_2 \\ -\sinh \theta_2 & \cosh\theta_2 \end{pmatrix} \begin{pmatrix} ct' \\ x' \end{pmatrix} \\ &= \begin{pmatrix} \cosh \theta_2 & -\sinh \theta_2 \\ -\sinh \theta_2 & \cosh\theta_2 \end{pmatrix} \begin{pmatrix} \cosh \theta_1 & -\sinh \theta_1 \\ -\sinh \theta_1 & \cosh\theta_1 \end{pmatrix} \begin{pmatrix} ct \\ x \end{pmatrix} \\ &= \begin{pmatrix} \cosh (\theta_1 + \theta_2) & -\sinh (\theta_1 + \theta_2) \\ -\sinh (\theta_1 + \theta_2) & \cosh(\theta_1 + \theta_2) \end{pmatrix} \begin{pmatrix} ct \\ x \end{pmatrix}. \end{align} </math> すなわち、<math>K''</math> は <math>K</math> に対して、ラピディティ <math>\theta = \theta_1 + \theta_2</math> のローレンツ変換である。<math>K</math> から見た <math>K''</math> の速度 <math>\frac V c = \tanh \theta</math> を<math>V_1,V_2</math> で表すと、双曲線関数の加法定理 <math>\tanh (\theta_1 + \theta_2) = \frac{\tanh \theta_1 + \tanh \theta_2}{1 + \tanh \theta_1 \tanh \theta_2}</math> より、<math>\frac V c =\frac{\frac{V_1}{c} + \frac{V_2}{c}}{1 + \frac{V_1V_2}{c^2}}</math> である。もちろん、ラピディティを経由せずに速度の合成則を求めることも可能である。詳しくは[[特殊相対論 速度の合成則|速度の合成則]]を参照すること。 == 4元ベクトル == == 自由粒子の作用 == 特殊相対論的な自由粒子の作用 <math>S_{\mathrm{mat}}</math> を求めよう。特殊相対性原理より、それは慣性系の選択に依存しない量でなくてはいけない。すなわち、ローレンツ変換に対して不変でなくてはならない。世界間隔 <math>ds^2</math> はローレンツ変換に対して不変な量であるから、これを使って、 <math>S_{\mathrm{mat}} = -mc \int_a^b ds</math> のように書けるだろう。ここで、 <math>m</math> は粒子に固有の定数で、後にこれが質量であることを示す。 <math>S_{\mathrm{mat}} = -mc^2 \int_{t_a}^{t_b} \sqrt{1-\frac{v^2}{c^2}}dt</math> であるから、対応するラグランジアンは <math>L_{\mathrm{mat}} = -mc^2\sqrt{1-\frac{v^2}{c^2}}</math> である。ところで、ニュートン力学は特殊相対論の <math>v \ll c</math> とした極限の場合と考えられるので、 <math>L_{\mathrm{mat}}</math> は <math>v \ll c</math> の条件でニュートン力学の自由粒子のラグランジアンに一致するべきである。実際、 <math>L_{\mathrm{mat}} \approx -mc^2\left( 1 - \frac 1 2 \frac{v^2}{c^2} \right) = -mc^2 + \frac 1 2 mv^2</math> となる。第一項の定数項は無視して、ニュートン力学のラグランジアンに一致することが確かめられた。ここにきて、定数 <math>m</math> が粒子の質量であることも確定する。 運動量 <math>\boldsymbol p</math> は<math>\frac{\partial L_{\mathrm{mat}}}{\partial \boldsymbol v}</math> であり、エネルギー <math>E</math> は <math>E = \boldsymbol p \cdot \boldsymbol v - L_{\mathrm{mat}}</math> と定義される。この式に従って計算すると、 <math>\begin{align}\boldsymbol p &= \frac{\partial L_{\mathrm{mat}}}{\partial \boldsymbol v} \\ &= -mc^2 \frac{\partial v^2}{\partial \boldsymbol v} \frac{d}{dv^2} \sqrt{1 - \frac{v^2}{c^2}} \\ &= -mc^2(2\boldsymbol v)\left( -\frac 1 2 \frac{1}{c^2} \frac{1}{\sqrt{1 - \frac{v^2}{c^2}}} \right) \\ &= \frac{m \boldsymbol v}{\sqrt{1 - \frac{v^2}{c^2}}} \end{align} </math> <math>\begin{align} E &= \boldsymbol p \cdot \boldsymbol v - L_{\mathrm{mat}} \\ &= \frac{mv^2}{\sqrt{1 - \frac{v^2}{c^2}}} + mc^2 \sqrt{1 - \frac{v^2}{c^2}} \\ &= \frac{mc^2}{\sqrt{1 - \frac{v^2}{c^2}}} \end{align} </math> となる。 === 4元運動量 === 4元運動量 <math>p^\mu</math> を <math>p^\mu = m\frac{dx^{\mu}}{d\tau}</math> として定義しよう。<math>d\tau = \sqrt{1 - \frac{v^2}{c^2}}dt</math> であることを考えると、 <math>p^\mu = \frac{m}{\sqrt{1 - \frac{v^2}{c^2}}} \frac{dx^\mu}{dt} </math> であるから、時間成分と空間成分を分けて書くと <math>p^\mu = \left(\frac{mc}{\sqrt{1 - \frac{v^2}{c^2}}} ,\frac{m\boldsymbol v}{\sqrt{1 - \frac{v^2}{c^2}}} \right) = \left(\frac E c ,\boldsymbol p\right).</math> ここで、 <math>dx^\mu dx_\mu = c^2 d\tau^2</math> の両辺を <math>d\tau ^2 </math> で割って <math>m^2</math> を掛けると <math>p^\mu p_\mu = m^2 c^2</math>が得られる。この式に4元運動量の成分を代入すると <math>E^2 = m^2c^4 + \boldsymbol p^2 c^2</math> を得る。 同じように、4元速度 <math>u^\mu </math> を定義することが出来る。 <math>u^\mu = \frac{dx^{\mu}}{d\tau} = \left(\frac{c}{\sqrt{1 - \frac{v^2}{c^2}}} ,\frac{\boldsymbol v}{\sqrt{1 - \frac{v^2}{c^2}}} \right) . </math> また、<math>u^\mu u_\mu = c^2. </math> == 電磁気学 == 電磁場は4元ベクトル <math>A_\mu</math> によって特徴づけられる。電磁場と相互作用する粒子の作用 <math>S_{\mathrm{int}}</math> は経験によれば <math>S_{\mathrm{int}} = -q \int_a^b A_\mu dx^\mu </math> である。ここで、 <math>q</math> は電荷と呼ばれる量である。電磁場 <math>A^\mu</math> <ref>4元ポテンシャルあるいは電磁ポテンシャルとも呼ばれる。</ref>の成分は、<math>A^\mu = \left(\frac \phi c, \boldsymbol A \right)</math> であり、<math>\phi</math> はスカラーポテンシャル、<math>\boldsymbol A</math> はベクトルポテンシャルと呼ばれる。 作用の時間成分と空間成分を分けて書くと <math>S_{\mathrm{int}} = q \int_a^b (-\phi dt + \boldsymbol A \cdot \boldsymbol dr) = q \int_a^b (-\phi + \boldsymbol A \cdot \boldsymbol v) dt. </math> 自由粒子の作用と合わせると、 <math>S_{\mathrm{mat}} + S_{\mathrm{int}} = \int_{t_a}^{t_b}\left(-mc^2 \sqrt{1 - \frac{v^2}{c^2}} - q\phi + q\boldsymbol A \cdot \boldsymbol v \right)dt</math> となる。この被積分関数が電磁場中の粒子のラグランジアン <math>L</math> である。 電磁場中の運動方程式を求めるためには、オイラーラグランジュ方程式 <math>\frac{d}{dt} \frac{\partial L}{\partial \boldsymbol v} = \frac{\partial L}{\partial \boldsymbol r}</math> を求めれば良い。 <math>\frac{\partial L}{\partial \boldsymbol v} = \frac{m\boldsymbol v}{\sqrt{1 - \frac{v^2}{c^2}}} + q \boldsymbol A = \boldsymbol p + q \boldsymbol A </math> <math>\frac{\partial L}{\partial \boldsymbol r} = q\nabla(\boldsymbol A \cdot \boldsymbol v) - q \nabla \phi = q(\boldsymbol v \cdot \nabla) \boldsymbol A + q \boldsymbol v \times (\nabla \times \boldsymbol A) - q \nabla \phi </math> また、<math>\frac{d \boldsymbol A}{d t} = \frac{\partial \boldsymbol A}{\partial t} + \sum_{i=1,2,3} \frac{dx^i}{dt}\frac{\partial \boldsymbol A}{\partial x^i} = \frac{\partial \boldsymbol A}{\partial t} + (\boldsymbol v \cdot \nabla)\boldsymbol A </math> である。 最終的に、オイラーラグランジュ方程式は <math>\frac{d \boldsymbol p}{dt} = -q\nabla \phi -q\frac{\partial \boldsymbol A}{\partial t} + q\boldsymbol v \times (\nabla \times \boldsymbol A) </math> となる。これが粒子の運動方程式である。 == 参考文献 == * エリ・デ・ダンラウ、イェ・エム・リフシッツ著、恒藤敏彦他訳『場の古典論(原著第6版)』東京図書(1978) == 旧版 == {{進捗状況}} {{蔵書一覧}} * [[特殊相対論 はじめに|はじめに]] * [[特殊相対論 歴史的導入|歴史的導入]] * [[特殊相対論 テンソル|テンソル]] * 計算例 ** [[特殊相対論 時間の遅れ|時間の遅れ]] ** [[特殊相対論 ローレンツ収縮|ローレンツ収縮]] ** [[特殊相対論 速度の合成則|速度の合成則]] * [[特殊相対論 4元運動量|4元運動量]] <!-- E = mc^2 !!! --> * [[特殊相対論 運動方程式|運動方程式]] * [[特殊相対論 電磁気学への導入|電磁気学への導入]] {{DEFAULTSORT:とくしゆそうたいろん}} [[Category:特殊相対論|*]] {{NDC|421.2}} bhogjt2s5fnccthlo1omrq6p96ijzwh 246664 246663 2024-04-13T15:45:33Z Nermer314 62933 wikitext text/x-wiki {{Pathnav|メインページ|自然科学|物理学|frame=1|small=1}} 本項は特殊相対論の解説です。特殊相対論は電磁気学、相対論的量子論、場の量子論、一般相対論など広範な物理学の基礎となる理論である。 == 原理 == '''光速度不変の原理''' 真空中の光の速度はどの慣性系から見ても一定である。 '''特殊相対性原理''' どの慣性系でも物理法則は同じ形式で表される。 == 世界間隔 == == ローレンツ変換 == 慣性系 <math>K</math> の座標を <math>ct,x</math>、 慣性系 <math>K'</math> の座標を <math>ct',x'</math> とする。<math>K'</math> は <math>K</math> に対して速度 <math>V</math> の一様な並進運動をしているとき、2つの慣性系の間の対応を求めよう。 まず、<math>ct',x'</math> は <math>ct,x</math> に関する一次関数でなくてはならない。なぜなら、二次以上の項が含まれていると、世界間隔が任意の慣性系で不変であるという条件 <math>c^2dt'^2 - dx'^2 = c^2dt^2 - dx^2</math> が満たされないからである。さらに、<math>ct',x'</math>の原点を適当に選ぶことで、定数項も0とすることができる。 また、<math>K'</math> で静止している物体について考えると明らかに <math>x'=\mathrm{const}.</math> この物体の位置を <math>K</math> で観察すると、 <math>x = Vt + \mathrm{const.}</math> すなわち、<math>x'</math> は <math>x - Vt</math> に比例して、その比例係数を <math>\gamma</math> とすると、 <math>x' = \gamma(x-Vt)</math> と表される。<math>ct' = \gamma(act + bx)</math> と置くと、 <math>cdt' = \gamma(acdt + bdx),\, dx' = \gamma(-Vdt + dx).</math> 世界間隔が慣性系で不変であるから、 <math>\begin{align} c^2dt'^2 - dx'^2 &= \gamma^2\{(acdt+bdx)^2 - (-Vdt + dx)^2\} \\ &= \gamma^2 \{(a^2c^2-V^2)dt^2 + (b^2-1)dx^2 + 2(abc+V)dtdx\} \\ &= c^2dt^2 - dx^2 \end{align}</math> すなわち、 <math>\begin{cases} \gamma^2 (a^2c^2-V^2) = c^2 \\ \gamma^2 (b^2-1) = -1 \\ abc+V=0 \end{cases}</math> 第三式を第二式に代入して、 <math>\gamma^2\left(a^2 - \frac{V^2}{c^2}\right) = a^2. </math> これを第一式と比較して <math>a=1.</math> 第三式より <math>b = -\frac V c .</math> 第二式より <math>\gamma = \frac{1}{\sqrt{1-\frac{V^2}{c^2}}}.</math>ここで、<math>\gamma,a</math> は正に選ばなくてはいけない。<math>\gamma</math> が負であるとすれば <math>x' = \gamma(x-Vt)</math> から <math>x</math> と <math>x'</math> が逆向きとなってしまう。それは慣性系 <math>K,K'</math> の設定と異なる。<math>a</math> も同じ理由である。 <math>\beta = \frac V c</math> とすると、ローレンツ変換は <math>\begin{pmatrix} ct' \\ x' \end{pmatrix} = \gamma \begin{pmatrix} 1 & -\beta \\ -\beta & 1 \end{pmatrix}\begin{pmatrix} ct \\ x \end{pmatrix}</math> と書かれる。 [[ファイル:Lt_hyperbolic_functions_2.svg|サムネイル|313x313ピクセル|ローレンツ変換の図示]] ローレンツ変換をまた別の方法で求めよう。ローレンツ変換を原点からの世界間隔 <math>s^2 = (ct)^2 -x^2</math> が変化しないミンコフスキー空間の回転として表してみる。<math>s^2</math> を正として <math>t>0</math> の部分は、 <math>ct = s \cosh \theta, \, x = s \sinh \theta</math> と表すことが出来る。この点を回転角 <math>-\psi</math> だけ回転させた点 <math>ct',x'</math> は、 <math>\begin{align} ct' &= s \cosh(\theta - \psi ) \\ &= s \cosh \theta \cosh \psi - s \sinh \theta \sinh \psi \\ &= ct \cosh \psi - x \sinh \psi \end{align}</math> <math>\begin{align} x' &= s \sinh(\theta - \psi ) \\ &= s \sinh \theta \cosh \psi - s \cosh \theta \sinh \psi \\ &= x \cosh \psi - ct \sinh \psi \end{align}</math> という変換になる。 行列で表すと、<math>\begin{pmatrix} ct' \\ x' \end{pmatrix} = \begin{pmatrix} \cosh \psi & -\sinh \psi \\ -\sinh \psi & \cosh \psi \end{pmatrix} \begin{pmatrix} ct \\ x \end{pmatrix}</math> である。前述の議論より、ローレンツ変換は線型変換だから、この変換が時空間全体に適用されると考えるべきである。実際に、<math>s^2</math> が正で <math>t<0</math> の部分については、<math>\theta \to \theta + \psi</math> として上の変換を得る。<math>s^2</math> が負で <math>x>0</math> の部分には、 <math>\theta \to \theta - \psi</math>、<math>x<0</math> の部分には、 <math>\theta \to \theta + \psi</math> と変換すれば良い。<math>K</math>系での原点 <math>x=0</math> は <math>K'</math> 系では、<math>ct' = ct \cosh \psi,\, x' = -ct \sinh \psi</math> である。二式を割って、<math>\tanh \psi =- \frac{x'}{ct'} = \frac V c.</math> ここで、<math>\frac{x'}{t'}</math> は <math>K'</math> での <math>K</math> の原点の速度に等しいから <math>-V</math> である。双曲線関数の公式 <math>1 - \tanh^2 \psi = \frac{1}{\cosh^2 \psi}</math>から、<math>\cosh \psi = \frac{1}{\sqrt{1-\frac{V^2}{c^2}}}, \, \sinh \psi = \tanh \psi \cosh \psi = \frac{\frac V c}{\sqrt{1-\frac{V^2}{c^2}}}</math> となる。 この結果は前述の結果と一致する。また、<math>\psi</math> はラピディティと呼ばれる。 === 速度の合成則 === 慣性系 <math>K</math> に対し、系 <math>K'</math> は速度 <math>V_1</math> の一様な並進運動を行っている。また、系 <math>K''</math> は <math>K'</math> に対して、速度 <math>V_2</math> の一様な並進運動を行っている。このとき、 <math>K''</math> は <math>K</math> から見てどのような運動を行っているだろうか? <math>\tanh \theta_1 = \frac{V_1}{c},\, \tanh \theta_2 = \frac{V_2}{c}</math> としてラピディティを導入すると、 <math>\begin{align} \begin{pmatrix} ct'' \\ x'' \end{pmatrix} &= \begin{pmatrix} \cosh \theta_2 & -\sinh \theta_2 \\ -\sinh \theta_2 & \cosh\theta_2 \end{pmatrix} \begin{pmatrix} ct' \\ x' \end{pmatrix} \\ &= \begin{pmatrix} \cosh \theta_2 & -\sinh \theta_2 \\ -\sinh \theta_2 & \cosh\theta_2 \end{pmatrix} \begin{pmatrix} \cosh \theta_1 & -\sinh \theta_1 \\ -\sinh \theta_1 & \cosh\theta_1 \end{pmatrix} \begin{pmatrix} ct \\ x \end{pmatrix} \\ &= \begin{pmatrix} \cosh (\theta_1 + \theta_2) & -\sinh (\theta_1 + \theta_2) \\ -\sinh (\theta_1 + \theta_2) & \cosh(\theta_1 + \theta_2) \end{pmatrix} \begin{pmatrix} ct \\ x \end{pmatrix}. \end{align} </math> すなわち、<math>K''</math> は <math>K</math> に対して、ラピディティ <math>\theta = \theta_1 + \theta_2</math> のローレンツ変換である。<math>K</math> から見た <math>K''</math> の速度 <math>\frac V c = \tanh \theta</math> を<math>V_1,V_2</math> で表すと、双曲線関数の加法定理 <math>\tanh (\theta_1 + \theta_2) = \frac{\tanh \theta_1 + \tanh \theta_2}{1 + \tanh \theta_1 \tanh \theta_2}</math> より、<math>\frac V c =\frac{\frac{V_1}{c} + \frac{V_2}{c}}{1 + \frac{V_1V_2}{c^2}}</math> である。もちろん、ラピディティを経由せずに速度の合成則を求めることも可能である。詳しくは[[特殊相対論 速度の合成則|速度の合成則]]を参照すること。 == 4元ベクトル == == 自由粒子の作用 == 特殊相対論的な自由粒子の作用 <math>S_{\mathrm{mat}}</math> を求めよう。特殊相対性原理より、それは慣性系の選択に依存しない量でなくてはいけない。すなわち、ローレンツ変換に対して不変でなくてはならない。世界間隔 <math>ds^2</math> はローレンツ変換に対して不変な量であるから、これを使って、 <math>S_{\mathrm{mat}} = -mc \int_a^b ds</math> のように書けるだろう。ここで、 <math>m</math> は粒子に固有の定数で、後にこれが質量であることを示す。 <math>S_{\mathrm{mat}} = -mc^2 \int_{t_a}^{t_b} \sqrt{1-\frac{v^2}{c^2}}dt</math> であるから、対応するラグランジアンは <math>L_{\mathrm{mat}} = -mc^2\sqrt{1-\frac{v^2}{c^2}}</math> である。ところで、ニュートン力学は特殊相対論の <math>v \ll c</math> とした極限の場合と考えられるので、 <math>L_{\mathrm{mat}}</math> は <math>v \ll c</math> の条件でニュートン力学の自由粒子のラグランジアンに一致するべきである。実際、 <math>L_{\mathrm{mat}} \approx -mc^2\left( 1 - \frac 1 2 \frac{v^2}{c^2} \right) = -mc^2 + \frac 1 2 mv^2</math> となる。第一項の定数項は無視して、ニュートン力学のラグランジアンに一致することが確かめられた。ここにきて、定数 <math>m</math> が粒子の質量であることも確定する。 運動量 <math>\boldsymbol p</math> は<math>\frac{\partial L_{\mathrm{mat}}}{\partial \boldsymbol v}</math> であり、エネルギー <math>E</math> は <math>E = \boldsymbol p \cdot \boldsymbol v - L_{\mathrm{mat}}</math> と定義される。この式に従って計算すると、 <math>\begin{align}\boldsymbol p &= \frac{\partial L_{\mathrm{mat}}}{\partial \boldsymbol v} \\ &= -mc^2 \frac{\partial v^2}{\partial \boldsymbol v} \frac{d}{dv^2} \sqrt{1 - \frac{v^2}{c^2}} \\ &= -mc^2(2\boldsymbol v)\left( -\frac 1 2 \frac{1}{c^2} \frac{1}{\sqrt{1 - \frac{v^2}{c^2}}} \right) \\ &= \frac{m \boldsymbol v}{\sqrt{1 - \frac{v^2}{c^2}}} \end{align} </math> <math>\begin{align} E &= \boldsymbol p \cdot \boldsymbol v - L_{\mathrm{mat}} \\ &= \frac{mv^2}{\sqrt{1 - \frac{v^2}{c^2}}} + mc^2 \sqrt{1 - \frac{v^2}{c^2}} \\ &= \frac{mc^2}{\sqrt{1 - \frac{v^2}{c^2}}} \end{align} </math> となる。 === 4元運動量 === 4元運動量 <math>p^\mu</math> を <math>p^\mu = m\frac{dx^{\mu}}{d\tau}</math> として定義しよう。<math>d\tau = \sqrt{1 - \frac{v^2}{c^2}}dt</math> であることを考えると、 <math>p^\mu = \frac{m}{\sqrt{1 - \frac{v^2}{c^2}}} \frac{dx^\mu}{dt} </math> であるから、時間成分と空間成分を分けて書くと <math>p^\mu = \left(\frac{mc}{\sqrt{1 - \frac{v^2}{c^2}}} ,\frac{m\boldsymbol v}{\sqrt{1 - \frac{v^2}{c^2}}} \right) = \left(\frac E c ,\boldsymbol p\right).</math> ここで、 <math>dx^\mu dx_\mu = c^2 d\tau^2</math> の両辺を <math>d\tau ^2 </math> で割って <math>m^2</math> を掛けると <math>p^\mu p_\mu = m^2 c^2</math>が得られる。この式に4元運動量の成分を代入すると <math>E^2 = m^2c^4 + \boldsymbol p^2 c^2</math> を得る。 同じように、4元速度 <math>u^\mu </math> を定義することが出来る。 <math>u^\mu = \frac{dx^{\mu}}{d\tau} = \left(\frac{c}{\sqrt{1 - \frac{v^2}{c^2}}} ,\frac{\boldsymbol v}{\sqrt{1 - \frac{v^2}{c^2}}} \right) . </math> また、<math>u^\mu u_\mu = c^2. </math> == 電磁気学 == 電磁場は4元ベクトル <math>A_\mu</math> によって特徴づけられる。電磁場と相互作用する粒子の作用 <math>S_{\mathrm{int}}</math> は経験によれば <math>S_{\mathrm{int}} = -q \int_a^b A_\mu dx^\mu </math> である。ここで、 <math>q</math> は電荷と呼ばれる量である。電磁場 <math>A^\mu</math> <ref>4元ポテンシャルあるいは電磁ポテンシャルとも呼ばれる。</ref>の成分は、<math>A^\mu = \left(\frac \phi c, \boldsymbol A \right)</math> であり、<math>\phi</math> はスカラーポテンシャル、<math>\boldsymbol A</math> はベクトルポテンシャルと呼ばれる。 作用の時間成分と空間成分を分けて書くと <math>S_{\mathrm{int}} = q \int_a^b (-\phi dt + \boldsymbol A \cdot \boldsymbol dr) = q \int_a^b (-\phi + \boldsymbol A \cdot \boldsymbol v) dt. </math> 自由粒子の作用と合わせると、 <math>S_{\mathrm{mat}} + S_{\mathrm{int}} = \int_{t_a}^{t_b}\left(-mc^2 \sqrt{1 - \frac{v^2}{c^2}} - q\phi + q\boldsymbol A \cdot \boldsymbol v \right)dt</math> となる。この被積分関数が電磁場中の粒子のラグランジアン <math>L</math> である。 電磁場中の運動方程式を求めるためには、オイラーラグランジュ方程式 <math>\frac{d}{dt} \frac{\partial L}{\partial \boldsymbol v} = \frac{\partial L}{\partial \boldsymbol r}</math> を求めれば良い。 <math>\frac{\partial L}{\partial \boldsymbol v} = \frac{m\boldsymbol v}{\sqrt{1 - \frac{v^2}{c^2}}} + q \boldsymbol A = \boldsymbol p + q \boldsymbol A </math> <math>\frac{\partial L}{\partial \boldsymbol r} = q\nabla(\boldsymbol A \cdot \boldsymbol v) - q \nabla \phi = q(\boldsymbol v \cdot \nabla) \boldsymbol A + q \boldsymbol v \times (\nabla \times \boldsymbol A) - q \nabla \phi </math> また、<math>\frac{d \boldsymbol A}{d t} = \frac{\partial \boldsymbol A}{\partial t} + \sum_{i=1,2,3} \frac{dx^i}{dt}\frac{\partial \boldsymbol A}{\partial x^i} = \frac{\partial \boldsymbol A}{\partial t} + (\boldsymbol v \cdot \nabla)\boldsymbol A </math> である。 最終的に、オイラーラグランジュ方程式は <math>\frac{d \boldsymbol p}{dt} = -q\nabla \phi -q\frac{\partial \boldsymbol A}{\partial t} + q\boldsymbol v \times (\nabla \times \boldsymbol A) </math> となる。これが粒子の運動方程式である。第一項と第二項の電荷当たりにかかる力を電場 <math>\boldsymbol E</math> といい、第三項の速度に直交する部分を磁場 <math>\boldsymbol B </math> という。 <math>\boldsymbol E = -\nabla \phi -\frac{\partial \boldsymbol A}{\partial t}</math> <math>\boldsymbol B = \nabla \times \boldsymbol A</math> また、運動方程式は <math>\frac{d \boldsymbol p}{dt} = q(\boldsymbol E + \boldsymbol v \times \boldsymbol B) </math> となる。 == 参考文献 == * エリ・デ・ダンラウ、イェ・エム・リフシッツ著、恒藤敏彦他訳『場の古典論(原著第6版)』東京図書(1978) == 旧版 == {{進捗状況}} {{蔵書一覧}} * [[特殊相対論 はじめに|はじめに]] * [[特殊相対論 歴史的導入|歴史的導入]] * [[特殊相対論 テンソル|テンソル]] * 計算例 ** [[特殊相対論 時間の遅れ|時間の遅れ]] ** [[特殊相対論 ローレンツ収縮|ローレンツ収縮]] ** [[特殊相対論 速度の合成則|速度の合成則]] * [[特殊相対論 4元運動量|4元運動量]] <!-- E = mc^2 !!! --> * [[特殊相対論 運動方程式|運動方程式]] * [[特殊相対論 電磁気学への導入|電磁気学への導入]] {{DEFAULTSORT:とくしゆそうたいろん}} [[Category:特殊相対論|*]] {{NDC|421.2}} 0tlnrzfshdmlcdwz7lejc6pf484duf0 246665 246664 2024-04-13T15:48:57Z Nermer314 62933 wikitext text/x-wiki {{Pathnav|メインページ|自然科学|物理学|frame=1|small=1}} 本項は特殊相対論の解説です。特殊相対論は電磁気学、相対論的量子論、場の量子論、一般相対論など広範な物理学の基礎となる理論である。 == 原理 == '''光速度不変の原理''' 真空中の光の速度はどの慣性系から見ても一定である。 '''特殊相対性原理''' どの慣性系でも物理法則は同じ形式で表される。 == 世界間隔 == == ローレンツ変換 == 慣性系 <math>K</math> の座標を <math>ct,x</math>、 慣性系 <math>K'</math> の座標を <math>ct',x'</math> とする。<math>K'</math> は <math>K</math> に対して速度 <math>V</math> の一様な並進運動をしているとき、2つの慣性系の間の対応を求めよう。 まず、<math>ct',x'</math> は <math>ct,x</math> に関する一次関数でなくてはならない。なぜなら、二次以上の項が含まれていると、世界間隔が任意の慣性系で不変であるという条件 <math>c^2dt'^2 - dx'^2 = c^2dt^2 - dx^2</math> が満たされないからである。さらに、<math>ct',x'</math>の原点を適当に選ぶことで、定数項も0とすることができる。 また、<math>K'</math> で静止している物体について考えると明らかに <math>x'=\mathrm{const}.</math> この物体の位置を <math>K</math> で観察すると、 <math>x = Vt + \mathrm{const.}</math> すなわち、<math>x'</math> は <math>x - Vt</math> に比例して、その比例係数を <math>\gamma</math> とすると、 <math>x' = \gamma(x-Vt)</math> と表される。<math>ct' = \gamma(act + bx)</math> と置くと、 <math>cdt' = \gamma(acdt + bdx),\, dx' = \gamma(-Vdt + dx).</math> 世界間隔が慣性系で不変であるから、 <math>\begin{align} c^2dt'^2 - dx'^2 &= \gamma^2\{(acdt+bdx)^2 - (-Vdt + dx)^2\} \\ &= \gamma^2 \{(a^2c^2-V^2)dt^2 + (b^2-1)dx^2 + 2(abc+V)dtdx\} \\ &= c^2dt^2 - dx^2 \end{align}</math> すなわち、 <math>\begin{cases} \gamma^2 (a^2c^2-V^2) = c^2 \\ \gamma^2 (b^2-1) = -1 \\ abc+V=0 \end{cases}</math> 第三式を第二式に代入して、 <math>\gamma^2\left(a^2 - \frac{V^2}{c^2}\right) = a^2. </math> これを第一式と比較して <math>a=1.</math> 第三式より <math>b = -\frac V c .</math> 第二式より <math>\gamma = \frac{1}{\sqrt{1-\frac{V^2}{c^2}}}.</math>ここで、<math>\gamma,a</math> は正に選ばなくてはいけない。<math>\gamma</math> が負であるとすれば <math>x' = \gamma(x-Vt)</math> から <math>x</math> と <math>x'</math> が逆向きとなってしまう。それは慣性系 <math>K,K'</math> の設定と異なる。<math>a</math> も同じ理由である。 <math>\beta = \frac V c</math> とすると、ローレンツ変換は <math>\begin{pmatrix} ct' \\ x' \end{pmatrix} = \gamma \begin{pmatrix} 1 & -\beta \\ -\beta & 1 \end{pmatrix}\begin{pmatrix} ct \\ x \end{pmatrix}</math> と書かれる。 [[ファイル:Lt_hyperbolic_functions_2.svg|サムネイル|313x313ピクセル|ローレンツ変換の図示]] ローレンツ変換をまた別の方法で求めよう。ローレンツ変換を原点からの世界間隔 <math>s^2 = (ct)^2 -x^2</math> が変化しないミンコフスキー空間の回転として表してみる。<math>s^2</math> を正として <math>t>0</math> の部分は、 <math>ct = s \cosh \theta, \, x = s \sinh \theta</math> と表すことが出来る。この点を回転角 <math>-\psi</math> だけ回転させた点 <math>ct',x'</math> は、 <math>\begin{align} ct' &= s \cosh(\theta - \psi ) \\ &= s \cosh \theta \cosh \psi - s \sinh \theta \sinh \psi \\ &= ct \cosh \psi - x \sinh \psi \end{align}</math> <math>\begin{align} x' &= s \sinh(\theta - \psi ) \\ &= s \sinh \theta \cosh \psi - s \cosh \theta \sinh \psi \\ &= x \cosh \psi - ct \sinh \psi \end{align}</math> という変換になる。 行列で表すと、<math>\begin{pmatrix} ct' \\ x' \end{pmatrix} = \begin{pmatrix} \cosh \psi & -\sinh \psi \\ -\sinh \psi & \cosh \psi \end{pmatrix} \begin{pmatrix} ct \\ x \end{pmatrix}</math> である。前述の議論より、ローレンツ変換は線型変換だから、この変換が時空間全体に適用されると考えるべきである。実際に、<math>s^2</math> が正で <math>t<0</math> の部分については、<math>\theta \to \theta + \psi</math> として上の変換を得る。<math>s^2</math> が負で <math>x>0</math> の部分には、 <math>\theta \to \theta - \psi</math>、<math>x<0</math> の部分には、 <math>\theta \to \theta + \psi</math> と変換すれば良い。<math>K</math>系での原点 <math>x=0</math> は <math>K'</math> 系では、<math>ct' = ct \cosh \psi,\, x' = -ct \sinh \psi</math> である。二式を割って、<math>\tanh \psi =- \frac{x'}{ct'} = \frac V c.</math> ここで、<math>\frac{x'}{t'}</math> は <math>K'</math> での <math>K</math> の原点の速度に等しいから <math>-V</math> である。双曲線関数の公式 <math>1 - \tanh^2 \psi = \frac{1}{\cosh^2 \psi}</math>から、<math>\cosh \psi = \frac{1}{\sqrt{1-\frac{V^2}{c^2}}}, \, \sinh \psi = \tanh \psi \cosh \psi = \frac{\frac V c}{\sqrt{1-\frac{V^2}{c^2}}}</math> となる。 この結果は前述の結果と一致する。また、<math>\psi</math> はラピディティと呼ばれる。 === 速度の合成則 === 慣性系 <math>K</math> に対し、系 <math>K'</math> は速度 <math>V_1</math> の一様な並進運動を行っている。また、系 <math>K''</math> は <math>K'</math> に対して、速度 <math>V_2</math> の一様な並進運動を行っている。このとき、 <math>K''</math> は <math>K</math> から見てどのような運動を行っているだろうか? <math>\tanh \theta_1 = \frac{V_1}{c},\, \tanh \theta_2 = \frac{V_2}{c}</math> としてラピディティを導入すると、 <math>\begin{align} \begin{pmatrix} ct'' \\ x'' \end{pmatrix} &= \begin{pmatrix} \cosh \theta_2 & -\sinh \theta_2 \\ -\sinh \theta_2 & \cosh\theta_2 \end{pmatrix} \begin{pmatrix} ct' \\ x' \end{pmatrix} \\ &= \begin{pmatrix} \cosh \theta_2 & -\sinh \theta_2 \\ -\sinh \theta_2 & \cosh\theta_2 \end{pmatrix} \begin{pmatrix} \cosh \theta_1 & -\sinh \theta_1 \\ -\sinh \theta_1 & \cosh\theta_1 \end{pmatrix} \begin{pmatrix} ct \\ x \end{pmatrix} \\ &= \begin{pmatrix} \cosh (\theta_1 + \theta_2) & -\sinh (\theta_1 + \theta_2) \\ -\sinh (\theta_1 + \theta_2) & \cosh(\theta_1 + \theta_2) \end{pmatrix} \begin{pmatrix} ct \\ x \end{pmatrix}. \end{align} </math> すなわち、<math>K''</math> は <math>K</math> に対して、ラピディティ <math>\theta = \theta_1 + \theta_2</math> のローレンツ変換である。<math>K</math> から見た <math>K''</math> の速度 <math>\frac V c = \tanh \theta</math> を<math>V_1,V_2</math> で表すと、双曲線関数の加法定理 <math>\tanh (\theta_1 + \theta_2) = \frac{\tanh \theta_1 + \tanh \theta_2}{1 + \tanh \theta_1 \tanh \theta_2}</math> より、<math>\frac V c =\frac{\frac{V_1}{c} + \frac{V_2}{c}}{1 + \frac{V_1V_2}{c^2}}</math> である。もちろん、ラピディティを経由せずに速度の合成則を求めることも可能である。詳しくは[[特殊相対論 速度の合成則|速度の合成則]]を参照すること。 == 4元ベクトル == == 自由粒子の作用 == 特殊相対論的な自由粒子の作用 <math>S_{\mathrm{mat}}</math> を求めよう。特殊相対性原理より、それは慣性系の選択に依存しない量でなくてはいけない。すなわち、ローレンツ変換に対して不変でなくてはならない。世界間隔 <math>ds^2</math> はローレンツ変換に対して不変な量であるから、これを使って、 <math>S_{\mathrm{mat}} = -mc \int_a^b ds</math> のように書けるだろう。ここで、 <math>m</math> は粒子に固有の定数で、後にこれが質量であることを示す。 <math>S_{\mathrm{mat}} = -mc^2 \int_{t_a}^{t_b} \sqrt{1-\frac{v^2}{c^2}}dt</math> であるから、対応するラグランジアンは <math>L_{\mathrm{mat}} = -mc^2\sqrt{1-\frac{v^2}{c^2}}</math> である。ところで、ニュートン力学は特殊相対論の <math>v \ll c</math> とした極限の場合と考えられるので、 <math>L_{\mathrm{mat}}</math> は <math>v \ll c</math> の条件でニュートン力学の自由粒子のラグランジアンに一致するべきである。実際、 <math>L_{\mathrm{mat}} \approx -mc^2\left( 1 - \frac 1 2 \frac{v^2}{c^2} \right) = -mc^2 + \frac 1 2 mv^2</math> となる。第一項の定数項は無視して、ニュートン力学のラグランジアンに一致することが確かめられた。ここにきて、定数 <math>m</math> が粒子の質量であることも確定する。 運動量 <math>\boldsymbol p</math> は<math>\frac{\partial L_{\mathrm{mat}}}{\partial \boldsymbol v}</math> であり、エネルギー <math>E</math> は <math>E = \boldsymbol p \cdot \boldsymbol v - L_{\mathrm{mat}}</math> と定義される。この式に従って計算すると、 <math>\begin{align}\boldsymbol p &= \frac{\partial L_{\mathrm{mat}}}{\partial \boldsymbol v} \\ &= -mc^2 \frac{\partial v^2}{\partial \boldsymbol v} \frac{d}{dv^2} \sqrt{1 - \frac{v^2}{c^2}} \\ &= -mc^2(2\boldsymbol v)\left( -\frac 1 2 \frac{1}{c^2} \frac{1}{\sqrt{1 - \frac{v^2}{c^2}}} \right) \\ &= \frac{m \boldsymbol v}{\sqrt{1 - \frac{v^2}{c^2}}} \end{align} </math> <math>\begin{align} E &= \boldsymbol p \cdot \boldsymbol v - L_{\mathrm{mat}} \\ &= \frac{mv^2}{\sqrt{1 - \frac{v^2}{c^2}}} + mc^2 \sqrt{1 - \frac{v^2}{c^2}} \\ &= \frac{mc^2}{\sqrt{1 - \frac{v^2}{c^2}}} \end{align} </math> となる。 === 4元運動量 === 4元運動量 <math>p^\mu</math> を <math>p^\mu = m\frac{dx^{\mu}}{d\tau}</math> として定義しよう。<math>d\tau = \sqrt{1 - \frac{v^2}{c^2}}dt</math> であることを考えると、 <math>p^\mu = \frac{m}{\sqrt{1 - \frac{v^2}{c^2}}} \frac{dx^\mu}{dt} </math> であるから、時間成分と空間成分を分けて書くと <math>p^\mu = \left(\frac{mc}{\sqrt{1 - \frac{v^2}{c^2}}} ,\frac{m\boldsymbol v}{\sqrt{1 - \frac{v^2}{c^2}}} \right) = \left(\frac E c ,\boldsymbol p\right).</math> ここで、 <math>dx^\mu dx_\mu = c^2 d\tau^2</math> の両辺を <math>d\tau ^2 </math> で割って <math>m^2</math> を掛けると <math>p^\mu p_\mu = m^2 c^2</math>が得られる。この式に4元運動量の成分を代入すると <math>E^2 = m^2c^4 + \boldsymbol p^2 c^2</math> を得る。 同じように、4元速度 <math>u^\mu </math> を定義することが出来る。 <math>u^\mu = \frac{dx^{\mu}}{d\tau} = \left(\frac{c}{\sqrt{1 - \frac{v^2}{c^2}}} ,\frac{\boldsymbol v}{\sqrt{1 - \frac{v^2}{c^2}}} \right) . </math> また、<math>u^\mu u_\mu = c^2. </math> == 電磁気学 == 電磁場は4元ベクトル <math>A_\mu</math> によって特徴づけられる。電磁場と相互作用する粒子の作用 <math>S_{\mathrm{int}}</math> は経験によれば <math>S_{\mathrm{int}} = -q \int_a^b A_\mu dx^\mu </math> である。ここで、 <math>q</math> は電荷と呼ばれる量である。電磁場 <math>A^\mu</math> <ref>4元ポテンシャルあるいは電磁ポテンシャルとも呼ばれる。</ref>の成分は、<math>A^\mu = \left(\frac \phi c, \boldsymbol A \right)</math> であり、<math>\phi</math> はスカラーポテンシャル、<math>\boldsymbol A</math> はベクトルポテンシャルと呼ばれる。 作用の時間成分と空間成分を分けて書くと <math>S_{\mathrm{int}} = q \int_a^b (-\phi dt + \boldsymbol A \cdot \boldsymbol dr) = q \int_a^b (-\phi + \boldsymbol A \cdot \boldsymbol v) dt. </math> 自由粒子の作用と合わせると、 <math>S_{\mathrm{mat}} + S_{\mathrm{int}} = \int_{t_a}^{t_b}\left(-mc^2 \sqrt{1 - \frac{v^2}{c^2}} - q\phi + q\boldsymbol A \cdot \boldsymbol v \right)dt</math> となる。この被積分関数が電磁場中の粒子のラグランジアン <math>L</math> である。 電磁場中の運動方程式を求めるためには、オイラーラグランジュ方程式 <math>\frac{d}{dt} \frac{\partial L}{\partial \boldsymbol v} = \frac{\partial L}{\partial \boldsymbol r}</math> を求めれば良い。 <math>\frac{\partial L}{\partial \boldsymbol v} = \frac{m\boldsymbol v}{\sqrt{1 - \frac{v^2}{c^2}}} + q \boldsymbol A = \boldsymbol p + q \boldsymbol A </math> <math>\frac{\partial L}{\partial \boldsymbol r} = q\nabla(\boldsymbol A \cdot \boldsymbol v) - q \nabla \phi = q(\boldsymbol v \cdot \nabla) \boldsymbol A + q \boldsymbol v \times (\nabla \times \boldsymbol A) - q \nabla \phi </math> また、<math>\frac{d \boldsymbol A}{d t} = \frac{\partial \boldsymbol A}{\partial t} + \sum_{i=1,2,3} \frac{dx^i}{dt}\frac{\partial \boldsymbol A}{\partial x^i} = \frac{\partial \boldsymbol A}{\partial t} + (\boldsymbol v \cdot \nabla)\boldsymbol A </math> である。 最終的に、オイラーラグランジュ方程式は <math>\frac{d \boldsymbol p}{dt} = -q\nabla \phi -q\frac{\partial \boldsymbol A}{\partial t} + q\boldsymbol v \times (\nabla \times \boldsymbol A) </math> となる。これが粒子の運動方程式である。第一項と第二項の電荷当たりにかかる力を電場 <math>\boldsymbol E</math> といい、第三項の速度に直交する部分を磁場 <math>\boldsymbol B </math> という。 <math>\boldsymbol E = -\nabla \phi -\frac{\partial \boldsymbol A}{\partial t}</math> <math>\boldsymbol B = \nabla \times \boldsymbol A</math> また、運動方程式は <math>\frac{d \boldsymbol p}{dt} = q(\boldsymbol E + \boldsymbol v \times \boldsymbol B) </math> となる。 == 参考文献 == * エリ・デ・ランダウ、イェ・エム・リフシッツ著、恒藤敏彦他訳『場の古典論(原著第6版)』東京図書(1978) == 旧版 == {{進捗状況}} {{蔵書一覧}} * [[特殊相対論 はじめに|はじめに]] * [[特殊相対論 歴史的導入|歴史的導入]] * [[特殊相対論 テンソル|テンソル]] * 計算例 ** [[特殊相対論 時間の遅れ|時間の遅れ]] ** [[特殊相対論 ローレンツ収縮|ローレンツ収縮]] ** [[特殊相対論 速度の合成則|速度の合成則]] * [[特殊相対論 4元運動量|4元運動量]] <!-- E = mc^2 !!! --> * [[特殊相対論 運動方程式|運動方程式]] * [[特殊相対論 電磁気学への導入|電磁気学への導入]] {{DEFAULTSORT:とくしゆそうたいろん}} [[Category:特殊相対論|*]] {{NDC|421.2}} 6jgsis03z7whtk8dhj4cqseeqhhkmn8 246666 246665 2024-04-13T15:50:24Z Nermer314 62933 wikitext text/x-wiki {{Pathnav|メインページ|自然科学|物理学|frame=1|small=1}} 本項は特殊相対論の解説です。特殊相対論は電磁気学、相対論的量子論、場の量子論、一般相対論など広範な物理学の基礎となる理論である。 == 原理 == '''光速度不変の原理''' 真空中の光の速度はどの慣性系から見ても一定である。 '''特殊相対性原理''' どの慣性系でも物理法則は同じ形式で表される。 == 世界間隔 == == ローレンツ変換 == 慣性系 <math>K</math> の座標を <math>ct,x</math>、 慣性系 <math>K'</math> の座標を <math>ct',x'</math> とする。<math>K'</math> は <math>K</math> に対して速度 <math>V</math> の一様な並進運動をしているとき、2つの慣性系の間の対応を求めよう。 まず、<math>ct',x'</math> は <math>ct,x</math> に関する一次関数でなくてはならない。なぜなら、二次以上の項が含まれていると、世界間隔が任意の慣性系で不変であるという条件 <math>c^2dt'^2 - dx'^2 = c^2dt^2 - dx^2</math> が満たされないからである。さらに、<math>ct',x'</math>の原点を適当に選ぶことで、定数項も0とすることができる。 また、<math>K'</math> で静止している物体について考えると明らかに <math>x'=\mathrm{const}.</math> この物体の位置を <math>K</math> で観察すると、 <math>x = Vt + \mathrm{const.}</math> すなわち、<math>x'</math> は <math>x - Vt</math> に比例して、その比例係数を <math>\gamma</math> とすると、 <math>x' = \gamma(x-Vt)</math> と表される。<math>ct' = \gamma(act + bx)</math> と置くと、 <math>cdt' = \gamma(acdt + bdx),\, dx' = \gamma(-Vdt + dx).</math> 世界間隔が慣性系で不変であるから、 <math>\begin{align} c^2dt'^2 - dx'^2 &= \gamma^2\{(acdt+bdx)^2 - (-Vdt + dx)^2\} \\ &= \gamma^2 \{(a^2c^2-V^2)dt^2 + (b^2-1)dx^2 + 2(abc+V)dtdx\} \\ &= c^2dt^2 - dx^2 \end{align}</math> すなわち、 <math>\begin{cases} \gamma^2 (a^2c^2-V^2) = c^2 \\ \gamma^2 (b^2-1) = -1 \\ abc+V=0 \end{cases}</math> 第三式を第二式に代入して、 <math>\gamma^2\left(a^2 - \frac{V^2}{c^2}\right) = a^2. </math> これを第一式と比較して <math>a=1.</math> 第三式より <math>b = -\frac V c .</math> 第二式より <math>\gamma = \frac{1}{\sqrt{1-\frac{V^2}{c^2}}}.</math>ここで、<math>\gamma,a</math> は正に選ばなくてはいけない。<math>\gamma</math> が負であるとすれば <math>x' = \gamma(x-Vt)</math> から <math>x</math> と <math>x'</math> が逆向きとなってしまう。それは慣性系 <math>K,K'</math> の設定と異なる。<math>a</math> も同じ理由である。 <math>\beta = \frac V c</math> とすると、ローレンツ変換は <math>\begin{pmatrix} ct' \\ x' \end{pmatrix} = \gamma \begin{pmatrix} 1 & -\beta \\ -\beta & 1 \end{pmatrix}\begin{pmatrix} ct \\ x \end{pmatrix}</math> と書かれる。 [[ファイル:Lt_hyperbolic_functions_2.svg|サムネイル|313x313ピクセル|ローレンツ変換の図示]] ローレンツ変換をまた別の方法で求めよう。ローレンツ変換を原点からの世界間隔 <math>s^2 = (ct)^2 -x^2</math> が変化しないミンコフスキー空間の回転として表してみる。<math>s^2</math> を正として <math>t>0</math> の部分は、 <math>ct = s \cosh \theta, \, x = s \sinh \theta</math> と表すことが出来る。この点を回転角 <math>-\psi</math> だけ回転させた点 <math>ct',x'</math> は、 <math>\begin{align} ct' &= s \cosh(\theta - \psi ) \\ &= s \cosh \theta \cosh \psi - s \sinh \theta \sinh \psi \\ &= ct \cosh \psi - x \sinh \psi \end{align}</math> <math>\begin{align} x' &= s \sinh(\theta - \psi ) \\ &= s \sinh \theta \cosh \psi - s \cosh \theta \sinh \psi \\ &= x \cosh \psi - ct \sinh \psi \end{align}</math> という変換になる。 行列で表すと、<math>\begin{pmatrix} ct' \\ x' \end{pmatrix} = \begin{pmatrix} \cosh \psi & -\sinh \psi \\ -\sinh \psi & \cosh \psi \end{pmatrix} \begin{pmatrix} ct \\ x \end{pmatrix}</math> である。前述の議論より、ローレンツ変換は線型変換だから、この変換が時空間全体に適用されると考えるべきである。実際に、<math>s^2</math> が正で <math>t<0</math> の部分については、<math>\theta \to \theta + \psi</math> として上の変換を得る。<math>s^2</math> が負で <math>x>0</math> の部分には、 <math>\theta \to \theta - \psi</math>、<math>x<0</math> の部分には、 <math>\theta \to \theta + \psi</math> と変換すれば良い。<math>K</math>系での原点 <math>x=0</math> は <math>K'</math> 系では、<math>ct' = ct \cosh \psi,\, x' = -ct \sinh \psi</math> である。二式を割って、<math>\tanh \psi =- \frac{x'}{ct'} = \frac V c.</math> ここで、<math>\frac{x'}{t'}</math> は <math>K'</math> での <math>K</math> の原点の速度に等しいから <math>-V</math> である。双曲線関数の公式 <math>1 - \tanh^2 \psi = \frac{1}{\cosh^2 \psi}</math>から、<math>\cosh \psi = \frac{1}{\sqrt{1-\frac{V^2}{c^2}}}, \, \sinh \psi = \tanh \psi \cosh \psi = \frac{\frac V c}{\sqrt{1-\frac{V^2}{c^2}}}</math> となる。 この結果は前述の結果と一致する。また、<math>\psi</math> はラピディティと呼ばれる。 === 速度の合成則 === 慣性系 <math>K</math> に対し、系 <math>K'</math> は速度 <math>V_1</math> の一様な並進運動を行っている。また、系 <math>K''</math> は <math>K'</math> に対して、速度 <math>V_2</math> の一様な並進運動を行っている。このとき、 <math>K''</math> は <math>K</math> から見てどのような運動を行っているだろうか? <math>\tanh \theta_1 = \frac{V_1}{c},\, \tanh \theta_2 = \frac{V_2}{c}</math> としてラピディティを導入すると、 <math>\begin{align} \begin{pmatrix} ct'' \\ x'' \end{pmatrix} &= \begin{pmatrix} \cosh \theta_2 & -\sinh \theta_2 \\ -\sinh \theta_2 & \cosh\theta_2 \end{pmatrix} \begin{pmatrix} ct' \\ x' \end{pmatrix} \\ &= \begin{pmatrix} \cosh \theta_2 & -\sinh \theta_2 \\ -\sinh \theta_2 & \cosh\theta_2 \end{pmatrix} \begin{pmatrix} \cosh \theta_1 & -\sinh \theta_1 \\ -\sinh \theta_1 & \cosh\theta_1 \end{pmatrix} \begin{pmatrix} ct \\ x \end{pmatrix} \\ &= \begin{pmatrix} \cosh (\theta_1 + \theta_2) & -\sinh (\theta_1 + \theta_2) \\ -\sinh (\theta_1 + \theta_2) & \cosh(\theta_1 + \theta_2) \end{pmatrix} \begin{pmatrix} ct \\ x \end{pmatrix}. \end{align} </math> すなわち、<math>K''</math> は <math>K</math> に対して、ラピディティ <math>\theta = \theta_1 + \theta_2</math> のローレンツ変換である。<math>K</math> から見た <math>K''</math> の速度 <math>\frac V c = \tanh \theta</math> を<math>V_1,V_2</math> で表すと、双曲線関数の加法定理 <math>\tanh (\theta_1 + \theta_2) = \frac{\tanh \theta_1 + \tanh \theta_2}{1 + \tanh \theta_1 \tanh \theta_2}</math> より、<math>\frac V c =\frac{\frac{V_1}{c} + \frac{V_2}{c}}{1 + \frac{V_1V_2}{c^2}}</math> である。もちろん、ラピディティを経由せずに速度の合成則を求めることも可能である。詳しくは[[特殊相対論 速度の合成則|速度の合成則]]を参照すること。 == 4元ベクトル == == 自由粒子の作用 == 特殊相対論的な自由粒子の作用 <math>S_{\mathrm{mat}}</math> を求めよう。特殊相対性原理より、それは慣性系の選択に依存しない量でなくてはいけない。すなわち、ローレンツ変換に対して不変でなくてはならない。世界間隔 <math>ds^2</math> はローレンツ変換に対して不変な量であるから、これを使って、 <math>S_{\mathrm{mat}} = -mc \int_a^b ds</math> のように書けるだろう。ここで、 <math>m</math> は粒子に固有の定数で、後にこれが質量であることを示す。 <math>S_{\mathrm{mat}} = -mc^2 \int_{t_a}^{t_b} \sqrt{1-\frac{v^2}{c^2}}dt</math> であるから、対応するラグランジアンは <math>L_{\mathrm{mat}} = -mc^2\sqrt{1-\frac{v^2}{c^2}}</math> である。ところで、ニュートン力学は特殊相対論の <math>v \ll c</math> とした極限の場合と考えられるので、 <math>L_{\mathrm{mat}}</math> は <math>v \ll c</math> の条件でニュートン力学の自由粒子のラグランジアンに一致するべきである。実際、 <math>L_{\mathrm{mat}} \approx -mc^2\left( 1 - \frac 1 2 \frac{v^2}{c^2} \right) = -mc^2 + \frac 1 2 mv^2</math> となる。第一項の定数項は無視して、ニュートン力学のラグランジアンに一致することが確かめられた。ここにきて、定数 <math>m</math> が粒子の質量であることも確定する。 運動量 <math>\boldsymbol p</math> は<math>\frac{\partial L_{\mathrm{mat}}}{\partial \boldsymbol v}</math> であり、エネルギー <math>E</math> は <math>E = \boldsymbol p \cdot \boldsymbol v - L_{\mathrm{mat}}</math> と定義される。この式に従って計算すると、 <math>\begin{align}\boldsymbol p &= \frac{\partial L_{\mathrm{mat}}}{\partial \boldsymbol v} \\ &= -mc^2 \frac{\partial v^2}{\partial \boldsymbol v} \frac{d}{dv^2} \sqrt{1 - \frac{v^2}{c^2}} \\ &= -mc^2(2\boldsymbol v)\left( -\frac 1 2 \frac{1}{c^2} \frac{1}{\sqrt{1 - \frac{v^2}{c^2}}} \right) \\ &= \frac{m \boldsymbol v}{\sqrt{1 - \frac{v^2}{c^2}}} \end{align} </math> <math>\begin{align} E &= \boldsymbol p \cdot \boldsymbol v - L_{\mathrm{mat}} \\ &= \frac{mv^2}{\sqrt{1 - \frac{v^2}{c^2}}} + mc^2 \sqrt{1 - \frac{v^2}{c^2}} \\ &= \frac{mc^2}{\sqrt{1 - \frac{v^2}{c^2}}} \end{align} </math> となる。 === 4元運動量 === 4元運動量 <math>p^\mu</math> を <math>p^\mu = m\frac{dx^{\mu}}{d\tau}</math> として定義しよう。<math>d\tau = \sqrt{1 - \frac{v^2}{c^2}}dt</math> であることを考えると、 <math>p^\mu = \frac{m}{\sqrt{1 - \frac{v^2}{c^2}}} \frac{dx^\mu}{dt} </math> であるから、時間成分と空間成分を分けて書くと <math>p^\mu = \left(\frac{mc}{\sqrt{1 - \frac{v^2}{c^2}}} ,\frac{m\boldsymbol v}{\sqrt{1 - \frac{v^2}{c^2}}} \right) = \left(\frac E c ,\boldsymbol p\right).</math> ここで、 <math>dx^\mu dx_\mu = c^2 d\tau^2</math> の両辺を <math>d\tau ^2 </math> で割って <math>m^2</math> を掛けると <math>p^\mu p_\mu = m^2 c^2</math>が得られる。この式に4元運動量の成分を代入すると <math>E^2 = m^2c^4 + \boldsymbol p^2 c^2</math> を得る。 同じように、4元速度 <math>u^\mu </math> を定義することが出来る。 <math>u^\mu = \frac{dx^{\mu}}{d\tau} = \left(\frac{c}{\sqrt{1 - \frac{v^2}{c^2}}} ,\frac{\boldsymbol v}{\sqrt{1 - \frac{v^2}{c^2}}} \right) . </math> また、<math>u^\mu u_\mu = c^2. </math> == 電磁気学 == 電磁場は4元ベクトル <math>A_\mu</math> によって特徴づけられる。電磁場と相互作用する粒子の作用 <math>S_{\mathrm{int}}</math> は経験によれば <math>S_{\mathrm{int}} = -q \int_a^b A_\mu dx^\mu </math> である。ここで、 <math>q</math> は電荷と呼ばれる量である。電磁場 <math>A^\mu</math> <ref>4元ポテンシャルあるいは電磁ポテンシャルとも呼ばれる。</ref>の成分は、<math>A^\mu = \left(\frac \phi c, \boldsymbol A \right)</math> であり、<math>\phi</math> はスカラーポテンシャル、<math>\boldsymbol A</math> はベクトルポテンシャルと呼ばれる。 作用の時間成分と空間成分を分けて書くと <math>S_{\mathrm{int}} = q \int_a^b (-\phi dt + \boldsymbol A \cdot \boldsymbol dr) = q \int_a^b (-\phi + \boldsymbol A \cdot \boldsymbol v) dt. </math> 自由粒子の作用と合わせると、 <math>S_{\mathrm{mat}} + S_{\mathrm{int}} = \int_{t_a}^{t_b}\left(-mc^2 \sqrt{1 - \frac{v^2}{c^2}} - q\phi + q\boldsymbol A \cdot \boldsymbol v \right)dt</math> となる。この被積分関数が電磁場中の粒子のラグランジアン <math>L</math> である。 電磁場中の運動方程式を求めるためには、オイラーラグランジュ方程式 <math>\frac{d}{dt} \frac{\partial L}{\partial \boldsymbol v} = \frac{\partial L}{\partial \boldsymbol r}</math> を求めれば良い。 <math>\frac{\partial L}{\partial \boldsymbol v} = \frac{m\boldsymbol v}{\sqrt{1 - \frac{v^2}{c^2}}} + q \boldsymbol A = \boldsymbol p + q \boldsymbol A </math> <math>\frac{\partial L}{\partial \boldsymbol r} = q\nabla(\boldsymbol A \cdot \boldsymbol v) - q \nabla \phi = q(\boldsymbol v \cdot \nabla) \boldsymbol A + q \boldsymbol v \times (\nabla \times \boldsymbol A) - q \nabla \phi </math> また、<math>\frac{d \boldsymbol A}{d t} = \frac{\partial \boldsymbol A}{\partial t} + \sum_{i=1,2,3} \frac{dx^i}{dt}\frac{\partial \boldsymbol A}{\partial x^i} = \frac{\partial \boldsymbol A}{\partial t} + (\boldsymbol v \cdot \nabla)\boldsymbol A </math> である。 最終的に、オイラーラグランジュ方程式は <math>\frac{d \boldsymbol p}{dt} = -q\nabla \phi -q\frac{\partial \boldsymbol A}{\partial t} + q\boldsymbol v \times (\nabla \times \boldsymbol A) </math> となる。これが粒子の運動方程式である。第一項と第二項の電荷当たりにかかる力を電場 <math>\boldsymbol E</math> といい、第三項の速度に直交する部分を磁場 <math>\boldsymbol B </math> という。 <math>\boldsymbol E = -\nabla \phi -\frac{\partial \boldsymbol A}{\partial t}</math> <math>\boldsymbol B = \nabla \times \boldsymbol A</math> また、運動方程式は <math>\frac{d \boldsymbol p}{dt} = q(\boldsymbol E + \boldsymbol v \times \boldsymbol B) </math> となる。 == 参考文献 == * エリ・デ・ランダウ、イェ・エム・リフシッツ著、恒藤敏彦他訳『場の古典論(原著第6版)』東京図書(1978) == 旧版 == {{進捗状況}} {{蔵書一覧}} * [[特殊相対論 はじめに|はじめに]] * [[特殊相対論 歴史的導入|歴史的導入]] * [[特殊相対論 テンソル|テンソル]] * 計算例 ** [[特殊相対論 時間の遅れ|時間の遅れ]] ** [[特殊相対論 ローレンツ収縮|ローレンツ収縮]] ** [[特殊相対論 速度の合成則|速度の合成則]] * [[特殊相対論 4元運動量|4元運動量]] <!-- E = mc^2 !!! --> * [[特殊相対論 運動方程式|運動方程式]] * [[特殊相対論 電磁気学への導入|電磁気学への導入]] == 脚注 == {{DEFAULTSORT:とくしゆそうたいろん}} [[Category:特殊相対論|*]] {{NDC|421.2}} gd7hok3qodimi1ps951cjl6zrwl66jn 246679 246666 2024-04-14T03:45:43Z Nermer314 62933 wikitext text/x-wiki {{Pathnav|メインページ|自然科学|物理学|frame=1|small=1}} 本項は特殊相対論の解説です。特殊相対論は電磁気学、相対論的量子論、場の量子論、一般相対論など広範な物理学の基礎となる理論である。 == 原理 == '''光速度不変の原理''' 真空中の光の速度はどの慣性系から見ても一定である。 '''特殊相対性原理''' どの慣性系でも物理法則は同じ形式で表される。 == 世界間隔 == == ローレンツ変換 == 慣性系 <math>K</math> の座標を <math>ct,x</math>、 慣性系 <math>K'</math> の座標を <math>ct',x'</math> とする。<math>K'</math> は <math>K</math> に対して速度 <math>V</math> の一様な並進運動をしているとき、2つの慣性系の間の対応を求めよう。 まず、<math>ct',x'</math> は <math>ct,x</math> に関する一次関数でなくてはならない。なぜなら、二次以上の項が含まれていると、世界間隔が任意の慣性系で不変であるという条件 <math>c^2dt'^2 - dx'^2 = c^2dt^2 - dx^2</math> が満たされないからである。さらに、<math>ct',x'</math>の原点を適当に選ぶことで、定数項も0とすることができる。 また、<math>K'</math> で静止している物体について考えると明らかに <math>x'=\mathrm{const}.</math> この物体の位置を <math>K</math> で観察すると、 <math>x = Vt + \mathrm{const.}</math> すなわち、<math>x'</math> は <math>x - Vt</math> に比例して、その比例係数を <math>\gamma</math> とすると、 <math>x' = \gamma(x-Vt)</math> と表される。<math>ct' = \gamma(act + bx)</math> と置くと、 <math>cdt' = \gamma(acdt + bdx),\, dx' = \gamma(-Vdt + dx).</math> 世界間隔が慣性系で不変であるから、 <math>\begin{align} c^2dt'^2 - dx'^2 &= \gamma^2\{(acdt+bdx)^2 - (-Vdt + dx)^2\} \\ &= \gamma^2 \{(a^2c^2-V^2)dt^2 + (b^2-1)dx^2 + 2(abc+V)dtdx\} \\ &= c^2dt^2 - dx^2 \end{align}</math> すなわち、 <math>\begin{cases} \gamma^2 (a^2c^2-V^2) = c^2 \\ \gamma^2 (b^2-1) = -1 \\ abc+V=0 \end{cases}</math> 第三式を第二式に代入して、 <math>\gamma^2\left(a^2 - \frac{V^2}{c^2}\right) = a^2. </math> これを第一式と比較して <math>a=1.</math> 第三式より <math>b = -\frac V c .</math> 第二式より <math>\gamma = \frac{1}{\sqrt{1-\frac{V^2}{c^2}}}.</math>ここで、<math>\gamma,a</math> は正に選ばなくてはいけない。<math>\gamma</math> が負であるとすれば <math>x' = \gamma(x-Vt)</math> から <math>x</math> と <math>x'</math> が逆向きとなってしまう。それは慣性系 <math>K,K'</math> の設定と異なる。<math>a</math> も同じ理由である。 <math>\beta = \frac V c</math> とすると、ローレンツ変換は <math>\begin{pmatrix} ct' \\ x' \end{pmatrix} = \gamma \begin{pmatrix} 1 & -\beta \\ -\beta & 1 \end{pmatrix}\begin{pmatrix} ct \\ x \end{pmatrix}</math> と書かれる。 [[ファイル:Lt_hyperbolic_functions_2.svg|サムネイル|313x313ピクセル|ローレンツ変換の図示]] ローレンツ変換をまた別の方法で求めよう。ローレンツ変換を原点からの世界間隔 <math>s^2 = (ct)^2 -x^2</math> が変化しないミンコフスキー空間の回転として表してみる。<math>s^2</math> を正として <math>t>0</math> の部分は、 <math>ct = s \cosh \theta, \, x = s \sinh \theta</math> と表すことが出来る。この点を回転角 <math>-\psi</math> だけ回転させた点 <math>ct',x'</math> は、 <math>\begin{align} ct' &= s \cosh(\theta - \psi ) \\ &= s \cosh \theta \cosh \psi - s \sinh \theta \sinh \psi \\ &= ct \cosh \psi - x \sinh \psi \end{align}</math> <math>\begin{align} x' &= s \sinh(\theta - \psi ) \\ &= s \sinh \theta \cosh \psi - s \cosh \theta \sinh \psi \\ &= x \cosh \psi - ct \sinh \psi \end{align}</math> という変換になる。 行列で表すと、<math>\begin{pmatrix} ct' \\ x' \end{pmatrix} = \begin{pmatrix} \cosh \psi & -\sinh \psi \\ -\sinh \psi & \cosh \psi \end{pmatrix} \begin{pmatrix} ct \\ x \end{pmatrix}</math> である。前述の議論より、ローレンツ変換は線型変換だから、この変換が時空間全体に適用されると考えるべきである。実際に、<math>s^2</math> が正で <math>t<0</math> の部分については、<math>\theta \to \theta + \psi</math> として上の変換を得る。<math>s^2</math> が負で <math>x>0</math> の部分には、 <math>\theta \to \theta - \psi</math>、<math>x<0</math> の部分には、 <math>\theta \to \theta + \psi</math> と変換すれば良い。<math>K</math>系での原点 <math>x=0</math> は <math>K'</math> 系では、<math>ct' = ct \cosh \psi,\, x' = -ct \sinh \psi</math> である。二式を割って、<math>\tanh \psi =- \frac{x'}{ct'} = \frac V c.</math> ここで、<math>\frac{x'}{t'}</math> は <math>K'</math> での <math>K</math> の原点の速度に等しいから <math>-V</math> である。双曲線関数の公式 <math>1 - \tanh^2 \psi = \frac{1}{\cosh^2 \psi}</math>から、<math>\cosh \psi = \frac{1}{\sqrt{1-\frac{V^2}{c^2}}}, \, \sinh \psi = \tanh \psi \cosh \psi = \frac{\frac V c}{\sqrt{1-\frac{V^2}{c^2}}}</math> となる。 この結果は前述の結果と一致する。また、<math>\psi</math> はラピディティと呼ばれる。 === 速度の合成則 === 慣性系 <math>K</math> に対し、系 <math>K'</math> は速度 <math>V_1</math> の一様な並進運動を行っている。また、系 <math>K''</math> は <math>K'</math> に対して、速度 <math>V_2</math> の一様な並進運動を行っている。このとき、 <math>K''</math> は <math>K</math> から見てどのような運動を行っているだろうか? <math>\tanh \theta_1 = \frac{V_1}{c},\, \tanh \theta_2 = \frac{V_2}{c}</math> としてラピディティを導入すると、 <math>\begin{align} \begin{pmatrix} ct'' \\ x'' \end{pmatrix} &= \begin{pmatrix} \cosh \theta_2 & -\sinh \theta_2 \\ -\sinh \theta_2 & \cosh\theta_2 \end{pmatrix} \begin{pmatrix} ct' \\ x' \end{pmatrix} \\ &= \begin{pmatrix} \cosh \theta_2 & -\sinh \theta_2 \\ -\sinh \theta_2 & \cosh\theta_2 \end{pmatrix} \begin{pmatrix} \cosh \theta_1 & -\sinh \theta_1 \\ -\sinh \theta_1 & \cosh\theta_1 \end{pmatrix} \begin{pmatrix} ct \\ x \end{pmatrix} \\ &= \begin{pmatrix} \cosh (\theta_1 + \theta_2) & -\sinh (\theta_1 + \theta_2) \\ -\sinh (\theta_1 + \theta_2) & \cosh(\theta_1 + \theta_2) \end{pmatrix} \begin{pmatrix} ct \\ x \end{pmatrix}. \end{align} </math> すなわち、<math>K''</math> は <math>K</math> に対して、ラピディティ <math>\theta = \theta_1 + \theta_2</math> のローレンツ変換である。<math>K</math> から見た <math>K''</math> の速度 <math>\frac V c = \tanh \theta</math> を<math>V_1,V_2</math> で表すと、双曲線関数の加法定理 <math>\tanh (\theta_1 + \theta_2) = \frac{\tanh \theta_1 + \tanh \theta_2}{1 + \tanh \theta_1 \tanh \theta_2}</math> より、<math>\frac V c =\frac{\frac{V_1}{c} + \frac{V_2}{c}}{1 + \frac{V_1V_2}{c^2}}</math> である。もちろん、ラピディティを経由せずに速度の合成則を求めることも可能である。詳しくは[[特殊相対論 速度の合成則|速度の合成則]]を参照すること。 == 4元ベクトル == == 自由粒子の作用 == 特殊相対論的な自由粒子の作用 <math>S_{\mathrm{mat}}</math> を求めよう。特殊相対性原理より、それは慣性系の選択に依存しない量でなくてはいけない。すなわち、ローレンツ変換に対して不変でなくてはならない。世界間隔 <math>ds^2</math> はローレンツ変換に対して不変な量であるから、これを使って、 <math>S_{\mathrm{mat}} = -mc \int_a^b ds</math> のように書けるだろう。ここで、 <math>m</math> は粒子に固有の定数で、後にこれが質量であることを示す。 <math>S_{\mathrm{mat}} = -mc^2 \int_{t_a}^{t_b} \sqrt{1-\frac{v^2}{c^2}}dt</math> であるから、対応するラグランジアンは <math>L_{\mathrm{mat}} = -mc^2\sqrt{1-\frac{v^2}{c^2}}</math> である。ところで、ニュートン力学は特殊相対論の <math>v \ll c</math> とした極限の場合と考えられるので、 <math>L_{\mathrm{mat}}</math> は <math>v \ll c</math> の条件でニュートン力学の自由粒子のラグランジアンに一致するべきである。実際、 <math>L_{\mathrm{mat}} \approx -mc^2\left( 1 - \frac 1 2 \frac{v^2}{c^2} \right) = -mc^2 + \frac 1 2 mv^2</math> となる。第一項の定数項は無視して、ニュートン力学のラグランジアンに一致することが確かめられた。ここにきて、定数 <math>m</math> が粒子の質量であることも確定する。 運動量 <math>\boldsymbol p</math> は<math>\frac{\partial L_{\mathrm{mat}}}{\partial \boldsymbol v}</math> であり、エネルギー <math>E</math> は <math>E = \boldsymbol p \cdot \boldsymbol v - L_{\mathrm{mat}}</math> と定義される。この式に従って計算すると、 <math>\begin{align}\boldsymbol p &= \frac{\partial L_{\mathrm{mat}}}{\partial \boldsymbol v} \\ &= -mc^2 \frac{\partial v^2}{\partial \boldsymbol v} \frac{d}{dv^2} \sqrt{1 - \frac{v^2}{c^2}} \\ &= -mc^2(2\boldsymbol v)\left( -\frac 1 2 \frac{1}{c^2} \frac{1}{\sqrt{1 - \frac{v^2}{c^2}}} \right) \\ &= \frac{m \boldsymbol v}{\sqrt{1 - \frac{v^2}{c^2}}} \end{align} </math> <math>\begin{align} E &= \boldsymbol p \cdot \boldsymbol v - L_{\mathrm{mat}} \\ &= \frac{mv^2}{\sqrt{1 - \frac{v^2}{c^2}}} + mc^2 \sqrt{1 - \frac{v^2}{c^2}} \\ &= \frac{mc^2}{\sqrt{1 - \frac{v^2}{c^2}}} \end{align} </math> となる。エネルギー <math>E</math> は粒子の速度が0の場合でも0にならず、<math>E=mc^2</math> が残る。これを静止エネルギーという。 === 4元運動量 === 4元運動量 <math>p^\mu</math> を <math>p^\mu = m\frac{dx^{\mu}}{d\tau}</math> として定義しよう。<math>d\tau = \sqrt{1 - \frac{v^2}{c^2}}dt</math> であることを考えると、 <math>p^\mu = \frac{m}{\sqrt{1 - \frac{v^2}{c^2}}} \frac{dx^\mu}{dt} </math> であるから、時間成分と空間成分を分けて書くと <math>p^\mu = \left(\frac{mc}{\sqrt{1 - \frac{v^2}{c^2}}} ,\frac{m\boldsymbol v}{\sqrt{1 - \frac{v^2}{c^2}}} \right) = \left(\frac E c ,\boldsymbol p\right).</math> ここで、 <math>dx^\mu dx_\mu = c^2 d\tau^2</math> の両辺を <math>d\tau ^2 </math> で割って <math>m^2</math> を掛けると <math>p^\mu p_\mu = m^2 c^2</math>が得られる。この式に4元運動量の成分を代入すると <math>E^2 = m^2c^4 + \boldsymbol p^2 c^2</math> を得る。 同じように、4元速度 <math>u^\mu </math> を定義することが出来る。 <math>u^\mu = \frac{dx^{\mu}}{d\tau} = \left(\frac{c}{\sqrt{1 - \frac{v^2}{c^2}}} ,\frac{\boldsymbol v}{\sqrt{1 - \frac{v^2}{c^2}}} \right) . </math> また、<math>u^\mu u_\mu = c^2. </math> == 電磁気学 == 電磁場は4元ベクトル <math>A_\mu</math> によって特徴づけられる。電磁場と相互作用する粒子の作用 <math>S_{\mathrm{int}}</math> は経験によれば <math>S_{\mathrm{int}} = -q \int_a^b A_\mu dx^\mu </math> である。ここで、 <math>q</math> は電荷と呼ばれる量である。電磁場 <math>A^\mu</math> <ref>4元ポテンシャルあるいは電磁ポテンシャルとも呼ばれる。</ref>の成分は、<math>A^\mu = \left(\frac \phi c, \boldsymbol A \right)</math> であり、<math>\phi</math> はスカラーポテンシャル、<math>\boldsymbol A</math> はベクトルポテンシャルと呼ばれる。 作用の時間成分と空間成分を分けて書くと <math>S_{\mathrm{int}} = q \int_a^b (-\phi dt + \boldsymbol A \cdot \boldsymbol dr) = q \int_a^b (-\phi + \boldsymbol A \cdot \boldsymbol v) dt. </math> 自由粒子の作用と合わせると、 <math>S_{\mathrm{mat}} + S_{\mathrm{int}} = \int_{t_a}^{t_b}\left(-mc^2 \sqrt{1 - \frac{v^2}{c^2}} - q\phi + q\boldsymbol A \cdot \boldsymbol v \right)dt</math> となる。この被積分関数が電磁場中の粒子のラグランジアン <math>L</math> である。 電磁場中の運動方程式を求めるためには、オイラーラグランジュ方程式 <math>\frac{d}{dt} \frac{\partial L}{\partial \boldsymbol v} = \frac{\partial L}{\partial \boldsymbol r}</math> を求めれば良い。 <math>\frac{\partial L}{\partial \boldsymbol v} = \frac{m\boldsymbol v}{\sqrt{1 - \frac{v^2}{c^2}}} + q \boldsymbol A = \boldsymbol p + q \boldsymbol A </math> <math>\frac{\partial L}{\partial \boldsymbol r} = q\nabla(\boldsymbol A \cdot \boldsymbol v) - q \nabla \phi = q(\boldsymbol v \cdot \nabla) \boldsymbol A + q \boldsymbol v \times (\nabla \times \boldsymbol A) - q \nabla \phi </math> また、<math>\frac{d \boldsymbol A}{d t} = \frac{\partial \boldsymbol A}{\partial t} + \sum_{i=1,2,3} \frac{dx^i}{dt}\frac{\partial \boldsymbol A}{\partial x^i} = \frac{\partial \boldsymbol A}{\partial t} + (\boldsymbol v \cdot \nabla)\boldsymbol A </math> である。 最終的に、オイラーラグランジュ方程式は <math>\frac{d \boldsymbol p}{dt} = -q\nabla \phi -q\frac{\partial \boldsymbol A}{\partial t} + q\boldsymbol v \times (\nabla \times \boldsymbol A) </math> となる。これが粒子の運動方程式である。第一項と第二項の電荷当たりにかかる力を電場 <math>\boldsymbol E</math> といい、第三項の速度に直交する部分を磁場 <math>\boldsymbol B </math> という。 <math>\boldsymbol E = -\nabla \phi -\frac{\partial \boldsymbol A}{\partial t}</math> <math>\boldsymbol B = \nabla \times \boldsymbol A</math> また、運動方程式は <math>\frac{d \boldsymbol p}{dt} = q(\boldsymbol E + \boldsymbol v \times \boldsymbol B) </math> となり右辺はローレンツ力と呼ばれる。 == 参考文献 == * エリ・デ・ランダウ、イェ・エム・リフシッツ著、恒藤敏彦他訳『場の古典論(原著第6版)』東京図書(1978) == 旧版 == {{進捗状況}} {{蔵書一覧}} * [[特殊相対論 はじめに|はじめに]] * [[特殊相対論 歴史的導入|歴史的導入]] * [[特殊相対論 テンソル|テンソル]] * 計算例 ** [[特殊相対論 時間の遅れ|時間の遅れ]] ** [[特殊相対論 ローレンツ収縮|ローレンツ収縮]] ** [[特殊相対論 速度の合成則|速度の合成則]] * [[特殊相対論 4元運動量|4元運動量]] <!-- E = mc^2 !!! --> * [[特殊相対論 運動方程式|運動方程式]] * [[特殊相対論 電磁気学への導入|電磁気学への導入]] == 脚注 == {{DEFAULTSORT:とくしゆそうたいろん}} [[Category:特殊相対論|*]] {{NDC|421.2}} aks980d9nugwwojkd7bhys1u8y6hgt5 246681 246679 2024-04-14T05:32:07Z Nermer314 62933 wikitext text/x-wiki {{Pathnav|メインページ|自然科学|物理学|frame=1|small=1}} 本項は特殊相対論の解説です。特殊相対論は電磁気学、相対論的量子論、場の量子論、一般相対論など広範な物理学の基礎となる理論である。 == 原理 == '''光速度不変の原理''' 真空中の光の速度はどの慣性系から見ても一定である。 '''特殊相対性原理''' どの慣性系でも物理法則は同じ形式で表される。 == 世界間隔 == == ローレンツ変換 == 慣性系 <math>K</math> の座標を <math>ct,x</math>、 慣性系 <math>K'</math> の座標を <math>ct',x'</math> とする。<math>K'</math> は <math>K</math> に対して速度 <math>V</math> の一様な並進運動をしているとき、2つの慣性系の間の対応を求めよう。 まず、<math>ct',x'</math> は <math>ct,x</math> に関する一次関数でなくてはならない。なぜなら、二次以上の項が含まれていると、世界間隔が任意の慣性系で不変であるという条件 <math>c^2dt'^2 - dx'^2 = c^2dt^2 - dx^2</math> が満たされないからである。さらに、<math>ct',x'</math>の原点を適当に選ぶことで、定数項も0とすることができる。 また、<math>K'</math> で静止している物体について考えると明らかに <math>x'=\mathrm{const}.</math> この物体の位置を <math>K</math> で観察すると、 <math>x = Vt + \mathrm{const.}</math> すなわち、<math>x'</math> は <math>x - Vt</math> に比例して、その比例係数を <math>\gamma</math> とすると、 <math>x' = \gamma(x-Vt)</math> と表される。<math>ct' = \gamma(act + bx)</math> と置くと、 <math>cdt' = \gamma(acdt + bdx),\, dx' = \gamma(-Vdt + dx).</math> 世界間隔が慣性系で不変であるから、 <math>\begin{align} c^2dt'^2 - dx'^2 &= \gamma^2\{(acdt+bdx)^2 - (-Vdt + dx)^2\} \\ &= \gamma^2 \{(a^2c^2-V^2)dt^2 + (b^2-1)dx^2 + 2(abc+V)dtdx\} \\ &= c^2dt^2 - dx^2 \end{align}</math> すなわち、 <math>\begin{cases} \gamma^2 (a^2c^2-V^2) = c^2 \\ \gamma^2 (b^2-1) = -1 \\ abc+V=0 \end{cases}</math> 第三式を第二式に代入して、 <math>\gamma^2\left(a^2 - \frac{V^2}{c^2}\right) = a^2. </math> これを第一式と比較して <math>a=1.</math> 第三式より <math>b = -\frac V c .</math> 第二式より <math>\gamma = \frac{1}{\sqrt{1-\frac{V^2}{c^2}}}.</math>ここで、<math>\gamma,a</math> は正に選ばなくてはいけない。<math>\gamma</math> が負であるとすれば <math>x' = \gamma(x-Vt)</math> から <math>x</math> と <math>x'</math> が逆向きとなってしまう。それは慣性系 <math>K,K'</math> の設定と異なる。<math>a</math> も同じ理由である。 <math>\beta = \frac V c</math> とすると、ローレンツ変換は <math>\begin{pmatrix} ct' \\ x' \end{pmatrix} = \gamma \begin{pmatrix} 1 & -\beta \\ -\beta & 1 \end{pmatrix}\begin{pmatrix} ct \\ x \end{pmatrix}</math> と書かれる。 [[ファイル:Lt_hyperbolic_functions_2.svg|サムネイル|313x313ピクセル|ローレンツ変換の図示]] ローレンツ変換をまた別の方法で求めよう。ローレンツ変換を原点からの世界間隔 <math>s^2 = (ct)^2 -x^2</math> が変化しないミンコフスキー空間の回転として表してみる。<math>s^2</math> を正として <math>t>0</math> の部分は、 <math>ct = s \cosh \theta, \, x = s \sinh \theta</math> と表すことが出来る。この点を回転角 <math>-\psi</math> だけ回転させた点 <math>ct',x'</math> は、 <math>\begin{align} ct' &= s \cosh(\theta - \psi ) \\ &= s \cosh \theta \cosh \psi - s \sinh \theta \sinh \psi \\ &= ct \cosh \psi - x \sinh \psi \end{align}</math> <math>\begin{align} x' &= s \sinh(\theta - \psi ) \\ &= s \sinh \theta \cosh \psi - s \cosh \theta \sinh \psi \\ &= x \cosh \psi - ct \sinh \psi \end{align}</math> という変換になる。 行列で表すと、<math>\begin{pmatrix} ct' \\ x' \end{pmatrix} = \begin{pmatrix} \cosh \psi & -\sinh \psi \\ -\sinh \psi & \cosh \psi \end{pmatrix} \begin{pmatrix} ct \\ x \end{pmatrix}</math> である。前述の議論より、ローレンツ変換は線型変換だから、この変換が時空間全体に適用されると考えるべきである。実際に、<math>s^2</math> が正で <math>t<0</math> の部分については、<math>\theta \to \theta + \psi</math> として上の変換を得る。<math>s^2</math> が負で <math>x>0</math> の部分には、 <math>\theta \to \theta - \psi</math>、<math>x<0</math> の部分には、 <math>\theta \to \theta + \psi</math> と変換すれば良い。<math>K</math>系での原点 <math>x=0</math> は <math>K'</math> 系では、<math>ct' = ct \cosh \psi,\, x' = -ct \sinh \psi</math> である。二式を割って、<math>\tanh \psi =- \frac{x'}{ct'} = \frac V c.</math> ここで、<math>\frac{x'}{t'}</math> は <math>K'</math> での <math>K</math> の原点の速度に等しいから <math>-V</math> である。双曲線関数の公式 <math>1 - \tanh^2 \psi = \frac{1}{\cosh^2 \psi}</math>から、<math>\cosh \psi = \frac{1}{\sqrt{1-\frac{V^2}{c^2}}}, \, \sinh \psi = \tanh \psi \cosh \psi = \frac{\frac V c}{\sqrt{1-\frac{V^2}{c^2}}}</math> となる。 この結果は前述の結果と一致する。また、<math>\psi</math> はラピディティと呼ばれる。 === 速度の合成則 === 慣性系 <math>K</math> に対し、系 <math>K'</math> は速度 <math>V_1</math> の一様な並進運動を行っている。また、系 <math>K''</math> は <math>K'</math> に対して、速度 <math>V_2</math> の一様な並進運動を行っている。このとき、 <math>K''</math> は <math>K</math> から見てどのような運動を行っているだろうか? <math>\tanh \theta_1 = \frac{V_1}{c},\, \tanh \theta_2 = \frac{V_2}{c}</math> としてラピディティを導入すると、 <math>\begin{align} \begin{pmatrix} ct'' \\ x'' \end{pmatrix} &= \begin{pmatrix} \cosh \theta_2 & -\sinh \theta_2 \\ -\sinh \theta_2 & \cosh\theta_2 \end{pmatrix} \begin{pmatrix} ct' \\ x' \end{pmatrix} \\ &= \begin{pmatrix} \cosh \theta_2 & -\sinh \theta_2 \\ -\sinh \theta_2 & \cosh\theta_2 \end{pmatrix} \begin{pmatrix} \cosh \theta_1 & -\sinh \theta_1 \\ -\sinh \theta_1 & \cosh\theta_1 \end{pmatrix} \begin{pmatrix} ct \\ x \end{pmatrix} \\ &= \begin{pmatrix} \cosh (\theta_1 + \theta_2) & -\sinh (\theta_1 + \theta_2) \\ -\sinh (\theta_1 + \theta_2) & \cosh(\theta_1 + \theta_2) \end{pmatrix} \begin{pmatrix} ct \\ x \end{pmatrix}. \end{align} </math> すなわち、<math>K''</math> は <math>K</math> に対して、ラピディティ <math>\theta = \theta_1 + \theta_2</math> のローレンツ変換である。<math>K</math> から見た <math>K''</math> の速度 <math>\frac V c = \tanh \theta</math> を<math>V_1,V_2</math> で表すと、双曲線関数の加法定理 <math>\tanh (\theta_1 + \theta_2) = \frac{\tanh \theta_1 + \tanh \theta_2}{1 + \tanh \theta_1 \tanh \theta_2}</math> より、<math>\frac V c =\frac{\frac{V_1}{c} + \frac{V_2}{c}}{1 + \frac{V_1V_2}{c^2}}</math> である。もちろん、ラピディティを経由せずに速度の合成則を求めることも可能である。詳しくは[[特殊相対論 速度の合成則|速度の合成則]]を参照すること。 == 4元ベクトル == == 自由粒子の作用 == 特殊相対論的な自由粒子の作用 <math>S_{\mathrm{mat}}</math> を求めよう。特殊相対性原理より、それは慣性系の選択に依存しない量でなくてはいけない。すなわち、ローレンツ変換に対して不変でなくてはならない。世界間隔 <math>ds^2</math> はローレンツ変換に対して不変な量であるから、これを使って、 <math>S_{\mathrm{mat}} = -mc \int_a^b ds</math> のように書けるだろう。ここで、 <math>m</math> は粒子に固有の定数で、後にこれが質量であることを示す。 <math>S_{\mathrm{mat}} = -mc^2 \int_{t_a}^{t_b} \sqrt{1-\frac{v^2}{c^2}}dt</math> であるから、対応するラグランジアンは <math>L_{\mathrm{mat}} = -mc^2\sqrt{1-\frac{v^2}{c^2}}</math> である。ところで、ニュートン力学は特殊相対論の <math>v \ll c</math> とした極限の場合と考えられるので、 <math>L_{\mathrm{mat}}</math> は <math>v \ll c</math> の条件でニュートン力学の自由粒子のラグランジアンに一致するべきである。実際、 <math>L_{\mathrm{mat}} \approx -mc^2\left( 1 - \frac 1 2 \frac{v^2}{c^2} \right) = -mc^2 + \frac 1 2 mv^2</math> となる。第一項の定数項は無視して、ニュートン力学のラグランジアンに一致することが確かめられた。ここにきて、定数 <math>m</math> が粒子の質量であることも確定する。 運動量 <math>\boldsymbol p</math> は<math>\frac{\partial L_{\mathrm{mat}}}{\partial \boldsymbol v}</math> であり、エネルギー <math>E</math> は <math>E = \boldsymbol p \cdot \boldsymbol v - L_{\mathrm{mat}}</math> と定義される。この式に従って計算すると、 <math>\begin{align}\boldsymbol p &= \frac{\partial L_{\mathrm{mat}}}{\partial \boldsymbol v} \\ &= -mc^2 \frac{\partial v^2}{\partial \boldsymbol v} \frac{d}{dv^2} \sqrt{1 - \frac{v^2}{c^2}} \\ &= -mc^2(2\boldsymbol v)\left( -\frac 1 2 \frac{1}{c^2} \frac{1}{\sqrt{1 - \frac{v^2}{c^2}}} \right) \\ &= \frac{m \boldsymbol v}{\sqrt{1 - \frac{v^2}{c^2}}} \end{align} </math> <math>\begin{align} E &= \boldsymbol p \cdot \boldsymbol v - L_{\mathrm{mat}} \\ &= \frac{mv^2}{\sqrt{1 - \frac{v^2}{c^2}}} + mc^2 \sqrt{1 - \frac{v^2}{c^2}} \\ &= \frac{mc^2}{\sqrt{1 - \frac{v^2}{c^2}}} \end{align} </math> となる。エネルギー <math>E</math> は粒子の速度が0の場合でも0にならず、<math>E=mc^2</math> が残る。これを静止エネルギーという。 === 4元運動量 === 4元運動量 <math>p^\mu</math> を <math>p^\mu = m\frac{dx^{\mu}}{d\tau}</math> として定義しよう。<math>d\tau = \sqrt{1 - \frac{v^2}{c^2}}dt</math> であることを考えると、 <math>p^\mu = \frac{m}{\sqrt{1 - \frac{v^2}{c^2}}} \frac{dx^\mu}{dt} </math> であるから、時間成分と空間成分を分けて書くと <math>p^\mu = \left(\frac{mc}{\sqrt{1 - \frac{v^2}{c^2}}} ,\frac{m\boldsymbol v}{\sqrt{1 - \frac{v^2}{c^2}}} \right) = \left(\frac E c ,\boldsymbol p\right).</math> ここで、 <math>dx^\mu dx_\mu = c^2 d\tau^2</math> の両辺を <math>d\tau ^2 </math> で割って <math>m^2</math> を掛けると <math>p^\mu p_\mu = m^2 c^2</math>が得られる。この式に4元運動量の成分を代入すると <math>E^2 = m^2c^4 + \boldsymbol p^2 c^2</math> を得る。 同じように、4元速度 <math>u^\mu </math> を定義することが出来る。 <math>u^\mu = \frac{dx^{\mu}}{d\tau} = \left(\frac{c}{\sqrt{1 - \frac{v^2}{c^2}}} ,\frac{\boldsymbol v}{\sqrt{1 - \frac{v^2}{c^2}}} \right) . </math> また、<math>u^\mu u_\mu = c^2. </math> == 電磁気学 == 粒子の作用はローレンツ不変な形式でなくてはならない。粒子の世界線に沿ったスカラー <math>P</math> の積分と4元ベクトル <math>Q_\mu</math> の線積分 <math>S = \int_a^b P ds + \int_a^b Q_\mu dx^\mu</math> はこの条件を満たす。自由粒子については <math>P = -mc,\, Q_\mu = 0</math> なのであった。 電磁場と相互作用する粒子の作用 <math>S_{\mathrm{int}}</math> は、<math>P=0, Q_\mu = -qA_\mu</math> とした <math>S_{\mathrm{int}} = -q \int_a^b A_\mu dx^\mu </math> である。4元ベクトル <math>A_\mu</math> は電磁場(あるいは4元ポテンシャル、電磁ポテンシャル)と呼ばれ、 <math>q</math> は電荷と呼ばれる量である。電磁場 <math>A^\mu</math> の成分は、<math>A^\mu = \left(\frac \phi c, \boldsymbol A \right)</math> であり、<math>\phi</math> はスカラーポテンシャル、<math>\boldsymbol A</math> はベクトルポテンシャルと呼ばれる。 作用の時間成分と空間成分を分けて書くと <math>S_{\mathrm{int}} = q \int_a^b (-\phi dt + \boldsymbol A \cdot \boldsymbol dr) = q \int_a^b (-\phi + \boldsymbol A \cdot \boldsymbol v) dt. </math> 自由粒子の作用と合わせると、 <math>S_{\mathrm{mat}} + S_{\mathrm{int}} = \int_{t_a}^{t_b}\left(-mc^2 \sqrt{1 - \frac{v^2}{c^2}} - q\phi + q\boldsymbol A \cdot \boldsymbol v \right)dt</math> となる。この被積分関数が電磁場中の粒子のラグランジアン <math>L</math> である。 電磁場中の運動方程式を求めるためには、オイラーラグランジュ方程式 <math>\frac{d}{dt} \frac{\partial L}{\partial \boldsymbol v} = \frac{\partial L}{\partial \boldsymbol r}</math> を求めれば良い。 <math>\frac{\partial L}{\partial \boldsymbol v} = \frac{m\boldsymbol v}{\sqrt{1 - \frac{v^2}{c^2}}} + q \boldsymbol A = \boldsymbol p + q \boldsymbol A </math> <math>\frac{\partial L}{\partial \boldsymbol r} = q\nabla(\boldsymbol A \cdot \boldsymbol v) - q \nabla \phi = q(\boldsymbol v \cdot \nabla) \boldsymbol A + q \boldsymbol v \times (\nabla \times \boldsymbol A) - q \nabla \phi </math> また、<math>\frac{d \boldsymbol A}{d t} = \frac{\partial \boldsymbol A}{\partial t} + \sum_{i=1,2,3} \frac{dx^i}{dt}\frac{\partial \boldsymbol A}{\partial x^i} = \frac{\partial \boldsymbol A}{\partial t} + (\boldsymbol v \cdot \nabla)\boldsymbol A </math> である。 最終的に、オイラーラグランジュ方程式は <math>\frac{d \boldsymbol p}{dt} = -q\nabla \phi -q\frac{\partial \boldsymbol A}{\partial t} + q\boldsymbol v \times (\nabla \times \boldsymbol A) </math> となる。これが粒子の運動方程式である。第一項と第二項の電荷当たりにかかる力を電場 <math>\boldsymbol E</math> といい、第三項の速度に直交する部分を磁場 <math>\boldsymbol B </math> という。 <math>\boldsymbol E = -\nabla \phi -\frac{\partial \boldsymbol A}{\partial t}</math> <math>\boldsymbol B = \nabla \times \boldsymbol A</math> また、運動方程式は <math>\frac{d \boldsymbol p}{dt} = q(\boldsymbol E + \boldsymbol v \times \boldsymbol B) </math> となり右辺はローレンツ力と呼ばれる。 == 参考文献 == * エリ・デ・ランダウ、イェ・エム・リフシッツ著、恒藤敏彦他訳『場の古典論(原著第6版)』東京図書(1978) == 旧版 == {{進捗状況}} {{蔵書一覧}} * [[特殊相対論 はじめに|はじめに]] * [[特殊相対論 歴史的導入|歴史的導入]] * [[特殊相対論 テンソル|テンソル]] * 計算例 ** [[特殊相対論 時間の遅れ|時間の遅れ]] ** [[特殊相対論 ローレンツ収縮|ローレンツ収縮]] ** [[特殊相対論 速度の合成則|速度の合成則]] * [[特殊相対論 4元運動量|4元運動量]] <!-- E = mc^2 !!! --> * [[特殊相対論 運動方程式|運動方程式]] * [[特殊相対論 電磁気学への導入|電磁気学への導入]] {{DEFAULTSORT:とくしゆそうたいろん}} [[Category:特殊相対論|*]] {{NDC|421.2}} f0orw39q2vffxiq4uwdfeuvg3u0lgxe 246694 246681 2024-04-14T09:37:30Z Nermer314 62933 wikitext text/x-wiki {{Pathnav|メインページ|自然科学|物理学|frame=1|small=1}} 本項は特殊相対論の解説です。特殊相対論は電磁気学、相対論的量子論、場の量子論、一般相対論など広範な物理学の基礎となる理論である。 == 原理 == '''光速度不変の原理''' 真空中の光の速度はどの慣性系から見ても一定である。 '''特殊相対性原理''' どの慣性系でも物理法則は同じ形式で表される。 == 世界間隔 == == ローレンツ変換 == 慣性系 <math>K</math> の座標を <math>ct,x</math>、 慣性系 <math>K'</math> の座標を <math>ct',x'</math> とする。<math>K'</math> は <math>K</math> に対して速度 <math>V</math> の一様な並進運動をしているとき、2つの慣性系の間の対応を求めよう。 まず、<math>ct',x'</math> は <math>ct,x</math> に関する一次関数でなくてはならない。なぜなら、二次以上の項が含まれていると、世界間隔が任意の慣性系で不変であるという条件 <math>c^2dt'^2 - dx'^2 = c^2dt^2 - dx^2</math> が満たされないからである。さらに、<math>ct',x'</math>の原点を適当に選ぶことで、定数項も0とすることができる。 また、<math>K'</math> で静止している物体について考えると明らかに <math>x'=\mathrm{const}.</math> この物体の位置を <math>K</math> で観察すると、 <math>x = Vt + \mathrm{const.}</math> すなわち、<math>x'</math> は <math>x - Vt</math> に比例して、その比例係数を <math>\gamma</math> とすると、 <math>x' = \gamma(x-Vt)</math> と表される。<math>ct' = \gamma(act + bx)</math> と置くと、 <math>cdt' = \gamma(acdt + bdx),\, dx' = \gamma(-Vdt + dx).</math> 世界間隔が慣性系で不変であるから、 <math>\begin{align} c^2dt'^2 - dx'^2 &= \gamma^2\{(acdt+bdx)^2 - (-Vdt + dx)^2\} \\ &= \gamma^2 \{(a^2c^2-V^2)dt^2 + (b^2-1)dx^2 + 2(abc+V)dtdx\} \\ &= c^2dt^2 - dx^2 \end{align}</math> すなわち、 <math>\begin{cases} \gamma^2 (a^2c^2-V^2) = c^2 \\ \gamma^2 (b^2-1) = -1 \\ abc+V=0 \end{cases}</math> 第三式を第二式に代入して、 <math>\gamma^2\left(a^2 - \frac{V^2}{c^2}\right) = a^2. </math> これを第一式と比較して <math>a=1.</math> 第三式より <math>b = -\frac V c .</math> 第二式より <math>\gamma = \frac{1}{\sqrt{1-\frac{V^2}{c^2}}}.</math>ここで、<math>\gamma,a</math> は正に選ばなくてはいけない。<math>\gamma</math> が負であるとすれば <math>x' = \gamma(x-Vt)</math> から <math>x</math> と <math>x'</math> が逆向きとなってしまう。それは慣性系 <math>K,K'</math> の設定と異なる。<math>a</math> も同じ理由である。 <math>\beta = \frac V c</math> とすると、ローレンツ変換は <math>\begin{pmatrix} ct' \\ x' \end{pmatrix} = \gamma \begin{pmatrix} 1 & -\beta \\ -\beta & 1 \end{pmatrix}\begin{pmatrix} ct \\ x \end{pmatrix}</math> と書かれる。 [[ファイル:Lt_hyperbolic_functions_2.svg|サムネイル|313x313ピクセル|ローレンツ変換の図示]] ローレンツ変換をまた別の方法で求めよう。ローレンツ変換を原点からの世界間隔 <math>s^2 = (ct)^2 -x^2</math> が変化しないミンコフスキー空間の回転として表してみる。<math>s^2</math> を正として <math>t>0</math> の部分は、 <math>ct = s \cosh \theta, \, x = s \sinh \theta</math> と表すことが出来る。この点を回転角 <math>-\psi</math> だけ回転させた点 <math>ct',x'</math> は、 <math>\begin{align} ct' &= s \cosh(\theta - \psi ) \\ &= s \cosh \theta \cosh \psi - s \sinh \theta \sinh \psi \\ &= ct \cosh \psi - x \sinh \psi \end{align}</math> <math>\begin{align} x' &= s \sinh(\theta - \psi ) \\ &= s \sinh \theta \cosh \psi - s \cosh \theta \sinh \psi \\ &= x \cosh \psi - ct \sinh \psi \end{align}</math> という変換になる。 行列で表すと、<math>\begin{pmatrix} ct' \\ x' \end{pmatrix} = \begin{pmatrix} \cosh \psi & -\sinh \psi \\ -\sinh \psi & \cosh \psi \end{pmatrix} \begin{pmatrix} ct \\ x \end{pmatrix}</math> である。前述の議論より、ローレンツ変換は線型変換だから、この変換が時空間全体に適用されると考えるべきである。実際に、<math>s^2</math> が正で <math>t<0</math> の部分については、<math>\theta \to \theta + \psi</math> として上の変換を得る。<math>s^2</math> が負で <math>x>0</math> の部分には、 <math>\theta \to \theta - \psi</math>、<math>x<0</math> の部分には、 <math>\theta \to \theta + \psi</math> と変換すれば良い。<math>K</math>系での原点 <math>x=0</math> は <math>K'</math> 系では、<math>ct' = ct \cosh \psi,\, x' = -ct \sinh \psi</math> である。二式を割って、<math>\tanh \psi =- \frac{x'}{ct'} = \frac V c.</math> ここで、<math>\frac{x'}{t'}</math> は <math>K'</math> での <math>K</math> の原点の速度に等しいから <math>-V</math> である。双曲線関数の公式 <math>1 - \tanh^2 \psi = \frac{1}{\cosh^2 \psi}</math>から、<math>\cosh \psi = \frac{1}{\sqrt{1-\frac{V^2}{c^2}}}, \, \sinh \psi = \tanh \psi \cosh \psi = \frac{\frac V c}{\sqrt{1-\frac{V^2}{c^2}}}</math> となる。 この結果は前述の結果と一致する。また、<math>\psi</math> はラピディティと呼ばれる。 === 速度の合成則 === 慣性系 <math>K</math> に対し、系 <math>K'</math> は速度 <math>V_1</math> の一様な並進運動を行っている。また、系 <math>K''</math> は <math>K'</math> に対して、速度 <math>V_2</math> の一様な並進運動を行っている。このとき、 <math>K''</math> は <math>K</math> から見てどのような運動を行っているだろうか? <math>\tanh \theta_1 = \frac{V_1}{c},\, \tanh \theta_2 = \frac{V_2}{c}</math> としてラピディティを導入すると、 <math>\begin{align} \begin{pmatrix} ct'' \\ x'' \end{pmatrix} &= \begin{pmatrix} \cosh \theta_2 & -\sinh \theta_2 \\ -\sinh \theta_2 & \cosh\theta_2 \end{pmatrix} \begin{pmatrix} ct' \\ x' \end{pmatrix} \\ &= \begin{pmatrix} \cosh \theta_2 & -\sinh \theta_2 \\ -\sinh \theta_2 & \cosh\theta_2 \end{pmatrix} \begin{pmatrix} \cosh \theta_1 & -\sinh \theta_1 \\ -\sinh \theta_1 & \cosh\theta_1 \end{pmatrix} \begin{pmatrix} ct \\ x \end{pmatrix} \\ &= \begin{pmatrix} \cosh (\theta_1 + \theta_2) & -\sinh (\theta_1 + \theta_2) \\ -\sinh (\theta_1 + \theta_2) & \cosh(\theta_1 + \theta_2) \end{pmatrix} \begin{pmatrix} ct \\ x \end{pmatrix}. \end{align} </math> すなわち、<math>K''</math> は <math>K</math> に対して、ラピディティ <math>\theta = \theta_1 + \theta_2</math> のローレンツ変換である。<math>K</math> から見た <math>K''</math> の速度 <math>\frac V c = \tanh \theta</math> を<math>V_1,V_2</math> で表すと、双曲線関数の加法定理 <math>\tanh (\theta_1 + \theta_2) = \frac{\tanh \theta_1 + \tanh \theta_2}{1 + \tanh \theta_1 \tanh \theta_2}</math> より、<math>\frac V c =\frac{\frac{V_1}{c} + \frac{V_2}{c}}{1 + \frac{V_1V_2}{c^2}}</math> である。もちろん、ラピディティを経由せずに速度の合成則を求めることも可能である。詳しくは[[特殊相対論 速度の合成則|速度の合成則]]を参照すること。 == 4元ベクトル == == 自由粒子の作用 == 特殊相対論的な自由粒子の作用 <math>S_{\mathrm{mat}}</math> を求めよう。特殊相対性原理より、それは慣性系の選択に依存しない量でなくてはいけない。すなわち、ローレンツ変換に対して不変でなくてはならない。世界間隔 <math>ds^2</math> はローレンツ変換に対して不変な量であるから、これを使って、 <math>S_{\mathrm{mat}} = -mc \int_a^b ds</math> のように書けるだろう。ここで、 <math>m</math> は粒子に固有の定数で、後にこれが質量であることを示す。 <math>S_{\mathrm{mat}} = -mc^2 \int_{t_a}^{t_b} \sqrt{1-\frac{v^2}{c^2}}dt</math> であるから、対応するラグランジアンは <math>L_{\mathrm{mat}} = -mc^2\sqrt{1-\frac{v^2}{c^2}}</math> である。ところで、ニュートン力学は特殊相対論の <math>v \ll c</math> とした極限の場合と考えられるので、 <math>L_{\mathrm{mat}}</math> は <math>v \ll c</math> の条件でニュートン力学の自由粒子のラグランジアンに一致するべきである。実際、 <math>L_{\mathrm{mat}} \approx -mc^2\left( 1 - \frac 1 2 \frac{v^2}{c^2} \right) = -mc^2 + \frac 1 2 mv^2</math> となる。第一項の定数項は無視して、ニュートン力学のラグランジアンに一致することが確かめられた。ここにきて、定数 <math>m</math> が粒子の質量であることも確定する。 運動量 <math>\boldsymbol p</math> は<math>\frac{\partial L_{\mathrm{mat}}}{\partial \boldsymbol v}</math> であり、エネルギー <math>E</math> は <math>E = \boldsymbol p \cdot \boldsymbol v - L_{\mathrm{mat}}</math> と定義される。この式に従って計算すると、 <math>\begin{align}\boldsymbol p &= \frac{\partial L_{\mathrm{mat}}}{\partial \boldsymbol v} \\ &= -mc^2 \frac{\partial v^2}{\partial \boldsymbol v} \frac{d}{dv^2} \sqrt{1 - \frac{v^2}{c^2}} \\ &= -mc^2(2\boldsymbol v)\left( -\frac 1 2 \frac{1}{c^2} \frac{1}{\sqrt{1 - \frac{v^2}{c^2}}} \right) \\ &= \frac{m \boldsymbol v}{\sqrt{1 - \frac{v^2}{c^2}}} \end{align} </math> <math>\begin{align} E &= \boldsymbol p \cdot \boldsymbol v - L_{\mathrm{mat}} \\ &= \frac{mv^2}{\sqrt{1 - \frac{v^2}{c^2}}} + mc^2 \sqrt{1 - \frac{v^2}{c^2}} \\ &= \frac{mc^2}{\sqrt{1 - \frac{v^2}{c^2}}} \end{align} </math> となる。エネルギー <math>E</math> は粒子の速度が0の場合でも0にならず、<math>E=mc^2</math> が残る。これを静止エネルギーという。 === 4元運動量 === 4元運動量 <math>p^\mu</math> を <math>p^\mu = m\frac{dx^{\mu}}{d\tau}</math> として定義しよう。<math>d\tau = \sqrt{1 - \frac{v^2}{c^2}}dt</math> であることを考えると、 <math>p^\mu = \frac{m}{\sqrt{1 - \frac{v^2}{c^2}}} \frac{dx^\mu}{dt} </math> であるから、時間成分と空間成分を分けて書くと <math>p^\mu = \left(\frac{mc}{\sqrt{1 - \frac{v^2}{c^2}}} ,\frac{m\boldsymbol v}{\sqrt{1 - \frac{v^2}{c^2}}} \right) = \left(\frac E c ,\boldsymbol p\right).</math> ここで、 <math>dx^\mu dx_\mu = c^2 d\tau^2</math> の両辺を <math>d\tau ^2 </math> で割って <math>m^2</math> を掛けると <math>p^\mu p_\mu = m^2 c^2</math>が得られる。この式に4元運動量の成分を代入すると <math>E^2 = m^2c^4 + \boldsymbol p^2 c^2</math> を得る。 同じように、4元速度 <math>u^\mu </math> を定義することが出来る。 <math>u^\mu = \frac{dx^{\mu}}{d\tau} = \left(\frac{c}{\sqrt{1 - \frac{v^2}{c^2}}} ,\frac{\boldsymbol v}{\sqrt{1 - \frac{v^2}{c^2}}} \right) . </math> また、<math>u^\mu u_\mu = c^2. </math> == 電磁気学 == 粒子の作用はローレンツ不変な形式でなくてはならない。粒子の世界線に沿ったスカラー <math>P</math> の積分と4元ベクトル <math>Q_\mu</math> の線積分 <math>S = \int_a^b P ds + \int_a^b Q_\mu dx^\mu</math> はこの条件を満たす。自由粒子については <math>P = -mc,\, Q_\mu = 0</math> なのであった。 電磁場と相互作用する粒子の作用 <math>S_{\mathrm{int}}</math> は、<math>P=0, Q_\mu = -qA_\mu</math> とした <math>S_{\mathrm{int}} = -q \int_a^b A_\mu dx^\mu </math> である。4元ベクトル <math>A_\mu</math> は電磁場(あるいは4元ポテンシャル、電磁ポテンシャル)と呼ばれ、 <math>q</math> は電荷と呼ばれる量である。電磁場 <math>A^\mu</math> の成分は、<math>A^\mu = \left(\frac \phi c, \boldsymbol A \right)</math> であり、<math>\phi</math> はスカラーポテンシャル、<math>\boldsymbol A</math> はベクトルポテンシャルと呼ばれる。 作用の時間成分と空間成分を分けて書くと <math>S_{\mathrm{int}} = q \int_a^b (-\phi dt + \boldsymbol A \cdot \boldsymbol dr) = q \int_a^b (-\phi + \boldsymbol A \cdot \boldsymbol v) dt. </math> 自由粒子の作用と合わせると、 <math>S_{\mathrm{mat}} + S_{\mathrm{int}} = \int_{t_a}^{t_b}\left(-mc^2 \sqrt{1 - \frac{v^2}{c^2}} - q\phi + q\boldsymbol A \cdot \boldsymbol v \right)dt</math> となる。この被積分関数が電磁場中の粒子のラグランジアン <math>L</math> である。 電磁場中の運動方程式を求めるためには、オイラーラグランジュ方程式 <math>\frac{d}{dt} \frac{\partial L}{\partial \boldsymbol v} = \frac{\partial L}{\partial \boldsymbol r}</math> を求めれば良い。 <math>\frac{\partial L}{\partial \boldsymbol v} = \frac{m\boldsymbol v}{\sqrt{1 - \frac{v^2}{c^2}}} + q \boldsymbol A = \boldsymbol p + q \boldsymbol A </math> <math>\frac{\partial L}{\partial \boldsymbol r} = q\nabla(\boldsymbol A \cdot \boldsymbol v) - q \nabla \phi = q(\boldsymbol v \cdot \nabla) \boldsymbol A + q \boldsymbol v \times (\nabla \times \boldsymbol A) - q \nabla \phi </math> また、<math>\frac{d \boldsymbol A}{d t} = \frac{\partial \boldsymbol A}{\partial t} + \sum_{i=1,2,3} \frac{dx^i}{dt}\frac{\partial \boldsymbol A}{\partial x^i} = \frac{\partial \boldsymbol A}{\partial t} + (\boldsymbol v \cdot \nabla)\boldsymbol A </math> である。 最終的に、オイラーラグランジュ方程式は <math>\frac{d \boldsymbol p}{dt} = -q\nabla \phi -q\frac{\partial \boldsymbol A}{\partial t} + q\boldsymbol v \times (\nabla \times \boldsymbol A) </math> となる。これが粒子の運動方程式である。第一項と第二項の電荷当たりにかかる力を電場 <math>\boldsymbol E</math> といい、第三項の速度に直交する部分を磁場 <math>\boldsymbol B </math> という。 <math>\boldsymbol E = -\nabla \phi -\frac{\partial \boldsymbol A}{\partial t}</math> <math>\boldsymbol B = \nabla \times \boldsymbol A</math> また、運動方程式は <math>\frac{d \boldsymbol p}{dt} = q(\boldsymbol E + \boldsymbol v \times \boldsymbol B) </math> となり右辺はローレンツ力と呼ばれる。 電場と磁場の定義より <math>\nabla \times \boldsymbol E = \nabla\times \nabla \phi - \frac{\partial}{\partial t} \nabla \times \boldsymbol A = -\frac{\partial \boldsymbol B}{\partial t}</math> <math>\nabla \cdot \boldsymbol B = \nabla \cdot \nabla \times \boldsymbol A = 0</math> である。これでマクスウェルの方程式のうち二式を得る。 === ゲージ変換 === 任意の関数 <math>\chi</math> について、 <math>A'_\mu = A_\mu - \frac{\partial \chi}{\partial x^\mu}</math> と変換しても、 <math>\boldsymbol E,\boldsymbol B</math> は変化しない。この変換をゲージ変換という。 == 参考文献 == * エリ・デ・ランダウ、イェ・エム・リフシッツ著、恒藤敏彦他訳『場の古典論(原著第6版)』東京図書(1978) == 旧版 == {{進捗状況}} {{蔵書一覧}} * [[特殊相対論 はじめに|はじめに]] * [[特殊相対論 歴史的導入|歴史的導入]] * [[特殊相対論 テンソル|テンソル]] * 計算例 ** [[特殊相対論 時間の遅れ|時間の遅れ]] ** [[特殊相対論 ローレンツ収縮|ローレンツ収縮]] ** [[特殊相対論 速度の合成則|速度の合成則]] * [[特殊相対論 4元運動量|4元運動量]] <!-- E = mc^2 !!! --> * [[特殊相対論 運動方程式|運動方程式]] * [[特殊相対論 電磁気学への導入|電磁気学への導入]] {{DEFAULTSORT:とくしゆそうたいろん}} [[Category:特殊相対論|*]] {{NDC|421.2}} oq7j6yqe9l8a4laplldgzejpatulyda 246698 246694 2024-04-14T11:32:35Z Nermer314 62933 wikitext text/x-wiki {{Pathnav|メインページ|自然科学|物理学|frame=1|small=1}} 本項は特殊相対論の解説です。特殊相対論は電磁気学、相対論的量子論、場の量子論、一般相対論など広範な物理学の基礎となる理論である。 == 原理 == '''光速度不変の原理''' 真空中の光の速度はどの慣性系から見ても一定である。 '''特殊相対性原理''' どの慣性系でも物理法則は同じ形式で表される。 == 世界間隔 == == ローレンツ変換 == 慣性系 <math>K</math> の座標を <math>ct,x</math>、 慣性系 <math>K'</math> の座標を <math>ct',x'</math> とする。<math>K'</math> は <math>K</math> に対して速度 <math>V</math> の一様な並進運動をしているとき、2つの慣性系の間の対応を求めよう。 まず、<math>ct',x'</math> は <math>ct,x</math> に関する一次関数でなくてはならない。なぜなら、二次以上の項が含まれていると、世界間隔が任意の慣性系で不変であるという条件 <math>c^2dt'^2 - dx'^2 = c^2dt^2 - dx^2</math> が満たされないからである。さらに、<math>ct',x'</math>の原点を適当に選ぶことで、定数項も0とすることができる。 また、<math>K'</math> で静止している物体について考えると明らかに <math>x'=\mathrm{const}.</math> この物体の位置を <math>K</math> で観察すると、 <math>x = Vt + \mathrm{const.}</math> すなわち、<math>x'</math> は <math>x - Vt</math> に比例して、その比例係数を <math>\gamma</math> とすると、 <math>x' = \gamma(x-Vt)</math> と表される。<math>ct' = \gamma(act + bx)</math> と置くと、 <math>cdt' = \gamma(acdt + bdx),\, dx' = \gamma(-Vdt + dx).</math> 世界間隔が慣性系で不変であるから、 <math>\begin{align} c^2dt'^2 - dx'^2 &= \gamma^2\{(acdt+bdx)^2 - (-Vdt + dx)^2\} \\ &= \gamma^2 \{(a^2c^2-V^2)dt^2 + (b^2-1)dx^2 + 2(abc+V)dtdx\} \\ &= c^2dt^2 - dx^2 \end{align}</math> すなわち、 <math>\begin{cases} \gamma^2 (a^2c^2-V^2) = c^2 \\ \gamma^2 (b^2-1) = -1 \\ abc+V=0 \end{cases}</math> 第三式を第二式に代入して、 <math>\gamma^2\left(a^2 - \frac{V^2}{c^2}\right) = a^2. </math> これを第一式と比較して <math>a=1.</math> 第三式より <math>b = -\frac V c .</math> 第二式より <math>\gamma = \frac{1}{\sqrt{1-\frac{V^2}{c^2}}}.</math>ここで、<math>\gamma,a</math> は正に選ばなくてはいけない。<math>\gamma</math> が負であるとすれば <math>x' = \gamma(x-Vt)</math> から <math>x</math> と <math>x'</math> が逆向きとなってしまう。それは慣性系 <math>K,K'</math> の設定と異なる。<math>a</math> も同じ理由である。 <math>\beta = \frac V c</math> とすると、ローレンツ変換は <math>\begin{pmatrix} ct' \\ x' \end{pmatrix} = \gamma \begin{pmatrix} 1 & -\beta \\ -\beta & 1 \end{pmatrix}\begin{pmatrix} ct \\ x \end{pmatrix}</math> と書かれる。 [[ファイル:Lt_hyperbolic_functions_2.svg|サムネイル|313x313ピクセル|ローレンツ変換の図示]] ローレンツ変換をまた別の方法で求めよう。ローレンツ変換を原点からの世界間隔 <math>s^2 = (ct)^2 -x^2</math> が変化しないミンコフスキー空間の回転として表してみる。<math>s^2</math> を正として <math>t>0</math> の部分は、 <math>ct = s \cosh \theta, \, x = s \sinh \theta</math> と表すことが出来る。この点を回転角 <math>-\psi</math> だけ回転させた点 <math>ct',x'</math> は、 <math>\begin{align} ct' &= s \cosh(\theta - \psi ) \\ &= s \cosh \theta \cosh \psi - s \sinh \theta \sinh \psi \\ &= ct \cosh \psi - x \sinh \psi \end{align}</math> <math>\begin{align} x' &= s \sinh(\theta - \psi ) \\ &= s \sinh \theta \cosh \psi - s \cosh \theta \sinh \psi \\ &= x \cosh \psi - ct \sinh \psi \end{align}</math> という変換になる。 行列で表すと、<math>\begin{pmatrix} ct' \\ x' \end{pmatrix} = \begin{pmatrix} \cosh \psi & -\sinh \psi \\ -\sinh \psi & \cosh \psi \end{pmatrix} \begin{pmatrix} ct \\ x \end{pmatrix}</math> である。前述の議論より、ローレンツ変換は線型変換だから、この変換が時空間全体に適用されると考えるべきである。実際に、<math>s^2</math> が正で <math>t<0</math> の部分については、<math>\theta \to \theta + \psi</math> として上の変換を得る。<math>s^2</math> が負で <math>x>0</math> の部分には、 <math>\theta \to \theta - \psi</math>、<math>x<0</math> の部分には、 <math>\theta \to \theta + \psi</math> と変換すれば良い。<math>K</math>系での原点 <math>x=0</math> は <math>K'</math> 系では、<math>ct' = ct \cosh \psi,\, x' = -ct \sinh \psi</math> である。二式を割って、<math>\tanh \psi =- \frac{x'}{ct'} = \frac V c.</math> ここで、<math>\frac{x'}{t'}</math> は <math>K'</math> での <math>K</math> の原点の速度に等しいから <math>-V</math> である。双曲線関数の公式 <math>1 - \tanh^2 \psi = \frac{1}{\cosh^2 \psi}</math>から、<math>\cosh \psi = \frac{1}{\sqrt{1-\frac{V^2}{c^2}}}, \, \sinh \psi = \tanh \psi \cosh \psi = \frac{\frac V c}{\sqrt{1-\frac{V^2}{c^2}}}</math> となる。 この結果は前述の結果と一致する。また、<math>\psi</math> はラピディティと呼ばれる。 === 速度の合成則 === 慣性系 <math>K</math> に対し、系 <math>K'</math> は速度 <math>V_1</math> の一様な並進運動を行っている。また、系 <math>K''</math> は <math>K'</math> に対して、速度 <math>V_2</math> の一様な並進運動を行っている。このとき、 <math>K''</math> は <math>K</math> から見てどのような運動を行っているだろうか? <math>\tanh \theta_1 = \frac{V_1}{c},\, \tanh \theta_2 = \frac{V_2}{c}</math> としてラピディティを導入すると、 <math>\begin{align} \begin{pmatrix} ct'' \\ x'' \end{pmatrix} &= \begin{pmatrix} \cosh \theta_2 & -\sinh \theta_2 \\ -\sinh \theta_2 & \cosh\theta_2 \end{pmatrix} \begin{pmatrix} ct' \\ x' \end{pmatrix} \\ &= \begin{pmatrix} \cosh \theta_2 & -\sinh \theta_2 \\ -\sinh \theta_2 & \cosh\theta_2 \end{pmatrix} \begin{pmatrix} \cosh \theta_1 & -\sinh \theta_1 \\ -\sinh \theta_1 & \cosh\theta_1 \end{pmatrix} \begin{pmatrix} ct \\ x \end{pmatrix} \\ &= \begin{pmatrix} \cosh (\theta_1 + \theta_2) & -\sinh (\theta_1 + \theta_2) \\ -\sinh (\theta_1 + \theta_2) & \cosh(\theta_1 + \theta_2) \end{pmatrix} \begin{pmatrix} ct \\ x \end{pmatrix}. \end{align} </math> すなわち、<math>K''</math> は <math>K</math> に対して、ラピディティ <math>\theta = \theta_1 + \theta_2</math> のローレンツ変換である。<math>K</math> から見た <math>K''</math> の速度 <math>\frac V c = \tanh \theta</math> を<math>V_1,V_2</math> で表すと、双曲線関数の加法定理 <math>\tanh (\theta_1 + \theta_2) = \frac{\tanh \theta_1 + \tanh \theta_2}{1 + \tanh \theta_1 \tanh \theta_2}</math> より、<math>\frac V c =\frac{\frac{V_1}{c} + \frac{V_2}{c}}{1 + \frac{V_1V_2}{c^2}}</math> である。もちろん、ラピディティを経由せずに速度の合成則を求めることも可能である。詳しくは[[特殊相対論 速度の合成則|速度の合成則]]を参照すること。 == 4元ベクトル == == 自由粒子の作用 == 特殊相対論的な自由粒子の作用 <math>S_{\mathrm{mat}}</math> を求めよう。特殊相対性原理より、それは慣性系の選択に依存しない量でなくてはいけない。すなわち、ローレンツ変換に対して不変でなくてはならない。世界間隔 <math>ds^2</math> はローレンツ変換に対して不変な量であるから、これを使って、 <math>S_{\mathrm{mat}} = -mc \int_a^b ds</math> のように書けるだろう。ここで、 <math>m</math> は粒子に固有の定数で、後にこれが質量であることを示す。 <math>S_{\mathrm{mat}} = -mc^2 \int_{t_a}^{t_b} \sqrt{1-\frac{v^2}{c^2}}dt</math> であるから、対応するラグランジアンは <math>L_{\mathrm{mat}} = -mc^2\sqrt{1-\frac{v^2}{c^2}}</math> である。ところで、ニュートン力学は特殊相対論の <math>v \ll c</math> とした極限の場合と考えられるので、 <math>L_{\mathrm{mat}}</math> は <math>v \ll c</math> の条件でニュートン力学の自由粒子のラグランジアンに一致するべきである。実際、 <math>L_{\mathrm{mat}} \approx -mc^2\left( 1 - \frac 1 2 \frac{v^2}{c^2} \right) = -mc^2 + \frac 1 2 mv^2</math> となる。第一項の定数項は無視して、ニュートン力学のラグランジアンに一致することが確かめられた。ここにきて、定数 <math>m</math> が粒子の質量であることも確定する。 運動量 <math>\boldsymbol p</math> は<math>\frac{\partial L_{\mathrm{mat}}}{\partial \boldsymbol v}</math> であり、エネルギー <math>E</math> は <math>E = \boldsymbol p \cdot \boldsymbol v - L_{\mathrm{mat}}</math> と定義される。この式に従って計算すると、 <math>\begin{align}\boldsymbol p &= \frac{\partial L_{\mathrm{mat}}}{\partial \boldsymbol v} \\ &= -mc^2 \frac{\partial v^2}{\partial \boldsymbol v} \frac{d}{dv^2} \sqrt{1 - \frac{v^2}{c^2}} \\ &= -mc^2(2\boldsymbol v)\left( -\frac 1 2 \frac{1}{c^2} \frac{1}{\sqrt{1 - \frac{v^2}{c^2}}} \right) \\ &= \frac{m \boldsymbol v}{\sqrt{1 - \frac{v^2}{c^2}}} \end{align} </math> <math>\begin{align} E &= \boldsymbol p \cdot \boldsymbol v - L_{\mathrm{mat}} \\ &= \frac{mv^2}{\sqrt{1 - \frac{v^2}{c^2}}} + mc^2 \sqrt{1 - \frac{v^2}{c^2}} \\ &= \frac{mc^2}{\sqrt{1 - \frac{v^2}{c^2}}} \end{align} </math> となる。エネルギー <math>E</math> は粒子の速度が0の場合でも0にならず、<math>E=mc^2</math> が残る。これを静止エネルギーという。 === 4元運動量 === 4元運動量 <math>p^\mu</math> を <math>p^\mu = m\frac{dx^{\mu}}{d\tau}</math> として定義しよう。<math>d\tau = \sqrt{1 - \frac{v^2}{c^2}}dt</math> であることを考えると、 <math>p^\mu = \frac{m}{\sqrt{1 - \frac{v^2}{c^2}}} \frac{dx^\mu}{dt} </math> であるから、時間成分と空間成分を分けて書くと <math>p^\mu = \left(\frac{mc}{\sqrt{1 - \frac{v^2}{c^2}}} ,\frac{m\boldsymbol v}{\sqrt{1 - \frac{v^2}{c^2}}} \right) = \left(\frac E c ,\boldsymbol p\right).</math> ここで、 <math>dx^\mu dx_\mu = c^2 d\tau^2</math> の両辺を <math>d\tau ^2 </math> で割って <math>m^2</math> を掛けると <math>p^\mu p_\mu = m^2 c^2</math>が得られる。この式に4元運動量の成分を代入すると <math>E^2 = m^2c^4 + \boldsymbol p^2 c^2</math> を得る。 同じように、4元速度 <math>u^\mu </math> を定義することが出来る。 <math>u^\mu = \frac{dx^{\mu}}{d\tau} = \left(\frac{c}{\sqrt{1 - \frac{v^2}{c^2}}} ,\frac{\boldsymbol v}{\sqrt{1 - \frac{v^2}{c^2}}} \right) . </math> また、<math>u^\mu u_\mu = c^2. </math> == 電磁気学 == 粒子の作用はローレンツ不変な形式でなくてはならない。粒子の世界線に沿ったスカラー <math>P</math> の積分と4元ベクトル <math>Q_\mu</math> の線積分 <math>S = \int_a^b P ds + \int_a^b Q_\mu dx^\mu</math> はこの条件を満たす。自由粒子については <math>P = -mc,\, Q_\mu = 0</math> なのであった。 電磁場と相互作用する粒子の作用 <math>S_{\mathrm{int}}</math> は、<math>P=0, Q_\mu = -qA_\mu</math> とした <math>S_{\mathrm{int}} = -q \int_a^b A_\mu dx^\mu </math> である。4元ベクトル <math>A_\mu</math> は電磁場(あるいは4元ポテンシャル、電磁ポテンシャル)と呼ばれ、 <math>q</math> は電荷と呼ばれる量である。電磁場 <math>A^\mu</math> の成分は、<math>A^\mu = \left(\frac \phi c, \boldsymbol A \right)</math> であり、<math>\phi</math> はスカラーポテンシャル、<math>\boldsymbol A</math> はベクトルポテンシャルと呼ばれる。 作用の時間成分と空間成分を分けて書くと <math>S_{\mathrm{int}} = q \int_a^b (-\phi dt + \boldsymbol A \cdot \boldsymbol dr) = q \int_a^b (-\phi + \boldsymbol A \cdot \boldsymbol v) dt. </math> 自由粒子の作用と合わせると、 <math>S_{\mathrm{mat}} + S_{\mathrm{int}} = \int_{t_a}^{t_b}\left(-mc^2 \sqrt{1 - \frac{v^2}{c^2}} - q\phi + q\boldsymbol A \cdot \boldsymbol v \right)dt</math> となる。この被積分関数が電磁場中の粒子のラグランジアン <math>L</math> である。 電磁場中の運動方程式を求めるためには、オイラーラグランジュ方程式 <math>\frac{d}{dt} \frac{\partial L}{\partial \boldsymbol v} = \frac{\partial L}{\partial \boldsymbol r}</math> を求めれば良い。 <math>\frac{\partial L}{\partial \boldsymbol v} = \frac{m\boldsymbol v}{\sqrt{1 - \frac{v^2}{c^2}}} + q \boldsymbol A = \boldsymbol p + q \boldsymbol A </math> <math>\frac{\partial L}{\partial \boldsymbol r} = q\nabla(\boldsymbol A \cdot \boldsymbol v) - q \nabla \phi = q(\boldsymbol v \cdot \nabla) \boldsymbol A + q \boldsymbol v \times (\nabla \times \boldsymbol A) - q \nabla \phi </math> また、<math>\frac{d \boldsymbol A}{d t} = \frac{\partial \boldsymbol A}{\partial t} + \sum_{i=1,2,3} \frac{dx^i}{dt}\frac{\partial \boldsymbol A}{\partial x^i} = \frac{\partial \boldsymbol A}{\partial t} + (\boldsymbol v \cdot \nabla)\boldsymbol A </math> である。 最終的に、オイラーラグランジュ方程式は <math>\frac{d \boldsymbol p}{dt} = -q\nabla \phi -q\frac{\partial \boldsymbol A}{\partial t} + q\boldsymbol v \times (\nabla \times \boldsymbol A) </math> となる。これが粒子の運動方程式である。第一項と第二項の電荷当たりにかかる力を電場 <math>\boldsymbol E</math> といい、第三項の速度に直交する部分を磁場 <math>\boldsymbol B </math> という。 <math>\boldsymbol E = -\nabla \phi -\frac{\partial \boldsymbol A}{\partial t}</math> <math>\boldsymbol B = \nabla \times \boldsymbol A</math> また、運動方程式は <math>\frac{d \boldsymbol p}{dt} = q(\boldsymbol E + \boldsymbol v \times \boldsymbol B) </math> となり右辺はローレンツ力と呼ばれる。 電場と磁場の定義より <math>\nabla \times \boldsymbol E = \nabla\times \nabla \phi - \frac{\partial}{\partial t} \nabla \times \boldsymbol A = -\frac{\partial \boldsymbol B}{\partial t}</math> <math>\nabla \cdot \boldsymbol B = \nabla \cdot \nabla \times \boldsymbol A = 0</math> である。これでマクスウェルの方程式のうち二式を得る。 === ゲージ変換 === 任意の関数 <math>\chi</math> について、 <math>A'_\mu = A_\mu - \frac{\partial \chi}{\partial x^\mu}</math> と変換しても、 <math>\boldsymbol E,\boldsymbol B</math> は変化しない。この変換をゲージ変換という。 ここで、もう一度粒子の運動方程式を求めることにしよう。今度は4元形式を崩さない形で求める。 粒子の作用は <math>S_{\mathrm{mat}} = -mc\int_a^b ds</math> <math>S_{\mathrm{int}} = -q\int_a^b A_\mu dx^\mu = -q\int_a^b A_\mu \frac{dx^\mu}{d\tau} d\tau</math> である。 <math>\begin{align} \delta S_{\mathrm{mat}} &= -mc \delta \int_a^b \sqrt{dx^\mu dx_\mu}\\ &= -mc\int_a^b \frac{\delta(dx^\mu) dx_\mu + dx^\mu \delta(dx_\mu)}{2\sqrt{dx^\mu dx_\mu}}\\ &= -mc\int_a^b \frac{2dx^\mu \delta(dx_\mu)}{2cd\tau}\\ &= -m\int_a^b \frac{dx^\mu}{d\tau} d(\delta x_\mu)\\ &= -m\int_a^b u^\mu \frac{d(\delta x_\mu)}{d\tau}d\tau \\ &= -mu^\mu\delta x_\mu |_a^b + m\int_a^b \frac{du^\mu}{d\tau}\delta x_\mu d\tau \\ &= m\int_a^b \frac{du^\mu}{d\tau}\delta x_\mu d\tau \end{align} </math> であり、 <math>\begin{align}\delta S_{\mathrm{int}} &= -q \delta \int_a^b A_\mu \frac{dx^\mu}{d\tau} d\tau\\ &= -q\int_a^b A_{\mu,\nu}\delta x^\nu \frac{dx^\mu}{d\tau} d\tau - q\int_a^b A_\mu \frac{d\delta x^\mu}{d\tau} d\tau\\ &= -q\int_a^b A_{\mu,\nu}\delta x^\nu \frac{dx^\mu}{d\tau} d\tau - q A_\mu \delta x^\mu |_a^b + q\int_a^b \frac{dA_\nu}{d\tau} \delta x^\nu d\tau \\ &= -q\int_a^b (A_{\mu,\nu} - A_{\nu,\mu})u^\mu \delta x^\nu d\tau \end{align} </math> である。電磁場の強度 <math>F_{\mu\nu} </math> を <math>F_{\mu\nu} = A_{\nu,\mu} - A_{\mu,\nu} </math> と定義すると、 <math>\delta S_{\mathrm{int}} = -q\int_a^b F^{\mu\nu}u_\nu \delta x_\mu d\tau </math> となる。<math>\delta(S_{\mathrm{mat}} + S_{\mathrm{int}}) = 0 </math> より、運動方程式 <math>m \frac{d u^\mu}{d\tau} = qF^{\mu\nu}u_\nu </math> を得る。 == 参考文献 == * エリ・デ・ランダウ、イェ・エム・リフシッツ著、恒藤敏彦他訳『場の古典論(原著第6版)』東京図書(1978) == 旧版 == {{進捗状況}} {{蔵書一覧}} * [[特殊相対論 はじめに|はじめに]] * [[特殊相対論 歴史的導入|歴史的導入]] * [[特殊相対論 テンソル|テンソル]] * 計算例 ** [[特殊相対論 時間の遅れ|時間の遅れ]] ** [[特殊相対論 ローレンツ収縮|ローレンツ収縮]] ** [[特殊相対論 速度の合成則|速度の合成則]] * [[特殊相対論 4元運動量|4元運動量]] <!-- E = mc^2 !!! --> * [[特殊相対論 運動方程式|運動方程式]] * [[特殊相対論 電磁気学への導入|電磁気学への導入]] {{DEFAULTSORT:とくしゆそうたいろん}} [[Category:特殊相対論|*]] {{NDC|421.2}} 1xoc8k67rs0qgm8zq8qwio4se84u6ot 有機化学/基 0 2021 246682 246650 2024-04-14T05:39:20Z Ef3 694 /* 酸素を含む化合物 */ テーブルをWiki記法で再マークアップ wikitext text/x-wiki [[有機化学]]>基 ==基とは何か== 基とは[[有機化学#官能基と炭化水素基|官能基や炭化水素基]]などひとまとまりの原子団を指す。 ==官能基の種類== :{| class="wikitable" |+ 酸素を含む化合物 ! colspan="2" |官能基 !化合物の一般名 ! colspan="2" |化合物の例 |- | rowspan="2" |ヒドロキシ基 | rowspan="2" |-OH |[[有機化学 アルコール|アルコール]] |メタノール |CH<sub>3</sub>-OH |- |フェノール類 |フェノール |C<sub>6</sub>H<sub>5</sub>-OH |- |ホルミル基 |-CHO |[[有機化学 アルデヒド|アルデヒド]] |アセトアルデヒド |CH<sub>3</sub>-CHO |- |カルボニル基 |>CO |[[有機化学 ケトン|ケトン]] |アセトン |CH<sub>3</sub>-CO-CH<sub>3</sub> |- |カルボキシ基 |-COOH |[[有機化学 カルボン酸|カルボン酸]] |酢酸 |CH<sub>3</sub>-COOH |- |ニトロ基 |-NO<sub>2</sub> |ニトロ化合物 |ニトロベンゼン |C<sub>6</sub>H<sub>5</sub>-NO<sub>2</sub> |- |アミノ基 |-NH<sub>2</sub> |アミン |アニリン |C<sub>6</sub>H<sub>5</sub>-NH<sub>2</sub> |- |スルホ基 |-SO<sub>3</sub>H |スルホン酸 |ベンゼンスルホン酸 |C<sub>6</sub>H<sub>5</sub>-SO<sub>3</sub>H |- |エーテル結合 |-O- |[[有機化学 エーテル|エーテル]] |ジメチルエーテル |CH<sub>3</sub>-O-CH<sub>3</sub> |- |エステル結合 |-COO- |[[有機化学 エステル|エステル]] |酢酸メチル |CH<sub>3</sub>-COO-CH<sub>3</sub> |} ==炭化水素基の種類== <table border="1" class="wikitable"> <tr><th>炭化水素基のグループ</th><th colspan="2">炭化水素基</th></tr> <tr><td rowspan="4">アルキル基</td><td>メチル基</td><td>CH<sub>3</sub>-</td></tr> <tr><td>エチル基</td><td>C<sub>2</sub>H<sub>5</sub>-</td></tr> <tr><td>(ノルマル)プロピル基</td><td>CH<sub>3</sub>CH<sub>2</sub>CH<sub>2</sub>-</td></tr> <tr><td>イソプロピル基</td><td>(CH<sub>3</sub>)<sub>2</sub>CH-</td></tr> <tr><td colspan="2">ビニル基</td><td>CH<sub>2</sub>=CH-</td></tr> <tr><td rowspan="2">アリール基</td><td>フェニル基</td><td>C<sub>6</sub>H<sub>5</sub>-</td></tr> <tr><td>ナフチル基</td><td>C<sub>10</sub>H<sub>7</sub>-</td></tr> </table> [[有機化学_アルカン|アルカン]]からH原子を1個とりのぞいたものをアルキル基といい、アルカンの名前のaneをylに変えて命名する。 [[有機化学_アルケン|エチレン]]からH原子を1個とりのぞいたものをビニル基という。 芳香族炭化水素からH原子を1個とりのぞいたものをアリール基という。 炭化水素基は一般に「R-」と表されることもある。 ==ハロゲノ基== ハロゲン原子も基として働く。ハロゲン原子が基として働く場合、ハロゲノ基といい、各々原子名と違う名前が与えられる。 <table border="1" class="wikitable"> <tr><th>ハロゲノ基</th><th>名称</th><th>原子の英名</th></tr> <tr><td>F-</td><td>フルオロ基(Fluoro)</td><td>フルオリン(Fluorine)</td></tr> <tr><td>Cl-</td><td>クロロ基(Chloro)</td><td>クロリン(Chlorine)</td></tr> <tr><td>Br-</td><td>ブロモ基(Bromo)</td><td>ブロミン(Bromine)</td></tr> <tr><td>I-</td><td>ヨード基(Iodo)</td><td>ヨーディン(Iodine)</td></tr> <tr><td>At-</td><td>アスタト基(Astato)</td><td>アスタティン(Astatine)</td></tr> </table> [[カテゴリ:有機化学]] b84cag2x9hcnkkbko6dulx74jelmo4a 246683 246682 2024-04-14T05:47:56Z Ef3 694 /* 炭化水素基の種類 */ テーブルをWiki記法で再マークアップ wikitext text/x-wiki [[有機化学]]>基 ==基とは何か== 基とは[[有機化学#官能基と炭化水素基|官能基や炭化水素基]]などひとまとまりの原子団を指す。 ==官能基の種類== :{| class="wikitable" |+ 酸素を含む化合物 ! colspan="2" |官能基 !化合物の一般名 ! colspan="2" |化合物の例 |- | rowspan="2" |ヒドロキシ基 | rowspan="2" |-OH |[[有機化学 アルコール|アルコール]] |メタノール |CH<sub>3</sub>-OH |- |フェノール類 |フェノール |C<sub>6</sub>H<sub>5</sub>-OH |- |ホルミル基 |-CHO |[[有機化学 アルデヒド|アルデヒド]] |アセトアルデヒド |CH<sub>3</sub>-CHO |- |カルボニル基 |>CO |[[有機化学 ケトン|ケトン]] |アセトン |CH<sub>3</sub>-CO-CH<sub>3</sub> |- |カルボキシ基 |-COOH |[[有機化学 カルボン酸|カルボン酸]] |酢酸 |CH<sub>3</sub>-COOH |- |ニトロ基 |-NO<sub>2</sub> |ニトロ化合物 |ニトロベンゼン |C<sub>6</sub>H<sub>5</sub>-NO<sub>2</sub> |- |アミノ基 |-NH<sub>2</sub> |アミン |アニリン |C<sub>6</sub>H<sub>5</sub>-NH<sub>2</sub> |- |スルホ基 |-SO<sub>3</sub>H |スルホン酸 |ベンゼンスルホン酸 |C<sub>6</sub>H<sub>5</sub>-SO<sub>3</sub>H |- |エーテル結合 |-O- |[[有機化学 エーテル|エーテル]] |ジメチルエーテル |CH<sub>3</sub>-O-CH<sub>3</sub> |- |エステル結合 |-COO- |[[有機化学 エステル|エステル]] |酢酸メチル |CH<sub>3</sub>-COO-CH<sub>3</sub> |} ==炭化水素基の種類== :{| class="wikitable" |+ 炭化水素基 !炭化水素基のグループ ! colspan="2" |炭化水素基 |- | rowspan="4" |アルキル基 |メチル基 |CH<sub>3</sub>- |- |エチル基 |C<sub>2</sub>H<sub>5</sub>- |- |(ノルマル)プロピル基 |CH<sub>3</sub>CH<sub>2</sub>CH<sub>2</sub>- |- |イソプロピル基 |(CH<sub>3</sub>)<sub>2</sub>CH- |- | colspan="2" |ビニル基 |CH<sub>2</sub>=CH- |- | rowspan="2" |アリール基 |フェニル基 |C<sub>6</sub>H<sub>5</sub>- |- |ナフチル基 |C<sub>10</sub>H<sub>7</sub>- |} [[有機化学_アルカン|アルカン]]からH原子を1個とりのぞいたものをアルキル基といい、アルカンの名前のaneをylに変えて命名する。 [[有機化学_アルケン|エチレン]]からH原子を1個とりのぞいたものをビニル基という。 芳香族炭化水素からH原子を1個とりのぞいたものをアリール基という。 炭化水素基は一般に「R-」と表されることもある。 ==ハロゲノ基== ハロゲン原子も基として働く。ハロゲン原子が基として働く場合、ハロゲノ基といい、各々原子名と違う名前が与えられる。 <table border="1" class="wikitable"> <tr><th>ハロゲノ基</th><th>名称</th><th>原子の英名</th></tr> <tr><td>F-</td><td>フルオロ基(Fluoro)</td><td>フルオリン(Fluorine)</td></tr> <tr><td>Cl-</td><td>クロロ基(Chloro)</td><td>クロリン(Chlorine)</td></tr> <tr><td>Br-</td><td>ブロモ基(Bromo)</td><td>ブロミン(Bromine)</td></tr> <tr><td>I-</td><td>ヨード基(Iodo)</td><td>ヨーディン(Iodine)</td></tr> <tr><td>At-</td><td>アスタト基(Astato)</td><td>アスタティン(Astatine)</td></tr> </table> [[カテゴリ:有機化学]] 50zdf6i8iaz8g51z6qd49dezcad8gny 246684 246683 2024-04-14T05:54:31Z Ef3 694 /* ハロゲノ基 */ テーブルをWiki記法で再マークアップ wikitext text/x-wiki [[有機化学]]>基 ==基とは何か== 基とは[[有機化学#官能基と炭化水素基|官能基や炭化水素基]]などひとまとまりの原子団を指す。 ==官能基の種類== :{| class="wikitable" |+ 酸素を含む化合物 ! colspan="2" |官能基 !化合物の一般名 ! colspan="2" |化合物の例 |- | rowspan="2" |ヒドロキシ基 | rowspan="2" |-OH |[[有機化学 アルコール|アルコール]] |メタノール |CH<sub>3</sub>-OH |- |フェノール類 |フェノール |C<sub>6</sub>H<sub>5</sub>-OH |- |ホルミル基 |-CHO |[[有機化学 アルデヒド|アルデヒド]] |アセトアルデヒド |CH<sub>3</sub>-CHO |- |カルボニル基 |>CO |[[有機化学 ケトン|ケトン]] |アセトン |CH<sub>3</sub>-CO-CH<sub>3</sub> |- |カルボキシ基 |-COOH |[[有機化学 カルボン酸|カルボン酸]] |酢酸 |CH<sub>3</sub>-COOH |- |ニトロ基 |-NO<sub>2</sub> |ニトロ化合物 |ニトロベンゼン |C<sub>6</sub>H<sub>5</sub>-NO<sub>2</sub> |- |アミノ基 |-NH<sub>2</sub> |アミン |アニリン |C<sub>6</sub>H<sub>5</sub>-NH<sub>2</sub> |- |スルホ基 |-SO<sub>3</sub>H |スルホン酸 |ベンゼンスルホン酸 |C<sub>6</sub>H<sub>5</sub>-SO<sub>3</sub>H |- |エーテル結合 |-O- |[[有機化学 エーテル|エーテル]] |ジメチルエーテル |CH<sub>3</sub>-O-CH<sub>3</sub> |- |エステル結合 |-COO- |[[有機化学 エステル|エステル]] |酢酸メチル |CH<sub>3</sub>-COO-CH<sub>3</sub> |} ==炭化水素基の種類== :{| class="wikitable" |+ 炭化水素基 !炭化水素基のグループ ! colspan="2" |炭化水素基 |- | rowspan="4" |アルキル基 |メチル基 |CH<sub>3</sub>- |- |エチル基 |C<sub>2</sub>H<sub>5</sub>- |- |(ノルマル)プロピル基 |CH<sub>3</sub>CH<sub>2</sub>CH<sub>2</sub>- |- |イソプロピル基 |(CH<sub>3</sub>)<sub>2</sub>CH- |- | colspan="2" |ビニル基 |CH<sub>2</sub>=CH- |- | rowspan="2" |アリール基 |フェニル基 |C<sub>6</sub>H<sub>5</sub>- |- |ナフチル基 |C<sub>10</sub>H<sub>7</sub>- |} [[有機化学_アルカン|アルカン]]からH原子を1個とりのぞいたものをアルキル基といい、アルカンの名前のaneをylに変えて命名する。 [[有機化学_アルケン|エチレン]]からH原子を1個とりのぞいたものをビニル基という。 芳香族炭化水素からH原子を1個とりのぞいたものをアリール基という。 炭化水素基は一般に「R-」と表されることもある。 ==ハロゲノ基== ハロゲン原子も基として働く。ハロゲン原子が基として働く場合、ハロゲノ基といい、各々原子名と違う名前が与えられる。 :{| class="wikitable" |+ ハロゲノ基の種類 !ハロゲノ基 !名称 !原子の英名 |- |F- |フルオロ基(Fluoro) |フルオリン(Fluorine) |- |Cl- |クロロ基(Chloro) |クロリン(Chlorine) |- |Br- |ブロモ基(Bromo) |ブロミン(Bromine) |- |I- |ヨード基(Iodo) |ヨーディン(Iodine) |- |At- |アスタト基(Astato) |アスタティン(Astatine) |} [[カテゴリ:有機化学]] 2tm9ce03lhfp7tnb8a7o89ir8bpr8te 初等数学公式集/初等幾何/表面積 0 2053 246693 246542 2024-04-14T08:59:29Z Tomzo 248 /* 冠形/球台の曲線部の表面積 */ wikitext text/x-wiki このページでは立体図形の表面積等の公式についての解説をします。 ==直方体の表面積== <math>S = 2(ab + bh + ha)</math> === 直方体の底面積 === <math>B = ab</math> === 直方体の側面積 === <math>A = a{h}(a + b)</math> == 立方体の表面積 == <math>S = 6{a}^2</math> == 柱体の側面積 == <math>S = lh</math> == 直角三角錐(3直角四面体) == [[File:2D-simplex.svg|right|200px|thumb|直角三角錐(3直角四面体)]] 三角錐<math>OABC</math>において,1つの頂点<math>O</math>に集まる3つの角 <math>\angle AOB</math> , <math>\angle BOC</math> , <math> \angle COA</math> がいずれも直角である三角錐を直角三角錐(3直角四面体)と定義し、<math>OA=a, OB=b, OC=c</math>(ただし<math>abc\neq{0}</math>とする)であるものとする。 : :<math>\angle AOB</math> , <math>\angle BOC</math> , <math> \angle COA</math> より、この立体の各頂点は、<math>O</math><math>(0,0,0)</math>, <math>A</math><math>(a,0,0)</math>, <math>B</math><math>(0,b,0)</math>, <math>C</math><math>(0,0,c)</math>とおける。 :3点 <math>x</math>切片<math>(a, 0, 0)</math>, <math>y</math>切片<math>(0, b, 0)</math>, <math>z</math>切片<math>(0, 0, c)</math>を通る平面<math>P</math>の式は、 :<math>P: \frac{x}{a}+\frac{y}{b}+\frac{z}{c}=1</math>である。 - [[初等数学公式集/解析幾何#平面の式]]参照 :原点<math>O</math><math>(0, 0, 0)</math>と平面<math>P: \frac{x}{a}+\frac{y}{b}+\frac{z}{c} -1=0</math>の距離<math> h</math>: ::<math>h = \frac {|-1|}{ \sqrt { \frac {1}{a^2} + \frac {1}{b^2} + \frac {1}{c^2}}} = \frac {1}{ \sqrt { \frac {a^2 b^2 + b^2 c^2 + c^2 a^2}{a^2 b^2 c^2}}} = \frac {abc}{ \sqrt {a^2 b^2 + b^2 c^2 + c^2 a^2}}</math> 三角錐<math>OABC</math>の体積を<math>V</math>とすると、<math>V=\frac {abc}{6}</math> :ここで、<math>\triangle ABC</math>の面積<math>S</math>とすると、<math>V=\frac {hS}{3}</math>であり、従って、<math>S=\frac {abc}{2h}</math> :<math>S=\frac {abc}{2} \dot \frac { \sqrt {a^2 b^2 + b^2 c^2 + c^2 a^2}}{abc} = \frac { \sqrt {a^2 b^2 + b^2 c^2 + c^2 a^2}}{2}</math> *両辺2乗すると、 *:<math>S^2= \left(\frac {ab}{2}\right)^2 + \left(\frac {bc}{2}\right)^2 + \left(\frac {ca}{2}\right)^2</math> *:  *:即ち、<math>S_{\triangle ABC} ^2= S_{\triangle OAB} ^2 + S_{\triangle OBC} ^2 + S_{\triangle OCA} ^2</math>が成立している。これは、三平方の定理を3次元空間に拡張したものと言え[[w:ド・グアの定理|ド・グアの定理]]通称「四平方の定理」と言われる。 == 球の表面積・冠形/球台の曲線部の表面積 == === 球の表面積 === #[[初等数学公式集/初等幾何/体積#球の体積|球の体積]]より #:<math>V = \frac{4}{3}\pi r^3</math> #:これを、<math>r</math>について微分すると、<math>\frac{dV}{dr} = 4\pi r^2</math> #:  #<span id="球表面積"/>積分による方法 #:<math>x^2 + y^2 + z^2 = r^2</math>である球から、<math>z = 0</math>で切断した面を想定する。 #:原点から成す角を<math>\theta</math>として円周上の点<math>A (r \cos \theta, r \sin \theta)</math>とし、<math>\theta</math>をわずかに<math>d\theta</math>変化させた<math>A' (r \cos (\theta + d\theta), r \sin (\theta + d\theta))</math>を考える。この時、<math>AA'</math>の距離は、<math>d \theta</math>がわずかな値であるため、<math>rd \theta</math>に近似される。 #:ここで、<math>AA'</math>を<math>x</math>軸を中心に回転させると、<math>A,A'</math>各々が、周の長さ<math>2 \pi r \sin \theta, 2 \pi r \sin (\theta + d\theta)</math>である帯状の図形を得、 #:その面積は、<math>s =\frac{1}{2} ( 2\pi r \sin \theta + 2 \pi r \sin (\theta + d\theta) )\cdot rd \theta</math> #:<math>d \theta</math>は微小で限りなく<math>0</math>に近づくため、加算において<math>\sin \theta = \sin (\theta + d\theta) </math>としてよく、その結果、<math>s =2\pi r^2 \sin \theta d \theta</math>とおける。 #:ここで、<math>\theta</math>について、区間<math>\left[ 0,\frac{\pi}{2} \right]</math>で積分することにより、球の<math>x \ge 0</math>の部分の表面積が得られる。 #:<math>S_{hemi} = \int_{0}^{\frac{\pi}{2}} 2\pi r^2 \sin \theta d \theta</math><math>= 2 \pi r^2 \int_{0}^{\frac{\pi}{2}} \sin \theta d \theta</math><math>=- 2 \pi r^2 \left[\cos \theta \right]_{0}^{\frac{\pi}{2}} </math><math>= 2 \pi r^2</math> #:   #:この球は<math>x = 0</math>について対称であり、<math>x < 0</math>の部分の表面積も等しいので、<math>S = 2S_{hemi} = 4 \pi r^2</math> #:  #:*積分を使った誤答の例 #:*:<math>x^2 + y^2 + z^2 = r^2</math>である球を考える。 #:*:<math>x = t</math>でこの球を切断すると、半径<math>\sqrt{r^2-t^2}</math>である円;<math>C</math>を得、この円;<math>C</math>の円周は<math>2\pi \sqrt{r^2-t^2}</math>である。 #:*:球の表面積は、この<u>周に微細な幅<math>dt</math>をかけた<math>2\pi \sqrt{r^2-t^2} dt</math></u><sup>※</sup>を区間<math>[-r,r]</math>で累積したものであるから、その区間で積分することにより得られる。 #:*:<math>S = \int_{-r}^{r} 2\pi \sqrt{r^2-t^2}\,dt </math><math>= 4\pi \int_{0}^{r} \sqrt{r^2-t^2}\,dt </math> #:*::<math>t = r \sin \theta</math>とおく、微分して<math>dt = r \cos \theta d\theta</math> #:*::(与式)<math>= 4\pi \int_{0}^{\frac{\pi}{2}} \sqrt{r^2-r^2 \sin^2 \theta} \cdot r \cos \theta d\theta </math><math>= 4\pi r^2 \int_{0}^{\frac{\pi}{2}} \sqrt{1- \sin^2 \theta} \cdot \cos \theta d\theta </math> <math>= 4\pi r^2 \int_{0}^{\frac{\pi}{2}} \sqrt{\cos^2 \theta} \cdot \cos \theta d\theta </math> #:*::<math>= 4\pi r^2 \int_{0}^{\frac{\pi}{2}} \cos^2 \theta d\theta </math><math>= 4\pi r^2 \left[ \frac{2\theta + \sin 2\theta}{4} \right]_{0}^{\frac{\pi}{2}}</math><math>= \pi^2 r^2</math> #:*:::となって、誤答を得る。これは、「周に微細な幅<math>dt</math>をかけたもの(※)」の面積は、正しくは、<math>\frac{1}{2} \left( 2\pi \sqrt{r^2-t^2} + 2 \pi \sqrt{r^2-(t+dt)^2} \right) dt</math>であって、括弧内後項の<math>dt</math>は積分において無視できなくなることの立式の誤りである。 #:*:    === 冠形の曲線部の表面積 === [[File:Spherical cap diagram.tiff|thumb|200px|球冠]] * [[w:球冠|球冠]](平面により切断された球の一部)の曲面部の表面積<math>S</math>: *:関係する諸数値を以下のものとする(右図参照)。 *:* 球の半径 <math>r</math> *:* 球冠の底の半径 <math>a</math> *:* 球冠の高さ <math>h</math> *:* 球の中心から球冠の頂点(極)までの線と球冠の底を形作る円板の端との間の[[w:球面座標系|極角]] <math>\theta</math> #[[w:球面座標系|極角]] <math>\theta</math>が与えられている場合 #:上記の[[#球表面積|球の表面積を積分を用い求める解法]]を用い、区間<math>\left[ 0,\theta \right]</math>で積分することで求められる。 #:<math>S = 2 \pi r^2 \int_{0}^{\theta} \sin x dx</math><math>=- 2 \pi r^2 \left[\cos x \right]_{0}^{\theta} </math><math>= 2 \pi r^2(1-\cos \theta)</math>(※2) #<math>r</math> と <math>h</math> が与えられている場合 #:<math>\cos \theta = \frac{r-h}{r}</math>であるから、※2に代入して、<math>S = 2 \pi r^2(1-\cos \theta)</math><math>= 2 \pi r^2 \left( 1- \frac{r-h}{r} \right)</math><math>= 2 \pi r^2 \left( \frac{r - r + h}{r} \right)= 2 \pi r h</math>(※3) #<math>a</math> と <math>h</math> が与えられている場合 #:<math>r^2 = a^2 + (r-h)^2</math>から、<math>r = \frac{a^2 + h^2}{2h}</math> #:※3に代入して、<math>S = 2 \pi r h</math><math>S = 2 \pi h \left( \frac{a^2 + h^2}{2h} \right)</math><math>=\pi (a^2 + h^2)</math>(※4) {{-}} === 球台の曲線部の表面積 === [[File:LaoHaiKugelschicht1.png|thumb|球台]] * [[w:球台|球台]](球を1対の平行な平面で切断した立体/先端が切り取られた球冠)の曲面部(球帯)の表面積<math>S</math>: *:関係する諸数値等を以下のものとする(右図参照)。 *:* もとの球の半径 <math>R</math>、球の中心を<math>O</math> *:* 球台の底の各々の半径 <math>r_1, r_2</math>、底の中心を各々<math>A, B</math>、直線<math>AB</math>と球との交点を<math>C, D</math>とする、なお<math>DABC</math>の順に並ぶ。 *:* 球台の高さ(2つの平行な底面間の距離) <math>H</math> # <math>R</math> と <math>r_1, r_2</math> が与えられている場合 ## 球を切断する平行な2平面の外に球の中心がある場合(ただし、<math>r_1 > r_2</math>) ##:中心<math>A</math>の円が底である冠形について、高さ<math>AC</math>は、<math>R-\sqrt{R^2 - r_1^2}</math> ##:※4より、この冠形の曲面部表面積<math>S_A</math>は、<math>\pi (r_1^2 + AC^2)</math><math>=\pi \left(r_1^2 + \left({R-\sqrt{R^2 - r_1^2}}\right)^2\right)</math><math>=\pi \left(r_1^2 + R^2-2R\sqrt{R^2 - r_1^2}+R^2 - r_1^2\right)</math><math>=\pi \left(2R^2-2R\sqrt{R^2 - r_1^2}\right)</math> ##:同様に、中心<math>B</math>の円が底である冠形の曲面部表面積<math>S_B</math>は、<math>=\pi \left(2R^2-2R\sqrt{R^2 - r_2^2}\right)</math> ##:求める球台の曲面部表面積は、これらの球冠の曲面部表面積の差であるから、 ##:<math>S_A-S_B</math><math>=\pi \left(2R^2-2R\sqrt{R^2 - r_1^2}\right)-\pi \left(2R^2-2R\sqrt{R^2 - r_2^2}\right)</math><math>= 2 \pi R \left( \sqrt{R^2 - {r_2}^2} - \sqrt{R^2 - {r_1}^2} \right)</math>(※5) ## 球を切断する平行な2平面の外に球の中心がある場合 ##:<math>O</math>を通る<math>CD</math>と直行する平面で球を分割。 ##:中心<math>A</math>の円と分割によりできた円を各々底とする球台の曲面部表面積は、半球の曲面部表面積から中心<math>A</math>の円が底である冠形の局面部表面積を引いたものであるので、 ##:<math>S_A =2\pi R^2 - \pi \left(2R^2-2R\sqrt{R^2 - r_2^1}\right)</math><math>=2 \pi R \left( \sqrt{R^2 - r_1^2} \right)</math> ##:同様に<math>S_B = 2 \pi R \left( \sqrt{R^2 - r_2^2} \right)</math> ##:したがって、<math>S = S_A + S_B = 2 \pi R \left( \sqrt{R^2 - {r_1}^2} + \sqrt{R^2 - {r_2}^2} \right)</math>(※6) # <math>R</math> と <math>h</math> が与えられている場合 #:以下により、<math>S = 2 \pi R h</math> ##点の順が<math>OABC</math>である時、 ##:<math>h=OB-OA</math>であるので、上の例同様、球台の底のうち、<math>A</math>を中心とする円の半径を<math>r_1</math>、<math>B</math>を中心とする円の半径を<math>r_2</math>とすると、 ##:<math>h=OB-OA=\sqrt{R^2 - {r_2}^2} - \sqrt{R^2 - {r_1}^2}</math> ##:※5に代入して、<math>S = 2 \pi R h</math> ##点の順が<math>AOBC</math>である時、 ##:<math>h=OA+OB</math>であるので、上の例同様、球台の底のうち、<math>A</math>を中心とする円の半径を<math>r_1</math>、<math>B</math>を中心とする円の半径を<math>r_2</math>とすると、 ##:<math>h=OA+OB=\sqrt{R^2 - {r_1}^2} + \sqrt{R^2 - {r_2}^2}</math> ##:※6に代入して、<math>S = 2 \pi R h</math> {{-}} == 円環体(トーラス)の表面積 == [[File:Torus-rotations-flaeche-r.svg|right|250px|thumb|円環体・トーラス]] 半径<math>r</math>の円;<math>C</math>を、円の中心からの距離<math>R</math>(但し、<math>r</math> ≦ <math>R</math>とする)の直線を軸として回転させた円環体([[w:トーラス|トーラス]]、ドーナツ型)の表面積 :<math>S = 4 \pi^2 rR = (2 \pi r) (2 \pi R)</math> :[[初等数学公式集/初等幾何/体積#円環体(トーラス)の体積|体積の公式]];<math>V = 2 \pi^2 r^2 R</math>に関して、半径<math>r</math>について微分することにより得られる。 [[Category:初等数学公式集|ひようめんせき]] sjjznmxsaamxvsbr01eicvf72qg00t4 高等学校理科 0 2081 246680 237559 2024-04-14T04:36:30Z 2400:4051:4460:AA00:C548:ED62:7BFB:6FD8 進捗状況追加 wikitext text/x-wiki {{pathnav|高等学校の学習|frame=1|small=1}} このページは、高校理科の教科書の本棚です。教科「理科」は以下の科目から構成されています。 高等学校では「科学と人間生活」と基礎系科目1科目もしくは、基礎系科目3科目が必修となっています。 ただし、「科学と人間生活」は大学入学共通テストでは出題されないため注意が必要です。 == 物理 == *[[高等学校物理]] :*[[高等学校 物理基礎|物理基礎]] 2単位 {{進捗|75%|2024-04-14}} :*[[高等学校 物理|物理]] 4単位 {{進捗|75%|2024-04-14}} == 化学 == *[[高等学校化学]] :*[[高等学校理科 化学基礎|化学基礎]] 2単位 {{進捗|100%|2024-04-14}} :*[[高等学校 化学|化学]] 4単位 {{進捗|100%|2024-04-14}} == 生物 == *[[高等学校生物]] :*[[高等学校 生物基礎|生物基礎]] 2単位 {{進捗|75%|2024-04-14}} :*[[高等学校 生物|生物]] 4単位 {{進捗|50%|2024-04-14}} == 地学 == *[[高等学校地学]] :*[[高等学校 地学基礎|地学基礎]] 2単位 {{進捗|00%|2024-04-14}} :*[[高等学校 地学|地学]] 4単位 {{進捗|25%|2024-04-14}} == その他の科目 == *[[高等学校 科学と人間生活|科学と人間生活]] {{進捗|00%|2024-04-14}} * [[高等学校 理数探究基礎|理数探究基礎]] 1単位{{進捗|00%|2023-02-04}}<br /> == 旧課程 == 高等学校では「理科基礎」、「理科総合A」、「理科総合B」のうち1科目を含む2科目が必修になっています。 * [[高等学校理科基礎|理科基礎]] 2単位 {{進捗|00%|2015-08-14}} * [[高等学校理科総合A|理科総合A]] 2単位 {{進捗|00%|2015-08-14}} * [[高等学校理科総合B|理科総合B]] 2単位 {{進捗|25%|2015-08-14}} * [[高等学校物理]] 3単位 {{進捗|25%|2015-08-14}} :* [[高等学校物理/物理I|物理I]] 3単位 {{進捗|25%|2015-08-14}} :* [[高等学校物理/物理II|物理II]] 3単位 {{進捗|25%|2015-08-14}} * [[高等学校化学]] {{進捗|25%|2015-08-14}} :* [[高等学校化学I|化学I]] 3単位 {{進捗|25%|2015-08-14}} :* [[高等学校化学II|化学II]] 3単位 {{進捗|25%|2015-08-14}} * [[高等学校生物]] {{進捗|50%|2015-08-14}} :* [[高等学校生物/生物I|生物I]] 3単位 {{進捗|50%|2015-08-14}} :* [[高等学校生物/生物II|生物II]] 3単位 {{進捗|50%|2015-08-14}} * [[高等学校地学]] {{進捗|25%|2015-08-14}} :* [[地学I]] 3単位 {{進捗|25%|2015-08-14}} :* [[地学II]] 3単位 {{進捗|25%|2015-08-14}} [[Category:高等学校教育|理*]] [[Category:理科教育|高*]] [[category:高校理科|*]] ftid3ipedp4jyosc97fyx2x92oz85vw 刑事訴訟法第290条の2 0 13263 246667 220148 2024-04-13T17:19:24Z Tomzo 248 wikitext text/x-wiki [[法学]]>[[コンメンタール]]>[[コンメンタール刑事訴訟法]]=[[コンメンタール刑事訴訟法/改訂]] ==条文== (公開の法廷での被害者特定事項の秘匿) ;第290条の2 # 裁判所は、次に掲げる事件を取り扱う場合において、当該事件の被害者等(被害者又は被害者が死亡した場合若しくはその心身に重大な故障がある場合におけるその配偶者、直系の親族若しくは兄弟姉妹をいう。以下同じ。)若しくは当該被害者の法定代理人又はこれらの者から委託を受けた弁護士から申出があるときは、被告人又は弁護人の意見を聴き、相当と認めるときは、被害者特定事項(氏名及び住所その他の当該事件の被害者を特定させることとなる事項をいう。以下同じ。)を公開の法廷で明らかにしない旨の決定をすることができる。 ## [[刑法第176条|刑法第176条]]から[[刑法第179条|第179条]]まで若しくは[[刑法第181条|第181条]]の罪、[[刑法第225条|同法第225条]]若しくは[[刑法第226条の2|第226条の2]]第3項の罪(わいせつ又は結婚の目的に係る部分に限る。以下この号において同じ。)、[[刑法第227条|同法第227条]]第1項(第225条又は第226条の2第3項の罪を犯した者を幇助する目的に係る部分に限る。)若しくは第3項(わいせつの目的に係る部分に限る。)若しくは[[刑法第241条|第241条]]第1項若しくは第3項の罪又はこれらの罪の未遂罪に係る事件 ## [[児童福祉法第60条]]第1項の罪若しくは[[児童福祉法第34条|同法第34条]]第1項第9号に係る同法第60条第2項の罪又は[[児童買春、児童ポルノに係る行為等の処罰及び児童の保護等に関する法律第4条|児童買春、児童ポルノに係る行為等の処罰及び児童の保護等に関する法律第4条]]から第8条【[[児童買春、児童ポルノに係る行為等の処罰及び児童の保護等に関する法律第4条|第4条]]、[[児童買春、児童ポルノに係る行為等の処罰及び児童の保護等に関する法律第5条|第5条]]、[[児童買春、児童ポルノに係る行為等の処罰及び児童の保護等に関する法律第6条|第6条]]、[[児童買春、児童ポルノに係る行為等の処罰及び児童の保護等に関する法律第7条|第7条]]、[[児童買春、児童ポルノに係る行為等の処罰及び児童の保護等に関する法律第8条|第8条]]】までの罪に係る事件 ## 前2号に掲げる事件のほか、犯行の態様、被害の状況その他の事情により、被害者特定事項が公開の法廷で明らかにされることにより被害者等の名誉又は社会生活の平穏が著しく害されるおそれがあると認められる事件 # 前項の申出は、あらかじめ、検察官にしなければならない。この場合において、検察官は、意見を付して、これを裁判所に通知するものとする。 # 裁判所は、第1項に定めるもののほか、犯行の態様、被害の状況その他の事情により、被害者特定事項が公開の法廷で明らかにされることにより被害者若しくはその親族の身体若しくは財産に害を加え又はこれらの者を畏怖させ若しくは困惑させる行為がなされるおそれがあると認められる事件を取り扱う場合において、検察官及び被告人又は弁護人の意見を聴き、相当と認めるときは、被害者特定事項を公開の法廷で明らかにしない旨の決定をすることができる。 # 裁判所は、第1項又は前項の決定をした事件について、被害者特定事項を公開の法廷で明らかにしないことが相当でないと認めるに至ったとき、[[刑事訴訟法第312条|第312条]]の規定により罰条が撤回若しくは変更されたため第1項第1号若しくは第2号に掲げる事件に該当しなくなったとき又は同項第3号に掲げる事件若しくは前項に規定する事件に該当しないと認めるに至ったときは、決定で、第1項又は前項の決定を取り消さなければならない。 ===改正経緯=== ====2017年改正==== 2017年刑法改正に伴い以下の改正がなされた。 *「第178条の2」→「第179条」 *「第241条前段」→「第241条第1項若しくは第3項」 ====2007年改正==== 新設 ==解説== ==参照条文== ==判例== ---- {{前後 |[[コンメンタール刑事訴訟法|刑事訴訟法]] |[[コンメンタール刑事訴訟法#2|第2編 第一審]]<br> [[コンメンタール刑事訴訟法#2-3|第3章 公判]]<br> [[コンメンタール刑事訴訟法#2-3-1|第1節 公判準備及び公判手続き]]<br> |[[刑事訴訟法第290条|第290条]]<br>(任意的国選弁護) |[[刑事訴訟法第290条の3|第290条の3]]<br>(公開の法廷での証人等特定事項の秘匿) }} {{stub|law}} [[category:刑事訴訟法|290の2]] [[category:刑法 2017年改正|訴290の2]] [[category:刑事訴訟法 2007年改正|290の2]] 4tv0kx3k0dm90nnvc60r05jquj958dc 学習方法/大学受験5教科全般 0 19371 246685 246043 2024-04-14T06:54:38Z すじにくシチュー 12058 /* 塾・予備校の注意点 */ ほか、合格実績を「水増し」(みずまし)をしている塾などが過去にはありました。具体的には、たとえば1人のいちばん好成績の塾生に、塾が30大学などの受験量を出して各大学を受験させて、その塾からの合格した「大学数」の実績をかせぐ方法です。 wikitext text/x-wiki == 傾向と対策 == === 傾向 === 大学入試の出題について、文部科学省の通知文である「大学入学者選抜実施要項」には次のように記載されています。<ref>[https://www.mext.go.jp/a_menu/koutou/senbatsu/mxt_kouhou02-20200619_1.pdf 令和3年度大学入学者選抜実施要項について(通知)]</ref> :以下の三つの要素のそれぞれを適切に把握するよう十分留意する。 :(中略) :① 基礎的・基本的な知識・技能(以下「知識・技能」という。) :② 知識・技能を活用して,自ら課題を発見し,その解決に向けて探究し,成果等を表現するために必要な思考力・判断力・表現力等の能力(以下「思考力・判断力・表現力等」という。) :③ 主体性を持ち,多様な人々と協働しつつ学習する態度 「知識・技能」の部分はいわゆる教科書通りの問題、「思考力・判断力・表現力等」の部分が教科書よりもやや難しく感じられる出題を指すと解することができます。実態としては、知識ではなく思考力・判断力を問おうとして出題した問題が、しばしば意図に反して検定教科書の範囲よりもやや広い範囲の知識があれば解けてしまうために、そのような知識を問う問題として機能してしまうこともあります。 このような大学入試の現状から逆算して、以下のような対策が必要になるでしょう。 === 対策 === 定期テストだけで受験対策するのは大学入試ではほぼ無理ですが、かといって、平均的な高校の定期テストの問題すらも解けないような学力では、大学受験には対応できません。 低学年のうちから受験の過去問ばかりをするのは非効率です。なぜなら、大学入試問題は難しく、学力が足りない低学年のうちから読みこんでも意味不明であり、そのような段階では過去問が学力の習得に役立たない可能性が高いからです。まずは、定期テスト程度なら8割ほどは楽に解ける、という状態を作るべきです。そのために、まずは定期テスト対策の学習をきちんとする必要があります。 定期テストだけに特化した、その場しのぎの学習は非効率です。最終的な目標は、けっして定期テストの問題を解けるようになることではありません。当面の中間目標として、定期テスト程度の易しい問題なら楽に解けるという状態を作ることを目指しているのです。日頃からの学習の積み重ねが物を言います。 == 定期テストを活用する == 高校にもよりますが、平均以上のレベルの高校の1年生や2年生の定期テストの出題範囲は、授業で習った範囲を基準にしつつも、参考書などで紹介されている基礎事項も少しだけ出題するという場合が多いでしょう。ほとんどの高校の場合、定期テストはその単元の理解を確認するテストであり、易しい問題が中心でしょう。定期テスト対策の勉強法は、数学・理科・地歴公民については、教科書を理解をするために読み込みつつも、参考書もその単元について1冊は読んで、そしてワークブックなどで問題練習する事です。 以下で教科ごとの学習法について詳しく述べます。 === 国語 === :教科書以外に必要なもの - 参考書、ワークブック、漢字ドリルなど. 古文・漢文については、まずは単語と文法事項の理解を深めます。英語と比べれば覚えるべき事項はとても少ないですので、完璧にすることです。なまじっか日本語だからと言ってこのような学習を軽視する人がいますが、それは後々になって大きなビハインドになります。そのうえで、教科書の作品を丁寧に口語訳しながら読解することで、当時の人が持っていた常識的感覚を体得します。このような基本に忠実な学習を繰り返していかないと、初見の文章を読めるようにはなりません。古典は作品数が有限ではありますが、かなり大きな有限ですので、入試において初見の文章を読む覚悟はしておかなくてはいけません。初見の作品であっても、当時の人に好まれたよくある作品のパターンには収まっているものが多いです。文法に加えてそのパターンを体得していれば、読解は難しくありません。 現代文についても、評論については典型的な論の運び方のパターンを、小説においては典型的な作家の表現のパターンを、それぞれ読解の数をこなす中で体得することが重要です。なんとなく、ではなく、根拠をもってその論・表現の意図を説明できるようにしておきましょう。ある程度以上の大学の記述試験では、まとまった論述も求められます。読解するだけでなく、その内容を要約して表現する作文力も求められるということです。自分の感想はさておいて、筆者は何を言っているのか、作者はどのような意図で表現しているのか、冷静な筆致で表現できなければなりません。これには、相応の練習が必要です。もちろん、それ以前に正確な読解が必要なのは言うまでもありません。 漢字は、覚えるしかないので、漢字ドリルなどで出題されてる漢字を、きちんと練習しましょう。 === 英語 === :教科書以外に必要なもの - 参考書および'''単語帳'''. 英語の場合、単語力の欠如が文法や読解の学習を妨げるので、とにかく単語力が大切です。 英語の教科書だけでは文法などの解説・問題例がやや足りないこともあり、参考書などで補ってください。 長文読解や解釈に関しても、一般の検定教科書や学校で配布される問題集では不足があるので、必要に応じて問題集を利用しましょう。 === 数学 === :教科書以外に必要なもの - 参考書(ただし問題集付きおよび'''解説付き'''の物). 数学の場合、教科書レベルの練習問題〜発展問題を解ければ定期テスト対策としては充分なのですが、その教科書レベルを理解するのが手間取ります。 数学の教科書レベルを理解するためには、教科書の練習問題や応用問題・発展問題などをきちんと練習したうえで、さらに参考書でその単元の基本問題や練習問題を補えば、たいてい定期テスト対策としては充分でしょう。数学の参考書の場合、基礎レベルの参考書自体がワークブック的な問題集の機能も兼ているので、ワークブックは別途は必要ありません。数学の場合、問題練習に時間が掛かるため、参考書は当面は1冊で充分です。数学の参考書を買う際は、問題に答えと解説が付いているものを選んでください。数学の高校参考書では、普通の厚めの参考書なら、問題の答えと解説が付いていますので、買う際はそれを買います。参考書の発展レベルは、定期テスト対策では不要です。低学年では、数学参考書の発展レベルに深入りするよりも、他教科の勉強に時間を掛けるべきでしょう。 === 地歴公民 === :教科書以外に必要なもの - 平易な参考書(実質的にはセンター対策本)または別の教科書出版社の教科書、ワークブック. 地歴公民の理解を深める手っ取り早い方法は、教科書の他に、もう1冊、参考書か別の教科書出版社の教科書を読む方法です。重要事項や基礎事項はどの教材でも触れられているので、複数冊を読むことで繰り返し学習することになり、記憶が定着します。一方、発展的な事項や、著者や出版社によって視点や意見が分かれるような題材については、複数冊を読むことによって、さまざまな視点で読めることになるので、理解が深まります。参考書を買う場合は、とりあえず、短かめの参考書を買うのが良いでしょう。「センター試験対策」などと銘打った参考書が、わりと短めなので、まずは、それを買うと良いかもしれません。片っ端から全てを覚えるのは非効率なので、まずは基礎的な事項を重点的に説明した、入門的な参考書があると便利です。加えて地歴公民では、内容の理解はもちろん必要なのですが、しかし実際のテストでは定期テストでも入試でも、用語の漢字などでの書き取りを問う出題も多いので、書き取り練習なども必要です。 ニュース、一般の歴史評論書や経済評論書などは、学習に取り入れる必要は原則としてありません。受験向けにまとめられた教科書や参考書を複数買って読んで読み比べるほうが、受験勉強としてより効率的です。 時事問題の関連知識が必要な場合、書店で市販されている『現代社会』資料集などが時事問題を解説していたりします。また、中学入試や高校入試対策の教材で、時事問題の解説をした教材が市販されていますので、それらを参考にすれば十分でしょう。 === 理科 === :教科書以外に必要なもの - 参考書および、ワークブックまたは簡単な問題集. 理科の学習法は、手短かに言うと、数学と地歴公民の中間です。問題練習をしつつも、用語などは暗記しなければなりません。物理については、数学に勉強法が近いです。生物については、やや地歴公民に勉強法が近くなります。化学の勉強法は、物理と生物の中間、といったところでしょう。 なお、もし理系の大学を進学志望する場合、大学では生物の勉強法が化学に近付いていき、化学の勉強法が物理に近付きますので、高校では物理・化学・生物の学習は、どれもサボらずに、高校必修の範囲は、ひととおり勉強しておきましょう。 さて、テレビのニュースなどでノーベル賞など科学的な話題を見ることがあると思いますが、それらの報道を追いかける必要は基本的にありません。いわゆる時事問題のように、そういった事柄が直接問題になるということはまずないからです。ただし、そういった時事ネタを元に入試問題が作成されることもあります<ref>2019年度 早稲田大学基幹/先進理工学部 生物 第3問(2017年ノーベル生理学・医学賞に関する問題)など</ref>し、理科への意欲も深まるでしょうから、知ってて損をすることもないでしょう。 == 参考書・問題集を使った学習 == 学校ですでに習い終わった単元については、定期テスト程度なら楽に解ける、という状態になったら、プラスアルファの学習をしましょう。そのためには、教科書以外の参考書・問題集を用意する必要があります。 参考書は、あまりたくさん用意する必要はありません。1冊では心もとないというなら2冊程度はあってもいいですが、参考書を読む以外にも問題練習などもしなければならないので、あまり多くの参考書を読めません。細かな理解は、問題練習などを通して、これから深めていきます。 また、英語では参考書の他にも単語集・熟語集、社会科では用語集や日本史の史料解説集、などのように、各科目ごとに、その教科のメインの参考書以外にも補助教材がいずれ必要になるので、それを忘れないようにしましょう。入学当初は参考書だけでも構いませんが、いずれ単語集や史料集などの補助教材を利用する必要が出てきます。 参考書を読むだけでなく、問題演習も必要です。"定期テスト対策"の問題集・ワークブックしか入手してない場合、それとは別に、"入試対策"用の問題集を入手してください。入試対策用の問題集の選択には、まずは平均的な難度の大学向けの問題集でよいので、問題集を入手して、問題練習してください。この「標準的」とされる「入試」対策用の問題集ですら、現役の高校生には、かなり難しいです。なので、まだ「難関校むけ」の問題集には取り掛からないほうが良いでしょう。たとえ難関校を志望する場合ですら、入試問題には標準難度の大学の入試問題を解く能力も、要求されます。なので、志望校が難関校か中堅校かの、どちらにせよ、平均的な難度の入試対策問題集を楽々解ける能力が、受験生のころまでに必要になります。難関校向けの問題集よりも、まず先に "標準レベル" の入試対策問題集を使用してください。 予習については、先取り学習もしたほうが色々な理由で効果的な部分はあります<ref>船登惟希『改訂版 高校の勉強のトリセツ』、GAKKEN、48ページ</ref>ので、余力がある人は参考書を使い概要の把握程度の予習をするのもよいでしょう。教科書の後ろのほうの単元などは問題練習不足などにもなりやすく、概要程度を一通り早めに全体像を把握することができればそのような事態を防ぐことができます<ref>船登惟希『改訂版 高校の勉強のトリセツ』、GAKKEN、48ページ</ref>。ただし一方で、積み上げによる学習が必要とされる教科において、前の単元の理解が不十分なままに先の単元の「予習ごっこ」をするのは非効率です。そのような事態に陥らないよう、先生などの指導者のアドバイスを受けながら進めるのがよいでしょう。 == ノートづくりを目的にしてはならない == 記憶の定着を図るために、授業の内容などをノートにとっても良いでしょう。あるいは、参考書の語句および、その語句などの手短な解説などを、ノートなどに取っても良いでしょう。でも、ノートづくりを目的にしてはいけません。色鮮やかな自己満足ノートを作るのは時間の無駄です。その結果、学習者は知識が片寄ってしまいます。そのようなノートづくりをするよりも、語句の書き取り練習とか、あるいは問題練習などに時間を割いたほうが良いでしょう。 == 小論対策で読書するなら志望学科から逆算 == そもそも論として、参考書以外の読書はあまり受験対策には必要ないのですが(参考書などにある普通の知識のほうが出題頻度が高いので)、どうしても小論文などの対策として読書をする場合、注意事項として、 :入試の小論文では、志望の学科に関するテーマの小論が要求される、 という事をふまえる必要があります。 たとえば、もし経済学部や法学部などの社会科学っぽい学部を目指しているのに、文学小説や世界文学全集などを読み漁っても、それを経済学部・法学部などの入試の小論で活用するのは、かなりの難しさです。よほどの天才的な読書家でない限り、小説の知識などをもとに社会問題についての意見の小論を、受験できちんと得点できる水準で書くのは、まず無理です。 入試では「国語」科目で小論文が扱われる場合も多いのですが、だからといって文芸小説の小論だと勘違いしないよう、気をつけましょう。 基本的に、志望学科から遠い内容の文献をもとに論述をされても、あまり印象は良くないと思います。なぜなら、分野が違うと求める目標も違うので、異分野の文献をもとに小論をするのは、かなりの難しさです。 経済学部志望で法律学書の知見をもとに書くくらいならまだしも、経済学部志望なのに文学書や美術書や音楽書などの知見をもとに小論を述べるのは、一般入試では、かなりの難しさでしょう(ただし、スポーツ推薦とか文化活動推薦とかで志望する場合は、別かもしれません。この節では、一般入試の場合を述べています。) また、理工学部および理学部または工学部の入試では、めったに小論文は出ません。日本では、理系の学部のほとんどは理工系または情報系です。医療系の学部や、よほどの難関大の理系の学部でないかぎり、一般入試では小論文は出ないのが普通です。 == 模試の使いかた == 予備校などが、受験生の試験なれのため、入試などを真似た模擬試験(略して「模試」)を有料で行っています。 模擬試験の使い道とは、受験科目のなかで自分のまだ習得できてない単元をみつけて、その苦手分野をこれから復習すること、日本全国の受験生のなかで、自分がどれくらいの学力にあるかを調べることです。 模擬試験を受けるだけ受けても復習をしなければ、せっかく受けた模擬試験は、ほぼ無意味になります。学力をあげる方法とは、あくまで参考書などを読んだり、計算練習するなどの予習・復習であり、けっして模擬試験そのものは学力向上の手段ではありません。参考書を一度も読まずに「模試だけを何度も受けて、答えのパターンごと覚えよう」などという学習法では、学習すべき全範囲を網羅することができません。 == 大学入学共通テスト対策 == 大学入学共通テストは、国公立大学の受験をするなら避けては通れません。 ほぼすべての国立大学で、共通テストは5教科(国語・数学、英語、地歴公民、理科)が要求されます。このため国立志望では、共通テスト対策として、5教科をまんべんなく勉強する必要があります。 共通テストと二次試験の比率は大学により異なりますが、共通テストの比率の高い大学ではほぼ共通テストだけで決まると言えるところもあります(ただし難関大は二次試験重視が一般的)。また、一部の大学では共通テストの得点がある基準点に達していることを要求したり、共通テストの得点である一定の倍率まで絞ってしまう、いわゆる「足きり」と呼ばれる制度があります。また、近年 拡大傾向にある私大の共通テスト利用入試に活用することもできるため、ますます重要性が上がっています。 共通テストは、かつて行われていた大学入試センター試験にあたるものです。センター試験は、出題範囲こそ形式的には教科書レベルを逸脱しない範囲でしたが、しかし近年のセンター試験の出題では、検定教科書では説明の短いような細かな知識すらも出題してくる事があり、教科書の知識にプラスアルファ的な対策を取らないと点数がとりづらい試験でした。大学入学共通テストは、それに加えて思考力を問う問題を課すことになっており、目標平均点もセンター試験より低い点数が設定されており、センター試験よりもやや難しい問題になると想定されています。それゆえに受験産業が危機感を煽って低学年次からの共通テスト対策特化講座を開きますが、しかし、これを鵜呑みにするのは得策ではありません。共通テストばかりに気を取られると、共通テスト以外の他の大学受験問題に対応できなくなるリスクが高くなります。もし共通テストだけに専念してしまい、二次試験対策を怠る(おこたる)と、志望できる大学や志望学部がごくわずかに限られてしまいます。同様に、少数の科目に絞って学習してしまうのも、出願できる大学の幅を減らすことになり危険です。 なので、1,2年生にとっての共通テスト対策は、一般的な普通科高校の2年の終わりまでに習う科目で、いわゆる「教科書レベル」に(検定教科書にある問題 や 教科書会社などの出版する基礎ドリル・ワークブックの問題集レベル)、まずは対応できるという状態を作っておくことが先決です。もし、その状態を作っていない状態で3年生を迎えてしまうと、残り1年では共通テストの問題には対応できません。ただし、センター試験にはなかったような独特の形態の問題が出題されることが予定されていますので、受験産業の低学年からの共通テスト対策を利用し、入試傾向を確認するのは有効でしょう。 * 「センター試験レベル」とは かつてのセンター試験は大学受験の登竜門として多くの受験生にかかわるために、しばしば易しい入試問題の代名詞として「センター試験レベル」ということばだけが独り歩きしがちでした。しかし、この代名詞の使いかたは、ほぼ間違っています。なぜなら、センター試験はマークシート式なので用語の暗記の負担が少ないので一見すると簡単そうに思われますが、そのぶん細かい知識を問う出題も多いので(実際のセンターの出題で、いちぶの教科書会社の検定教科書の章末コラムにしか書いてない知識を問うような出題すら、2010年以降の近年のセンター試験にも散見されました)、なので一般的な普通科高校の定期試験レベルのものを想像するのは誤りです。その上、高校で学習する全範囲から出題されることも相俟って(あいまって)、しかるべき対策を取らなければ高得点は望めない試験でした。さらに、30年にわたって行われてきた中で、受験生が対策を取るのとイタチごっこをする形で難易度も大きく変化していますので、過去の認識で話をしている大人の言うことを鵜呑みにはできない難易度でした。過去、センター試験よりさらに以前に実施されていた共通一次試験の難易度が比較的に低めだったため、その頃のままの認識でいる大人も多かったのですが、しかしその認識はマチガイであり、難易度の傾向としてセンター試験は共通一次試験よりも難しくなっていました<ref>[http://agora-web.jp/archives/2043766.html 『「共通一次より現在のセンター試験の方が遥かに難しい」という意外な事実』物江 潤 ] 2020年01月15日 06:00 の記事。2020年4月26日に確認。 </ref>。 センター試験の問題の難易度は、年ごとにもかなりのばらつきがありました。大学入試センターは毎年の平均点を公開していますので、センター試験の問題で過去問演習をする際は平均点を参考に、自分が解いている問題は難易度が高かったのか低かったのかも見ることで、実力を過信したり過剰に不安になったりすることを防ぐことができます。なお、共通テストはセンター試験よりもさらに難しい出題となることが予定されています。 共通テストを終え、自己採点後に出願校を検討する際にも、自分の取った点数をどう評価するかを考えるためには、受験生全体の傾向を知ることが必要になります。ただし、予備校による「センターリサーチ」や、それをもとにした「バンザイシステム」などの合否判定システムは非常に多くの受験生が参考にするため、額面通りに受け止めて出願する受験生が多ければその受験生たちは失敗しやすくなります。データを参考にすることは必要ですが、データに振り回されないようにすることも必要です。 * センター試験の過去問集について 大学入試の過去問といえば二次試験対策では(教学社の)「赤本」が有名です。センター試験の「赤本」ももちろん出版されています。しかし、センター試験の過去問集は他社からも刊行されていますので、解説の質や掲載年数をよく比較してから購入するのがよいでしょう。また、過去問以外にも、出版社独自に作成したマーク型問題を集めた問題集や、予備校が出版するマーク型模擬試験の過去問集も発売されています。現行カリキュラムで有効な過去問は数が限られていますので、過去問だけでなくこれらの問題集も必要に応じて活用するとよいでしょう。ただし、共通テストはセンター試験にはなかった形態の問題も出題される予定ですので、注意が必要です。 * 理科の科目について かつては物化生地それぞれの科目の前半部に当たる「○○I」(たとえば「生物I」)という名前の科目しかセンター試験では出題されませんでしたが、現在では後半部も含めたその科目のすべての範囲が出題範囲となる科目も設定されており、たとえば「生物」のように科目名の語尾に何もつかない「○○」という科目がそれです。理系学部を受験する場合はこちらを受験することが必須であり、以前よりも負担が増えています。大人のなかには、最近の受験の変化についていけていない、よくわかっていないことを言う人がいるので、高校生・受験生は、わかってない大人に惑わされぬよう注意が必要です。また理系の場合、大学によっては「共通テストでは物理受験が必須。加えて、もう生物・化学・地学のうち1つ」のように、学科に関係の深い科目が共通テスト必須になっていることもよくありますのでこちらも要注意です。文系の場合は「○○基礎」を受験すればよく、これはかつての「○○I」よりも狭い範囲ですが、その代わり「○○基礎」を1科目単独で受験することは不可能で、2科目セットでの受験となりますので、これもやはりかつての受験生よりは負担増になっています。 * 地歴公民の科目について 地歴公民は文系の場合は2科目、理系の場合は1科目受験することが必要なことがほとんどです。その際、地歴のA科目(2単位科目)はいちおう共通テストで設定されてはいますがこちらを使用可能な大学はほとんどありませんので、地歴を使用する場合は必ず4単位のB科目を受験する必要があります。 公民の場合は、2単位科目の「現代社会」「倫理」「政治経済」を使用可能な大学と、4単位科目の「倫理、政治経済」しか認めないという大学に分かれており、難関大は後者が多くなっています。したがって、そのような大学の文系を受験する場合は「倫理、政治経済」の受験がほぼ必須と言えます。理系であれば「倫理、政治経済」にするか地歴のBにするかを選ぶことができますので、地歴Bを受験するのが一般的ですが、「倫理、政治経済」を受験しても構いません。 出題傾向は、センター試験では長らくいわゆる「知識問題」「暗記問題」が多くを占めていました。しかし、共通テストでは思考力を問う問題を増やすことが予定されており、既にセンター試験末期にもその傾向は見られます。ただし、科目の特性として、いわゆる「暗記問題」がまったくなくなることもないだろうと思われます。 * まとめ 以上を踏まえたうえで最も重要なことは、けっして受験校が絞られる前から早々に科目を絞らないことです。受験校の最終決定は共通テスト後にしかできませんが、このとき受験した科目が少なかったために不本意な出願をせざるを得なくなることが少なくありません。特に高校1・2年次に科目を絞るなどは論外ですので、塾などのそのような指導を鵜呑みにしないように気をつける必要があります。 * その他、英語外部試験の導入などについて 共通テストの導入と併せて、当該年度内に受験した英語の民間試験の成績を大学入試に用いることが予定されていました。おおむね英検準2級から2級に対応するCEFR A2相当は取得しておくことが、国公立大学を受験するうえでの必要条件となりそうな状況でしたが、そのようなことを全受験生に課すことは受験生の負担が大きすぎることへの批判などから、この計画の初年度からの導入は見送られています。一部大学でさらに上のCEFR B2程度以上で英語の試験を満点扱いにするなどと言った措置は見られますが、限定的です。このような非常に高いレベルを目指すよりは他教科の学習をする方が多くの人にとっては効率的ですので、英語外部試験は闇雲に受験するのでなく、戦略的に行う必要がありそうです。 == 二次試験の科目選択 == 国公立大学二次試験で用いることになる科目は、もちろん個別の大学ごとに千差万別ですが、文系理系ごとの大まかな傾向についてここで述べます。 * 文系 文系では、国英が主要教科です。特に英語を用いずに済むことはまずありませんので、英語が弱点の場合はこれを克服することが最重要課題です。それに加え、難関大や経済学部の場合は数学が加わります。地歴を用いる大学もありますが、教員養成大学の社会科課程を中心とする少数の大学のみです。 他に、近年は小論文を使うことが少なくありません。教科の名前がついていても実態としては数百字の文章を書かせるという大学もあり、国語での論述も含め、作文能力は受験生の思っているよりも多くの大学で問われていると言えます。 * 理系 理系では、英数が主要教科です。数IIBまでか数IIIまでかは大学・学部によりますが、ほとんどの大学では数学IIIまでです。また、進学後のことも考えれば数IIIまでをきちんと学習しておくに越したことはありません。加えて理科も非常に多くの大学で課されますが、2科目要求されるセンター試験とは異なり、その学科で特に必要となる1科目のみというのが主流です(難関大では2科目を要求されます)。二次試験の理科では、物理や化学、生物のように、『〇〇』科目を要求するのが一般的です。 加えて国語を課す大学もありますが、これは少数派です。医療系では面接が課されることがしばしばあり、これも対策が必要です。 == 過去問の使い方 == 志望校の過去問よりも、まずは市販の問題集で、解説付きの問題集を重視して使用したほうがよいです。なぜなら過去問とは、まず出題傾向や難度のレベルを調べるためのものであり、当然ですが使用者の学力向上を第一目的としたものではありません。 過去問集にも解説などはありますが、参考書と比べたら解説も少ないし、また出題範囲も志望校のものに片寄っています。しかも、たいてい入試問題が難しめなので、初心者には学習の効率が悪いです。基本的には、あまり難関校の問題に挑戦するよりも、むしろ入試平均レベルの問題で良いから多くの問題を確実に解けるようにしたほうが、多くの大学の入試では有利な場合が多いです。 もちろん、大学ごとの出題傾向は固定化されている場合がかなりありますので、過去問練習は、けっして、まったくの無駄にはなりません。要は、使い方だということです。 なお、センター試験の過去問などは、試験馴れの目的も含めて、少なくとも過去数年分のセンター過去問ぐらいは練習したほうが良いでしょう。ただし、センター過去問を使う場合であっても、あくまで過去問は、まず出題傾向などを確認したり、苦手分野を確認して復習するべき分野を探すためのものであり、過去問を解くだけでは、あまり学力は上がりません。 もし、センター対策の問題練習をするなら、実際のセンター過去問ばかりをするよりも、「センター対策」などと書かれた参考書を読んだりした上で、「センター対策」などと銘打った予想問題集に掲載された問題を解くほうが、より効率的かもしれません。 == 検定教科書の難易度 == 検定教科書には、難易度に差をつけた、いくつかの種類の教科書があります。教科書会社ごとの違いだけでなく、同じ教科書会社が複数種類の難易度の教科書を出版している場合もあります。たとえば山川出版の世界史Bの検定教科書には、同じ「世界史B」科目でも、難度別の3種類の検定教科書があります。これらの中から、学校ごとに、その学校の教員が適切と考える教科書を選定し、採用しています。 このことは、生徒はそこまで気にする必要はありません。あくまで高校で与えられた教科書に従って学習するのが基本です。いずれにせよ、検定教科書だけでなく、参考書や問題集なども、受験合格のためには勉強する必要が生じます。 ただし、センター試験の出題範囲が、多くの科目で基本的に検定教科書の内容にもとづいているので、受験生側もある程度は、自分の出身高校以外で使われてる検定教科書での記述の傾向を知っておく必要があります。とはいえ、それらの傾向は市販のセンター対策と銘打ってる参考書でおおむね把握できますので、わざわざ検定教科書を実際に買い足す必要も、あまりありません。 受験生の入試傾向の情報収集としては、基本的に参考書で傾向を情報収集しつつ、出版状況がどうしても市販の参考書では不十分な状況にあると思われる科目の場合にだけ、自分の高校以外で使われている検定教科書も1〜2冊ほど購入して通読すれば、傾向の把握としての教科書の読み込むとしては充分でしょう。検定教科書ばかりでなく、実際にセンター試験の過去問や志望大学などの過去問から、情報収集する必要があります。 なお、もし高校卒業後に浪人や再受験をしていて、検定教科書を買いたい場合などで、しかし高校現役時代と受験科目が変わるなどして、どの検定教科書を買えばいいのかが、よく分からなければ、とりあえず地元の進学校で採用している教科書を買うなどすれば、良いでしょう。 なお、受験勉強法の書籍などで、難関大学の合格者インタビュー結果として「受験勉強なんて、検定教科書の予習復習だけで完璧」などと言われている場合、これは比較的難易度の高い検定教科書を想定しているでしょうから、この点には注意が必要です。 == 塾・予備校の注意点 == ;塾生1人でなん十個も大学受験する可能性 合格実績を「水増し」(みずまし)をしている塾などが過去にはありました。具体的には、たとえば1人のいちばん好成績の塾生に、塾が30大学などの受験量を出して各大学を受験させて、その塾からの合格した「大学数」の実績をかせぐ方法です。合格人数はたった1人でも、この方法を使えば、たとえば30倍の大学数に増加できます。せめて、合格した人数を見ましょう。上位10名の生徒が30大学に合格すれば、300大学ぶんのカウントになりますので、事情の知らない人はあたかも300人が合格したかのように錯覚する、という手口です。 ;模試は塾生でなくても受けられる 水増しではないですが、模試をしている予備校については、模試と予備校生とを混同しないようにしましょう(ときどき混同する人がいるので、念のため注記)。他の予備校に通っていても模試を受けられます。たとえば駿台(すんだい)模試を受験するのに駿台予備校の予備校生になる必要はないです。たとえば、河合塾(かわいじゅく)に通ってる人が駿台模試を受験しても、別に構わないのです。どこの予備校に通ってなくても、駿台や河合塾の模試を受けられます。 ;付属校・指定校の合格が混ざる可能性 ほか、大学の付属高校などの子でも塾に通うことがあるので(付属校には内部進学用のテストがある場合もあるので、その対策として塾に通う場合があります)、注意が必要です。たとえば「塾生が早慶マーチに合格した」と宣伝されても、もとから早慶マーチの付属校や指定校に通っている場合もあります。一般受験での合格とは限りません。 ;高校・学習指導要領の無視・妨害 塾や予備校の中には、不適切な指導をするところもあるので、注意が必要です。生徒にはまず学校での学習があり、他科目の学習があるということを無視して、いたずらに自分の担当科目の、自分の塾オリジナルの、不必要な難問を含んでいたりする教材を勉強させたり、大量の宿題を要求したりする指導などが代表的でしょう。志望校や受験校の選択についても、過度に現役合格にこだわるあまり不適切な指導をする事例がよく聞かれます。こういった指導をする塾や予備校は、市場原理で淘汰されてはいるものの、根絶されてはいません。その塾・予備校に相談しても改善が見られない場合、保護者に相談して、他の塾・予備校に変えるなどの対策が必要です。 == 入試範囲外の学習について == 入試範囲外の知識があることで解きやすくなる問題が、しばしばみられます。 よくあるのが、高校の範囲内だが他科目の範囲である知識があると解きやすくなる入試問題です。具体的には、現代文や英語の文章でありながら様々な分野の基本的な知識があると読みやすくなるもの、物理基礎・化学基礎・生物基礎の問題でありながら物理・化学・生物の知識があると解きやすくなるもの、数学IIの問題でありながら数学IIIの知識があると解きやすくなるなるもの、などなど。こういった入試問題でも、原理的には出題範囲の科目の高校参考書の知識だけで解けるように作られていますので、対応するための特別な学習は必要ありません。あえて言うならば、入試科目ではなくても、高校教育で履修する科目の学習はすべて大切にすることが、こういった問題への最も有効な対策と言えるでしょう。 また、大学で習う知識をあつかった入試問題もありますが、そのような入試問題は、高校の教科書・参考書の範囲内で解けるよう、適切な誘導がされています。さらに、高校生用の受験参考書や平均レベルの問題集でも、入試に出題されやすい大学レベルの背景知識には触れている場合が多いので、わざわざ難解な大学生向けの教科書を購入する必要は全くありません。 そもそも、大学レベルの話題をあつかった入試問題といっても、大学で習う用語や公式などを丸暗記しただけで解けるというものではありません。たとえば、大学で学ぶ公式の導出が問題になることがあります。あるいは、そのような公式をあらかじめ問題文中に提示して、代入して使わせることでより難しい問題へのヒントとするような出題もあります。高校で学ぶ知識のみでは計算が大変だが、問題文中に書かれていない大学で学ぶ公式を使うと計算がショートカットできるという問題もないわけではありませんが、そのような公式を使用した答案は、適用可能な条件を満たしているかをきちんと確認しているかも含め、厳しい採点基準で採点されると言われています。 == 参考文献・脚注など == [[カテゴリ:大学入試]] 3o9og86ecy52l0v8j9pjliupi9jiyp2 246686 246685 2024-04-14T06:54:57Z すじにくシチュー 12058 /* 塾・予備校の注意点 */ wikitext text/x-wiki == 傾向と対策 == === 傾向 === 大学入試の出題について、文部科学省の通知文である「大学入学者選抜実施要項」には次のように記載されています。<ref>[https://www.mext.go.jp/a_menu/koutou/senbatsu/mxt_kouhou02-20200619_1.pdf 令和3年度大学入学者選抜実施要項について(通知)]</ref> :以下の三つの要素のそれぞれを適切に把握するよう十分留意する。 :(中略) :① 基礎的・基本的な知識・技能(以下「知識・技能」という。) :② 知識・技能を活用して,自ら課題を発見し,その解決に向けて探究し,成果等を表現するために必要な思考力・判断力・表現力等の能力(以下「思考力・判断力・表現力等」という。) :③ 主体性を持ち,多様な人々と協働しつつ学習する態度 「知識・技能」の部分はいわゆる教科書通りの問題、「思考力・判断力・表現力等」の部分が教科書よりもやや難しく感じられる出題を指すと解することができます。実態としては、知識ではなく思考力・判断力を問おうとして出題した問題が、しばしば意図に反して検定教科書の範囲よりもやや広い範囲の知識があれば解けてしまうために、そのような知識を問う問題として機能してしまうこともあります。 このような大学入試の現状から逆算して、以下のような対策が必要になるでしょう。 === 対策 === 定期テストだけで受験対策するのは大学入試ではほぼ無理ですが、かといって、平均的な高校の定期テストの問題すらも解けないような学力では、大学受験には対応できません。 低学年のうちから受験の過去問ばかりをするのは非効率です。なぜなら、大学入試問題は難しく、学力が足りない低学年のうちから読みこんでも意味不明であり、そのような段階では過去問が学力の習得に役立たない可能性が高いからです。まずは、定期テスト程度なら8割ほどは楽に解ける、という状態を作るべきです。そのために、まずは定期テスト対策の学習をきちんとする必要があります。 定期テストだけに特化した、その場しのぎの学習は非効率です。最終的な目標は、けっして定期テストの問題を解けるようになることではありません。当面の中間目標として、定期テスト程度の易しい問題なら楽に解けるという状態を作ることを目指しているのです。日頃からの学習の積み重ねが物を言います。 == 定期テストを活用する == 高校にもよりますが、平均以上のレベルの高校の1年生や2年生の定期テストの出題範囲は、授業で習った範囲を基準にしつつも、参考書などで紹介されている基礎事項も少しだけ出題するという場合が多いでしょう。ほとんどの高校の場合、定期テストはその単元の理解を確認するテストであり、易しい問題が中心でしょう。定期テスト対策の勉強法は、数学・理科・地歴公民については、教科書を理解をするために読み込みつつも、参考書もその単元について1冊は読んで、そしてワークブックなどで問題練習する事です。 以下で教科ごとの学習法について詳しく述べます。 === 国語 === :教科書以外に必要なもの - 参考書、ワークブック、漢字ドリルなど. 古文・漢文については、まずは単語と文法事項の理解を深めます。英語と比べれば覚えるべき事項はとても少ないですので、完璧にすることです。なまじっか日本語だからと言ってこのような学習を軽視する人がいますが、それは後々になって大きなビハインドになります。そのうえで、教科書の作品を丁寧に口語訳しながら読解することで、当時の人が持っていた常識的感覚を体得します。このような基本に忠実な学習を繰り返していかないと、初見の文章を読めるようにはなりません。古典は作品数が有限ではありますが、かなり大きな有限ですので、入試において初見の文章を読む覚悟はしておかなくてはいけません。初見の作品であっても、当時の人に好まれたよくある作品のパターンには収まっているものが多いです。文法に加えてそのパターンを体得していれば、読解は難しくありません。 現代文についても、評論については典型的な論の運び方のパターンを、小説においては典型的な作家の表現のパターンを、それぞれ読解の数をこなす中で体得することが重要です。なんとなく、ではなく、根拠をもってその論・表現の意図を説明できるようにしておきましょう。ある程度以上の大学の記述試験では、まとまった論述も求められます。読解するだけでなく、その内容を要約して表現する作文力も求められるということです。自分の感想はさておいて、筆者は何を言っているのか、作者はどのような意図で表現しているのか、冷静な筆致で表現できなければなりません。これには、相応の練習が必要です。もちろん、それ以前に正確な読解が必要なのは言うまでもありません。 漢字は、覚えるしかないので、漢字ドリルなどで出題されてる漢字を、きちんと練習しましょう。 === 英語 === :教科書以外に必要なもの - 参考書および'''単語帳'''. 英語の場合、単語力の欠如が文法や読解の学習を妨げるので、とにかく単語力が大切です。 英語の教科書だけでは文法などの解説・問題例がやや足りないこともあり、参考書などで補ってください。 長文読解や解釈に関しても、一般の検定教科書や学校で配布される問題集では不足があるので、必要に応じて問題集を利用しましょう。 === 数学 === :教科書以外に必要なもの - 参考書(ただし問題集付きおよび'''解説付き'''の物). 数学の場合、教科書レベルの練習問題〜発展問題を解ければ定期テスト対策としては充分なのですが、その教科書レベルを理解するのが手間取ります。 数学の教科書レベルを理解するためには、教科書の練習問題や応用問題・発展問題などをきちんと練習したうえで、さらに参考書でその単元の基本問題や練習問題を補えば、たいてい定期テスト対策としては充分でしょう。数学の参考書の場合、基礎レベルの参考書自体がワークブック的な問題集の機能も兼ているので、ワークブックは別途は必要ありません。数学の場合、問題練習に時間が掛かるため、参考書は当面は1冊で充分です。数学の参考書を買う際は、問題に答えと解説が付いているものを選んでください。数学の高校参考書では、普通の厚めの参考書なら、問題の答えと解説が付いていますので、買う際はそれを買います。参考書の発展レベルは、定期テスト対策では不要です。低学年では、数学参考書の発展レベルに深入りするよりも、他教科の勉強に時間を掛けるべきでしょう。 === 地歴公民 === :教科書以外に必要なもの - 平易な参考書(実質的にはセンター対策本)または別の教科書出版社の教科書、ワークブック. 地歴公民の理解を深める手っ取り早い方法は、教科書の他に、もう1冊、参考書か別の教科書出版社の教科書を読む方法です。重要事項や基礎事項はどの教材でも触れられているので、複数冊を読むことで繰り返し学習することになり、記憶が定着します。一方、発展的な事項や、著者や出版社によって視点や意見が分かれるような題材については、複数冊を読むことによって、さまざまな視点で読めることになるので、理解が深まります。参考書を買う場合は、とりあえず、短かめの参考書を買うのが良いでしょう。「センター試験対策」などと銘打った参考書が、わりと短めなので、まずは、それを買うと良いかもしれません。片っ端から全てを覚えるのは非効率なので、まずは基礎的な事項を重点的に説明した、入門的な参考書があると便利です。加えて地歴公民では、内容の理解はもちろん必要なのですが、しかし実際のテストでは定期テストでも入試でも、用語の漢字などでの書き取りを問う出題も多いので、書き取り練習なども必要です。 ニュース、一般の歴史評論書や経済評論書などは、学習に取り入れる必要は原則としてありません。受験向けにまとめられた教科書や参考書を複数買って読んで読み比べるほうが、受験勉強としてより効率的です。 時事問題の関連知識が必要な場合、書店で市販されている『現代社会』資料集などが時事問題を解説していたりします。また、中学入試や高校入試対策の教材で、時事問題の解説をした教材が市販されていますので、それらを参考にすれば十分でしょう。 === 理科 === :教科書以外に必要なもの - 参考書および、ワークブックまたは簡単な問題集. 理科の学習法は、手短かに言うと、数学と地歴公民の中間です。問題練習をしつつも、用語などは暗記しなければなりません。物理については、数学に勉強法が近いです。生物については、やや地歴公民に勉強法が近くなります。化学の勉強法は、物理と生物の中間、といったところでしょう。 なお、もし理系の大学を進学志望する場合、大学では生物の勉強法が化学に近付いていき、化学の勉強法が物理に近付きますので、高校では物理・化学・生物の学習は、どれもサボらずに、高校必修の範囲は、ひととおり勉強しておきましょう。 さて、テレビのニュースなどでノーベル賞など科学的な話題を見ることがあると思いますが、それらの報道を追いかける必要は基本的にありません。いわゆる時事問題のように、そういった事柄が直接問題になるということはまずないからです。ただし、そういった時事ネタを元に入試問題が作成されることもあります<ref>2019年度 早稲田大学基幹/先進理工学部 生物 第3問(2017年ノーベル生理学・医学賞に関する問題)など</ref>し、理科への意欲も深まるでしょうから、知ってて損をすることもないでしょう。 == 参考書・問題集を使った学習 == 学校ですでに習い終わった単元については、定期テスト程度なら楽に解ける、という状態になったら、プラスアルファの学習をしましょう。そのためには、教科書以外の参考書・問題集を用意する必要があります。 参考書は、あまりたくさん用意する必要はありません。1冊では心もとないというなら2冊程度はあってもいいですが、参考書を読む以外にも問題練習などもしなければならないので、あまり多くの参考書を読めません。細かな理解は、問題練習などを通して、これから深めていきます。 また、英語では参考書の他にも単語集・熟語集、社会科では用語集や日本史の史料解説集、などのように、各科目ごとに、その教科のメインの参考書以外にも補助教材がいずれ必要になるので、それを忘れないようにしましょう。入学当初は参考書だけでも構いませんが、いずれ単語集や史料集などの補助教材を利用する必要が出てきます。 参考書を読むだけでなく、問題演習も必要です。"定期テスト対策"の問題集・ワークブックしか入手してない場合、それとは別に、"入試対策"用の問題集を入手してください。入試対策用の問題集の選択には、まずは平均的な難度の大学向けの問題集でよいので、問題集を入手して、問題練習してください。この「標準的」とされる「入試」対策用の問題集ですら、現役の高校生には、かなり難しいです。なので、まだ「難関校むけ」の問題集には取り掛からないほうが良いでしょう。たとえ難関校を志望する場合ですら、入試問題には標準難度の大学の入試問題を解く能力も、要求されます。なので、志望校が難関校か中堅校かの、どちらにせよ、平均的な難度の入試対策問題集を楽々解ける能力が、受験生のころまでに必要になります。難関校向けの問題集よりも、まず先に "標準レベル" の入試対策問題集を使用してください。 予習については、先取り学習もしたほうが色々な理由で効果的な部分はあります<ref>船登惟希『改訂版 高校の勉強のトリセツ』、GAKKEN、48ページ</ref>ので、余力がある人は参考書を使い概要の把握程度の予習をするのもよいでしょう。教科書の後ろのほうの単元などは問題練習不足などにもなりやすく、概要程度を一通り早めに全体像を把握することができればそのような事態を防ぐことができます<ref>船登惟希『改訂版 高校の勉強のトリセツ』、GAKKEN、48ページ</ref>。ただし一方で、積み上げによる学習が必要とされる教科において、前の単元の理解が不十分なままに先の単元の「予習ごっこ」をするのは非効率です。そのような事態に陥らないよう、先生などの指導者のアドバイスを受けながら進めるのがよいでしょう。 == ノートづくりを目的にしてはならない == 記憶の定着を図るために、授業の内容などをノートにとっても良いでしょう。あるいは、参考書の語句および、その語句などの手短な解説などを、ノートなどに取っても良いでしょう。でも、ノートづくりを目的にしてはいけません。色鮮やかな自己満足ノートを作るのは時間の無駄です。その結果、学習者は知識が片寄ってしまいます。そのようなノートづくりをするよりも、語句の書き取り練習とか、あるいは問題練習などに時間を割いたほうが良いでしょう。 == 小論対策で読書するなら志望学科から逆算 == そもそも論として、参考書以外の読書はあまり受験対策には必要ないのですが(参考書などにある普通の知識のほうが出題頻度が高いので)、どうしても小論文などの対策として読書をする場合、注意事項として、 :入試の小論文では、志望の学科に関するテーマの小論が要求される、 という事をふまえる必要があります。 たとえば、もし経済学部や法学部などの社会科学っぽい学部を目指しているのに、文学小説や世界文学全集などを読み漁っても、それを経済学部・法学部などの入試の小論で活用するのは、かなりの難しさです。よほどの天才的な読書家でない限り、小説の知識などをもとに社会問題についての意見の小論を、受験できちんと得点できる水準で書くのは、まず無理です。 入試では「国語」科目で小論文が扱われる場合も多いのですが、だからといって文芸小説の小論だと勘違いしないよう、気をつけましょう。 基本的に、志望学科から遠い内容の文献をもとに論述をされても、あまり印象は良くないと思います。なぜなら、分野が違うと求める目標も違うので、異分野の文献をもとに小論をするのは、かなりの難しさです。 経済学部志望で法律学書の知見をもとに書くくらいならまだしも、経済学部志望なのに文学書や美術書や音楽書などの知見をもとに小論を述べるのは、一般入試では、かなりの難しさでしょう(ただし、スポーツ推薦とか文化活動推薦とかで志望する場合は、別かもしれません。この節では、一般入試の場合を述べています。) また、理工学部および理学部または工学部の入試では、めったに小論文は出ません。日本では、理系の学部のほとんどは理工系または情報系です。医療系の学部や、よほどの難関大の理系の学部でないかぎり、一般入試では小論文は出ないのが普通です。 == 模試の使いかた == 予備校などが、受験生の試験なれのため、入試などを真似た模擬試験(略して「模試」)を有料で行っています。 模擬試験の使い道とは、受験科目のなかで自分のまだ習得できてない単元をみつけて、その苦手分野をこれから復習すること、日本全国の受験生のなかで、自分がどれくらいの学力にあるかを調べることです。 模擬試験を受けるだけ受けても復習をしなければ、せっかく受けた模擬試験は、ほぼ無意味になります。学力をあげる方法とは、あくまで参考書などを読んだり、計算練習するなどの予習・復習であり、けっして模擬試験そのものは学力向上の手段ではありません。参考書を一度も読まずに「模試だけを何度も受けて、答えのパターンごと覚えよう」などという学習法では、学習すべき全範囲を網羅することができません。 == 大学入学共通テスト対策 == 大学入学共通テストは、国公立大学の受験をするなら避けては通れません。 ほぼすべての国立大学で、共通テストは5教科(国語・数学、英語、地歴公民、理科)が要求されます。このため国立志望では、共通テスト対策として、5教科をまんべんなく勉強する必要があります。 共通テストと二次試験の比率は大学により異なりますが、共通テストの比率の高い大学ではほぼ共通テストだけで決まると言えるところもあります(ただし難関大は二次試験重視が一般的)。また、一部の大学では共通テストの得点がある基準点に達していることを要求したり、共通テストの得点である一定の倍率まで絞ってしまう、いわゆる「足きり」と呼ばれる制度があります。また、近年 拡大傾向にある私大の共通テスト利用入試に活用することもできるため、ますます重要性が上がっています。 共通テストは、かつて行われていた大学入試センター試験にあたるものです。センター試験は、出題範囲こそ形式的には教科書レベルを逸脱しない範囲でしたが、しかし近年のセンター試験の出題では、検定教科書では説明の短いような細かな知識すらも出題してくる事があり、教科書の知識にプラスアルファ的な対策を取らないと点数がとりづらい試験でした。大学入学共通テストは、それに加えて思考力を問う問題を課すことになっており、目標平均点もセンター試験より低い点数が設定されており、センター試験よりもやや難しい問題になると想定されています。それゆえに受験産業が危機感を煽って低学年次からの共通テスト対策特化講座を開きますが、しかし、これを鵜呑みにするのは得策ではありません。共通テストばかりに気を取られると、共通テスト以外の他の大学受験問題に対応できなくなるリスクが高くなります。もし共通テストだけに専念してしまい、二次試験対策を怠る(おこたる)と、志望できる大学や志望学部がごくわずかに限られてしまいます。同様に、少数の科目に絞って学習してしまうのも、出願できる大学の幅を減らすことになり危険です。 なので、1,2年生にとっての共通テスト対策は、一般的な普通科高校の2年の終わりまでに習う科目で、いわゆる「教科書レベル」に(検定教科書にある問題 や 教科書会社などの出版する基礎ドリル・ワークブックの問題集レベル)、まずは対応できるという状態を作っておくことが先決です。もし、その状態を作っていない状態で3年生を迎えてしまうと、残り1年では共通テストの問題には対応できません。ただし、センター試験にはなかったような独特の形態の問題が出題されることが予定されていますので、受験産業の低学年からの共通テスト対策を利用し、入試傾向を確認するのは有効でしょう。 * 「センター試験レベル」とは かつてのセンター試験は大学受験の登竜門として多くの受験生にかかわるために、しばしば易しい入試問題の代名詞として「センター試験レベル」ということばだけが独り歩きしがちでした。しかし、この代名詞の使いかたは、ほぼ間違っています。なぜなら、センター試験はマークシート式なので用語の暗記の負担が少ないので一見すると簡単そうに思われますが、そのぶん細かい知識を問う出題も多いので(実際のセンターの出題で、いちぶの教科書会社の検定教科書の章末コラムにしか書いてない知識を問うような出題すら、2010年以降の近年のセンター試験にも散見されました)、なので一般的な普通科高校の定期試験レベルのものを想像するのは誤りです。その上、高校で学習する全範囲から出題されることも相俟って(あいまって)、しかるべき対策を取らなければ高得点は望めない試験でした。さらに、30年にわたって行われてきた中で、受験生が対策を取るのとイタチごっこをする形で難易度も大きく変化していますので、過去の認識で話をしている大人の言うことを鵜呑みにはできない難易度でした。過去、センター試験よりさらに以前に実施されていた共通一次試験の難易度が比較的に低めだったため、その頃のままの認識でいる大人も多かったのですが、しかしその認識はマチガイであり、難易度の傾向としてセンター試験は共通一次試験よりも難しくなっていました<ref>[http://agora-web.jp/archives/2043766.html 『「共通一次より現在のセンター試験の方が遥かに難しい」という意外な事実』物江 潤 ] 2020年01月15日 06:00 の記事。2020年4月26日に確認。 </ref>。 センター試験の問題の難易度は、年ごとにもかなりのばらつきがありました。大学入試センターは毎年の平均点を公開していますので、センター試験の問題で過去問演習をする際は平均点を参考に、自分が解いている問題は難易度が高かったのか低かったのかも見ることで、実力を過信したり過剰に不安になったりすることを防ぐことができます。なお、共通テストはセンター試験よりもさらに難しい出題となることが予定されています。 共通テストを終え、自己採点後に出願校を検討する際にも、自分の取った点数をどう評価するかを考えるためには、受験生全体の傾向を知ることが必要になります。ただし、予備校による「センターリサーチ」や、それをもとにした「バンザイシステム」などの合否判定システムは非常に多くの受験生が参考にするため、額面通りに受け止めて出願する受験生が多ければその受験生たちは失敗しやすくなります。データを参考にすることは必要ですが、データに振り回されないようにすることも必要です。 * センター試験の過去問集について 大学入試の過去問といえば二次試験対策では(教学社の)「赤本」が有名です。センター試験の「赤本」ももちろん出版されています。しかし、センター試験の過去問集は他社からも刊行されていますので、解説の質や掲載年数をよく比較してから購入するのがよいでしょう。また、過去問以外にも、出版社独自に作成したマーク型問題を集めた問題集や、予備校が出版するマーク型模擬試験の過去問集も発売されています。現行カリキュラムで有効な過去問は数が限られていますので、過去問だけでなくこれらの問題集も必要に応じて活用するとよいでしょう。ただし、共通テストはセンター試験にはなかった形態の問題も出題される予定ですので、注意が必要です。 * 理科の科目について かつては物化生地それぞれの科目の前半部に当たる「○○I」(たとえば「生物I」)という名前の科目しかセンター試験では出題されませんでしたが、現在では後半部も含めたその科目のすべての範囲が出題範囲となる科目も設定されており、たとえば「生物」のように科目名の語尾に何もつかない「○○」という科目がそれです。理系学部を受験する場合はこちらを受験することが必須であり、以前よりも負担が増えています。大人のなかには、最近の受験の変化についていけていない、よくわかっていないことを言う人がいるので、高校生・受験生は、わかってない大人に惑わされぬよう注意が必要です。また理系の場合、大学によっては「共通テストでは物理受験が必須。加えて、もう生物・化学・地学のうち1つ」のように、学科に関係の深い科目が共通テスト必須になっていることもよくありますのでこちらも要注意です。文系の場合は「○○基礎」を受験すればよく、これはかつての「○○I」よりも狭い範囲ですが、その代わり「○○基礎」を1科目単独で受験することは不可能で、2科目セットでの受験となりますので、これもやはりかつての受験生よりは負担増になっています。 * 地歴公民の科目について 地歴公民は文系の場合は2科目、理系の場合は1科目受験することが必要なことがほとんどです。その際、地歴のA科目(2単位科目)はいちおう共通テストで設定されてはいますがこちらを使用可能な大学はほとんどありませんので、地歴を使用する場合は必ず4単位のB科目を受験する必要があります。 公民の場合は、2単位科目の「現代社会」「倫理」「政治経済」を使用可能な大学と、4単位科目の「倫理、政治経済」しか認めないという大学に分かれており、難関大は後者が多くなっています。したがって、そのような大学の文系を受験する場合は「倫理、政治経済」の受験がほぼ必須と言えます。理系であれば「倫理、政治経済」にするか地歴のBにするかを選ぶことができますので、地歴Bを受験するのが一般的ですが、「倫理、政治経済」を受験しても構いません。 出題傾向は、センター試験では長らくいわゆる「知識問題」「暗記問題」が多くを占めていました。しかし、共通テストでは思考力を問う問題を増やすことが予定されており、既にセンター試験末期にもその傾向は見られます。ただし、科目の特性として、いわゆる「暗記問題」がまったくなくなることもないだろうと思われます。 * まとめ 以上を踏まえたうえで最も重要なことは、けっして受験校が絞られる前から早々に科目を絞らないことです。受験校の最終決定は共通テスト後にしかできませんが、このとき受験した科目が少なかったために不本意な出願をせざるを得なくなることが少なくありません。特に高校1・2年次に科目を絞るなどは論外ですので、塾などのそのような指導を鵜呑みにしないように気をつける必要があります。 * その他、英語外部試験の導入などについて 共通テストの導入と併せて、当該年度内に受験した英語の民間試験の成績を大学入試に用いることが予定されていました。おおむね英検準2級から2級に対応するCEFR A2相当は取得しておくことが、国公立大学を受験するうえでの必要条件となりそうな状況でしたが、そのようなことを全受験生に課すことは受験生の負担が大きすぎることへの批判などから、この計画の初年度からの導入は見送られています。一部大学でさらに上のCEFR B2程度以上で英語の試験を満点扱いにするなどと言った措置は見られますが、限定的です。このような非常に高いレベルを目指すよりは他教科の学習をする方が多くの人にとっては効率的ですので、英語外部試験は闇雲に受験するのでなく、戦略的に行う必要がありそうです。 == 二次試験の科目選択 == 国公立大学二次試験で用いることになる科目は、もちろん個別の大学ごとに千差万別ですが、文系理系ごとの大まかな傾向についてここで述べます。 * 文系 文系では、国英が主要教科です。特に英語を用いずに済むことはまずありませんので、英語が弱点の場合はこれを克服することが最重要課題です。それに加え、難関大や経済学部の場合は数学が加わります。地歴を用いる大学もありますが、教員養成大学の社会科課程を中心とする少数の大学のみです。 他に、近年は小論文を使うことが少なくありません。教科の名前がついていても実態としては数百字の文章を書かせるという大学もあり、国語での論述も含め、作文能力は受験生の思っているよりも多くの大学で問われていると言えます。 * 理系 理系では、英数が主要教科です。数IIBまでか数IIIまでかは大学・学部によりますが、ほとんどの大学では数学IIIまでです。また、進学後のことも考えれば数IIIまでをきちんと学習しておくに越したことはありません。加えて理科も非常に多くの大学で課されますが、2科目要求されるセンター試験とは異なり、その学科で特に必要となる1科目のみというのが主流です(難関大では2科目を要求されます)。二次試験の理科では、物理や化学、生物のように、『〇〇』科目を要求するのが一般的です。 加えて国語を課す大学もありますが、これは少数派です。医療系では面接が課されることがしばしばあり、これも対策が必要です。 == 過去問の使い方 == 志望校の過去問よりも、まずは市販の問題集で、解説付きの問題集を重視して使用したほうがよいです。なぜなら過去問とは、まず出題傾向や難度のレベルを調べるためのものであり、当然ですが使用者の学力向上を第一目的としたものではありません。 過去問集にも解説などはありますが、参考書と比べたら解説も少ないし、また出題範囲も志望校のものに片寄っています。しかも、たいてい入試問題が難しめなので、初心者には学習の効率が悪いです。基本的には、あまり難関校の問題に挑戦するよりも、むしろ入試平均レベルの問題で良いから多くの問題を確実に解けるようにしたほうが、多くの大学の入試では有利な場合が多いです。 もちろん、大学ごとの出題傾向は固定化されている場合がかなりありますので、過去問練習は、けっして、まったくの無駄にはなりません。要は、使い方だということです。 なお、センター試験の過去問などは、試験馴れの目的も含めて、少なくとも過去数年分のセンター過去問ぐらいは練習したほうが良いでしょう。ただし、センター過去問を使う場合であっても、あくまで過去問は、まず出題傾向などを確認したり、苦手分野を確認して復習するべき分野を探すためのものであり、過去問を解くだけでは、あまり学力は上がりません。 もし、センター対策の問題練習をするなら、実際のセンター過去問ばかりをするよりも、「センター対策」などと書かれた参考書を読んだりした上で、「センター対策」などと銘打った予想問題集に掲載された問題を解くほうが、より効率的かもしれません。 == 検定教科書の難易度 == 検定教科書には、難易度に差をつけた、いくつかの種類の教科書があります。教科書会社ごとの違いだけでなく、同じ教科書会社が複数種類の難易度の教科書を出版している場合もあります。たとえば山川出版の世界史Bの検定教科書には、同じ「世界史B」科目でも、難度別の3種類の検定教科書があります。これらの中から、学校ごとに、その学校の教員が適切と考える教科書を選定し、採用しています。 このことは、生徒はそこまで気にする必要はありません。あくまで高校で与えられた教科書に従って学習するのが基本です。いずれにせよ、検定教科書だけでなく、参考書や問題集なども、受験合格のためには勉強する必要が生じます。 ただし、センター試験の出題範囲が、多くの科目で基本的に検定教科書の内容にもとづいているので、受験生側もある程度は、自分の出身高校以外で使われてる検定教科書での記述の傾向を知っておく必要があります。とはいえ、それらの傾向は市販のセンター対策と銘打ってる参考書でおおむね把握できますので、わざわざ検定教科書を実際に買い足す必要も、あまりありません。 受験生の入試傾向の情報収集としては、基本的に参考書で傾向を情報収集しつつ、出版状況がどうしても市販の参考書では不十分な状況にあると思われる科目の場合にだけ、自分の高校以外で使われている検定教科書も1〜2冊ほど購入して通読すれば、傾向の把握としての教科書の読み込むとしては充分でしょう。検定教科書ばかりでなく、実際にセンター試験の過去問や志望大学などの過去問から、情報収集する必要があります。 なお、もし高校卒業後に浪人や再受験をしていて、検定教科書を買いたい場合などで、しかし高校現役時代と受験科目が変わるなどして、どの検定教科書を買えばいいのかが、よく分からなければ、とりあえず地元の進学校で採用している教科書を買うなどすれば、良いでしょう。 なお、受験勉強法の書籍などで、難関大学の合格者インタビュー結果として「受験勉強なんて、検定教科書の予習復習だけで完璧」などと言われている場合、これは比較的難易度の高い検定教科書を想定しているでしょうから、この点には注意が必要です。 == 塾・予備校の注意点 == ;塾生1人でなん十個も大学受験する可能性 合格実績を「水増し」(みずまし)をしている塾などが過去にはありました。具体的には、たとえば1人のいちばん好成績の塾生に、塾が30大学などの受験量を出して各大学を受験させて、その塾からの合格した「大学数」の実績をかせぐ方法です。合格人数はたった1人でも、この方法を使えば、たとえば30倍の大学数に増加できます。せめて、合格した人数を見ましょう。上位10名の生徒が30大学に合格すれば、300大学ぶんのカウントになりますので、事情の知らない人はあたかも300人が合格したかのように錯覚する、という手口です。 ;模試は塾生でなくても受けられる 水増しではないですが、模試をしている予備校については、模試受験生と予備校生とを混同しないようにしましょう(ときどき混同する人がいるので、念のため注記)。他の予備校に通っていても模試を受けられます。たとえば駿台(すんだい)模試を受験するのに駿台予備校の予備校生になる必要はないです。たとえば、河合塾(かわいじゅく)に通ってる人が駿台模試を受験しても、別に構わないのです。どこの予備校に通ってなくても、駿台や河合塾の模試を受けられます。 ;付属校・指定校の合格が混ざる可能性 ほか、大学の付属高校などの子でも塾に通うことがあるので(付属校には内部進学用のテストがある場合もあるので、その対策として塾に通う場合があります)、注意が必要です。たとえば「塾生が早慶マーチに合格した」と宣伝されても、もとから早慶マーチの付属校や指定校に通っている場合もあります。一般受験での合格とは限りません。 ;高校・学習指導要領の無視・妨害 塾や予備校の中には、不適切な指導をするところもあるので、注意が必要です。生徒にはまず学校での学習があり、他科目の学習があるということを無視して、いたずらに自分の担当科目の、自分の塾オリジナルの、不必要な難問を含んでいたりする教材を勉強させたり、大量の宿題を要求したりする指導などが代表的でしょう。志望校や受験校の選択についても、過度に現役合格にこだわるあまり不適切な指導をする事例がよく聞かれます。こういった指導をする塾や予備校は、市場原理で淘汰されてはいるものの、根絶されてはいません。その塾・予備校に相談しても改善が見られない場合、保護者に相談して、他の塾・予備校に変えるなどの対策が必要です。 == 入試範囲外の学習について == 入試範囲外の知識があることで解きやすくなる問題が、しばしばみられます。 よくあるのが、高校の範囲内だが他科目の範囲である知識があると解きやすくなる入試問題です。具体的には、現代文や英語の文章でありながら様々な分野の基本的な知識があると読みやすくなるもの、物理基礎・化学基礎・生物基礎の問題でありながら物理・化学・生物の知識があると解きやすくなるもの、数学IIの問題でありながら数学IIIの知識があると解きやすくなるなるもの、などなど。こういった入試問題でも、原理的には出題範囲の科目の高校参考書の知識だけで解けるように作られていますので、対応するための特別な学習は必要ありません。あえて言うならば、入試科目ではなくても、高校教育で履修する科目の学習はすべて大切にすることが、こういった問題への最も有効な対策と言えるでしょう。 また、大学で習う知識をあつかった入試問題もありますが、そのような入試問題は、高校の教科書・参考書の範囲内で解けるよう、適切な誘導がされています。さらに、高校生用の受験参考書や平均レベルの問題集でも、入試に出題されやすい大学レベルの背景知識には触れている場合が多いので、わざわざ難解な大学生向けの教科書を購入する必要は全くありません。 そもそも、大学レベルの話題をあつかった入試問題といっても、大学で習う用語や公式などを丸暗記しただけで解けるというものではありません。たとえば、大学で学ぶ公式の導出が問題になることがあります。あるいは、そのような公式をあらかじめ問題文中に提示して、代入して使わせることでより難しい問題へのヒントとするような出題もあります。高校で学ぶ知識のみでは計算が大変だが、問題文中に書かれていない大学で学ぶ公式を使うと計算がショートカットできるという問題もないわけではありませんが、そのような公式を使用した答案は、適用可能な条件を満たしているかをきちんと確認しているかも含め、厳しい採点基準で採点されると言われています。 == 参考文献・脚注など == [[カテゴリ:大学入試]] fm2o030mzugkgpsffjswl8d0kpudwx1 246687 246686 2024-04-14T07:09:43Z すじにくシチュー 12058 /* 塾・予備校の注意点 */ ;夏期講習だけ・冬期講習だけの合格実績 夏期講習や冬期講習など、短期の講習を受けただけの子の大学合格実績を、その塾・予備校の塾生の合格実績として含める場合もあります。必ずしも通年で塾・予備校に通ってるとは限りません。 wikitext text/x-wiki == 傾向と対策 == === 傾向 === 大学入試の出題について、文部科学省の通知文である「大学入学者選抜実施要項」には次のように記載されています。<ref>[https://www.mext.go.jp/a_menu/koutou/senbatsu/mxt_kouhou02-20200619_1.pdf 令和3年度大学入学者選抜実施要項について(通知)]</ref> :以下の三つの要素のそれぞれを適切に把握するよう十分留意する。 :(中略) :① 基礎的・基本的な知識・技能(以下「知識・技能」という。) :② 知識・技能を活用して,自ら課題を発見し,その解決に向けて探究し,成果等を表現するために必要な思考力・判断力・表現力等の能力(以下「思考力・判断力・表現力等」という。) :③ 主体性を持ち,多様な人々と協働しつつ学習する態度 「知識・技能」の部分はいわゆる教科書通りの問題、「思考力・判断力・表現力等」の部分が教科書よりもやや難しく感じられる出題を指すと解することができます。実態としては、知識ではなく思考力・判断力を問おうとして出題した問題が、しばしば意図に反して検定教科書の範囲よりもやや広い範囲の知識があれば解けてしまうために、そのような知識を問う問題として機能してしまうこともあります。 このような大学入試の現状から逆算して、以下のような対策が必要になるでしょう。 === 対策 === 定期テストだけで受験対策するのは大学入試ではほぼ無理ですが、かといって、平均的な高校の定期テストの問題すらも解けないような学力では、大学受験には対応できません。 低学年のうちから受験の過去問ばかりをするのは非効率です。なぜなら、大学入試問題は難しく、学力が足りない低学年のうちから読みこんでも意味不明であり、そのような段階では過去問が学力の習得に役立たない可能性が高いからです。まずは、定期テスト程度なら8割ほどは楽に解ける、という状態を作るべきです。そのために、まずは定期テスト対策の学習をきちんとする必要があります。 定期テストだけに特化した、その場しのぎの学習は非効率です。最終的な目標は、けっして定期テストの問題を解けるようになることではありません。当面の中間目標として、定期テスト程度の易しい問題なら楽に解けるという状態を作ることを目指しているのです。日頃からの学習の積み重ねが物を言います。 == 定期テストを活用する == 高校にもよりますが、平均以上のレベルの高校の1年生や2年生の定期テストの出題範囲は、授業で習った範囲を基準にしつつも、参考書などで紹介されている基礎事項も少しだけ出題するという場合が多いでしょう。ほとんどの高校の場合、定期テストはその単元の理解を確認するテストであり、易しい問題が中心でしょう。定期テスト対策の勉強法は、数学・理科・地歴公民については、教科書を理解をするために読み込みつつも、参考書もその単元について1冊は読んで、そしてワークブックなどで問題練習する事です。 以下で教科ごとの学習法について詳しく述べます。 === 国語 === :教科書以外に必要なもの - 参考書、ワークブック、漢字ドリルなど. 古文・漢文については、まずは単語と文法事項の理解を深めます。英語と比べれば覚えるべき事項はとても少ないですので、完璧にすることです。なまじっか日本語だからと言ってこのような学習を軽視する人がいますが、それは後々になって大きなビハインドになります。そのうえで、教科書の作品を丁寧に口語訳しながら読解することで、当時の人が持っていた常識的感覚を体得します。このような基本に忠実な学習を繰り返していかないと、初見の文章を読めるようにはなりません。古典は作品数が有限ではありますが、かなり大きな有限ですので、入試において初見の文章を読む覚悟はしておかなくてはいけません。初見の作品であっても、当時の人に好まれたよくある作品のパターンには収まっているものが多いです。文法に加えてそのパターンを体得していれば、読解は難しくありません。 現代文についても、評論については典型的な論の運び方のパターンを、小説においては典型的な作家の表現のパターンを、それぞれ読解の数をこなす中で体得することが重要です。なんとなく、ではなく、根拠をもってその論・表現の意図を説明できるようにしておきましょう。ある程度以上の大学の記述試験では、まとまった論述も求められます。読解するだけでなく、その内容を要約して表現する作文力も求められるということです。自分の感想はさておいて、筆者は何を言っているのか、作者はどのような意図で表現しているのか、冷静な筆致で表現できなければなりません。これには、相応の練習が必要です。もちろん、それ以前に正確な読解が必要なのは言うまでもありません。 漢字は、覚えるしかないので、漢字ドリルなどで出題されてる漢字を、きちんと練習しましょう。 === 英語 === :教科書以外に必要なもの - 参考書および'''単語帳'''. 英語の場合、単語力の欠如が文法や読解の学習を妨げるので、とにかく単語力が大切です。 英語の教科書だけでは文法などの解説・問題例がやや足りないこともあり、参考書などで補ってください。 長文読解や解釈に関しても、一般の検定教科書や学校で配布される問題集では不足があるので、必要に応じて問題集を利用しましょう。 === 数学 === :教科書以外に必要なもの - 参考書(ただし問題集付きおよび'''解説付き'''の物). 数学の場合、教科書レベルの練習問題〜発展問題を解ければ定期テスト対策としては充分なのですが、その教科書レベルを理解するのが手間取ります。 数学の教科書レベルを理解するためには、教科書の練習問題や応用問題・発展問題などをきちんと練習したうえで、さらに参考書でその単元の基本問題や練習問題を補えば、たいてい定期テスト対策としては充分でしょう。数学の参考書の場合、基礎レベルの参考書自体がワークブック的な問題集の機能も兼ているので、ワークブックは別途は必要ありません。数学の場合、問題練習に時間が掛かるため、参考書は当面は1冊で充分です。数学の参考書を買う際は、問題に答えと解説が付いているものを選んでください。数学の高校参考書では、普通の厚めの参考書なら、問題の答えと解説が付いていますので、買う際はそれを買います。参考書の発展レベルは、定期テスト対策では不要です。低学年では、数学参考書の発展レベルに深入りするよりも、他教科の勉強に時間を掛けるべきでしょう。 === 地歴公民 === :教科書以外に必要なもの - 平易な参考書(実質的にはセンター対策本)または別の教科書出版社の教科書、ワークブック. 地歴公民の理解を深める手っ取り早い方法は、教科書の他に、もう1冊、参考書か別の教科書出版社の教科書を読む方法です。重要事項や基礎事項はどの教材でも触れられているので、複数冊を読むことで繰り返し学習することになり、記憶が定着します。一方、発展的な事項や、著者や出版社によって視点や意見が分かれるような題材については、複数冊を読むことによって、さまざまな視点で読めることになるので、理解が深まります。参考書を買う場合は、とりあえず、短かめの参考書を買うのが良いでしょう。「センター試験対策」などと銘打った参考書が、わりと短めなので、まずは、それを買うと良いかもしれません。片っ端から全てを覚えるのは非効率なので、まずは基礎的な事項を重点的に説明した、入門的な参考書があると便利です。加えて地歴公民では、内容の理解はもちろん必要なのですが、しかし実際のテストでは定期テストでも入試でも、用語の漢字などでの書き取りを問う出題も多いので、書き取り練習なども必要です。 ニュース、一般の歴史評論書や経済評論書などは、学習に取り入れる必要は原則としてありません。受験向けにまとめられた教科書や参考書を複数買って読んで読み比べるほうが、受験勉強としてより効率的です。 時事問題の関連知識が必要な場合、書店で市販されている『現代社会』資料集などが時事問題を解説していたりします。また、中学入試や高校入試対策の教材で、時事問題の解説をした教材が市販されていますので、それらを参考にすれば十分でしょう。 === 理科 === :教科書以外に必要なもの - 参考書および、ワークブックまたは簡単な問題集. 理科の学習法は、手短かに言うと、数学と地歴公民の中間です。問題練習をしつつも、用語などは暗記しなければなりません。物理については、数学に勉強法が近いです。生物については、やや地歴公民に勉強法が近くなります。化学の勉強法は、物理と生物の中間、といったところでしょう。 なお、もし理系の大学を進学志望する場合、大学では生物の勉強法が化学に近付いていき、化学の勉強法が物理に近付きますので、高校では物理・化学・生物の学習は、どれもサボらずに、高校必修の範囲は、ひととおり勉強しておきましょう。 さて、テレビのニュースなどでノーベル賞など科学的な話題を見ることがあると思いますが、それらの報道を追いかける必要は基本的にありません。いわゆる時事問題のように、そういった事柄が直接問題になるということはまずないからです。ただし、そういった時事ネタを元に入試問題が作成されることもあります<ref>2019年度 早稲田大学基幹/先進理工学部 生物 第3問(2017年ノーベル生理学・医学賞に関する問題)など</ref>し、理科への意欲も深まるでしょうから、知ってて損をすることもないでしょう。 == 参考書・問題集を使った学習 == 学校ですでに習い終わった単元については、定期テスト程度なら楽に解ける、という状態になったら、プラスアルファの学習をしましょう。そのためには、教科書以外の参考書・問題集を用意する必要があります。 参考書は、あまりたくさん用意する必要はありません。1冊では心もとないというなら2冊程度はあってもいいですが、参考書を読む以外にも問題練習などもしなければならないので、あまり多くの参考書を読めません。細かな理解は、問題練習などを通して、これから深めていきます。 また、英語では参考書の他にも単語集・熟語集、社会科では用語集や日本史の史料解説集、などのように、各科目ごとに、その教科のメインの参考書以外にも補助教材がいずれ必要になるので、それを忘れないようにしましょう。入学当初は参考書だけでも構いませんが、いずれ単語集や史料集などの補助教材を利用する必要が出てきます。 参考書を読むだけでなく、問題演習も必要です。"定期テスト対策"の問題集・ワークブックしか入手してない場合、それとは別に、"入試対策"用の問題集を入手してください。入試対策用の問題集の選択には、まずは平均的な難度の大学向けの問題集でよいので、問題集を入手して、問題練習してください。この「標準的」とされる「入試」対策用の問題集ですら、現役の高校生には、かなり難しいです。なので、まだ「難関校むけ」の問題集には取り掛からないほうが良いでしょう。たとえ難関校を志望する場合ですら、入試問題には標準難度の大学の入試問題を解く能力も、要求されます。なので、志望校が難関校か中堅校かの、どちらにせよ、平均的な難度の入試対策問題集を楽々解ける能力が、受験生のころまでに必要になります。難関校向けの問題集よりも、まず先に "標準レベル" の入試対策問題集を使用してください。 予習については、先取り学習もしたほうが色々な理由で効果的な部分はあります<ref>船登惟希『改訂版 高校の勉強のトリセツ』、GAKKEN、48ページ</ref>ので、余力がある人は参考書を使い概要の把握程度の予習をするのもよいでしょう。教科書の後ろのほうの単元などは問題練習不足などにもなりやすく、概要程度を一通り早めに全体像を把握することができればそのような事態を防ぐことができます<ref>船登惟希『改訂版 高校の勉強のトリセツ』、GAKKEN、48ページ</ref>。ただし一方で、積み上げによる学習が必要とされる教科において、前の単元の理解が不十分なままに先の単元の「予習ごっこ」をするのは非効率です。そのような事態に陥らないよう、先生などの指導者のアドバイスを受けながら進めるのがよいでしょう。 == ノートづくりを目的にしてはならない == 記憶の定着を図るために、授業の内容などをノートにとっても良いでしょう。あるいは、参考書の語句および、その語句などの手短な解説などを、ノートなどに取っても良いでしょう。でも、ノートづくりを目的にしてはいけません。色鮮やかな自己満足ノートを作るのは時間の無駄です。その結果、学習者は知識が片寄ってしまいます。そのようなノートづくりをするよりも、語句の書き取り練習とか、あるいは問題練習などに時間を割いたほうが良いでしょう。 == 小論対策で読書するなら志望学科から逆算 == そもそも論として、参考書以外の読書はあまり受験対策には必要ないのですが(参考書などにある普通の知識のほうが出題頻度が高いので)、どうしても小論文などの対策として読書をする場合、注意事項として、 :入試の小論文では、志望の学科に関するテーマの小論が要求される、 という事をふまえる必要があります。 たとえば、もし経済学部や法学部などの社会科学っぽい学部を目指しているのに、文学小説や世界文学全集などを読み漁っても、それを経済学部・法学部などの入試の小論で活用するのは、かなりの難しさです。よほどの天才的な読書家でない限り、小説の知識などをもとに社会問題についての意見の小論を、受験できちんと得点できる水準で書くのは、まず無理です。 入試では「国語」科目で小論文が扱われる場合も多いのですが、だからといって文芸小説の小論だと勘違いしないよう、気をつけましょう。 基本的に、志望学科から遠い内容の文献をもとに論述をされても、あまり印象は良くないと思います。なぜなら、分野が違うと求める目標も違うので、異分野の文献をもとに小論をするのは、かなりの難しさです。 経済学部志望で法律学書の知見をもとに書くくらいならまだしも、経済学部志望なのに文学書や美術書や音楽書などの知見をもとに小論を述べるのは、一般入試では、かなりの難しさでしょう(ただし、スポーツ推薦とか文化活動推薦とかで志望する場合は、別かもしれません。この節では、一般入試の場合を述べています。) また、理工学部および理学部または工学部の入試では、めったに小論文は出ません。日本では、理系の学部のほとんどは理工系または情報系です。医療系の学部や、よほどの難関大の理系の学部でないかぎり、一般入試では小論文は出ないのが普通です。 == 模試の使いかた == 予備校などが、受験生の試験なれのため、入試などを真似た模擬試験(略して「模試」)を有料で行っています。 模擬試験の使い道とは、受験科目のなかで自分のまだ習得できてない単元をみつけて、その苦手分野をこれから復習すること、日本全国の受験生のなかで、自分がどれくらいの学力にあるかを調べることです。 模擬試験を受けるだけ受けても復習をしなければ、せっかく受けた模擬試験は、ほぼ無意味になります。学力をあげる方法とは、あくまで参考書などを読んだり、計算練習するなどの予習・復習であり、けっして模擬試験そのものは学力向上の手段ではありません。参考書を一度も読まずに「模試だけを何度も受けて、答えのパターンごと覚えよう」などという学習法では、学習すべき全範囲を網羅することができません。 == 大学入学共通テスト対策 == 大学入学共通テストは、国公立大学の受験をするなら避けては通れません。 ほぼすべての国立大学で、共通テストは5教科(国語・数学、英語、地歴公民、理科)が要求されます。このため国立志望では、共通テスト対策として、5教科をまんべんなく勉強する必要があります。 共通テストと二次試験の比率は大学により異なりますが、共通テストの比率の高い大学ではほぼ共通テストだけで決まると言えるところもあります(ただし難関大は二次試験重視が一般的)。また、一部の大学では共通テストの得点がある基準点に達していることを要求したり、共通テストの得点である一定の倍率まで絞ってしまう、いわゆる「足きり」と呼ばれる制度があります。また、近年 拡大傾向にある私大の共通テスト利用入試に活用することもできるため、ますます重要性が上がっています。 共通テストは、かつて行われていた大学入試センター試験にあたるものです。センター試験は、出題範囲こそ形式的には教科書レベルを逸脱しない範囲でしたが、しかし近年のセンター試験の出題では、検定教科書では説明の短いような細かな知識すらも出題してくる事があり、教科書の知識にプラスアルファ的な対策を取らないと点数がとりづらい試験でした。大学入学共通テストは、それに加えて思考力を問う問題を課すことになっており、目標平均点もセンター試験より低い点数が設定されており、センター試験よりもやや難しい問題になると想定されています。それゆえに受験産業が危機感を煽って低学年次からの共通テスト対策特化講座を開きますが、しかし、これを鵜呑みにするのは得策ではありません。共通テストばかりに気を取られると、共通テスト以外の他の大学受験問題に対応できなくなるリスクが高くなります。もし共通テストだけに専念してしまい、二次試験対策を怠る(おこたる)と、志望できる大学や志望学部がごくわずかに限られてしまいます。同様に、少数の科目に絞って学習してしまうのも、出願できる大学の幅を減らすことになり危険です。 なので、1,2年生にとっての共通テスト対策は、一般的な普通科高校の2年の終わりまでに習う科目で、いわゆる「教科書レベル」に(検定教科書にある問題 や 教科書会社などの出版する基礎ドリル・ワークブックの問題集レベル)、まずは対応できるという状態を作っておくことが先決です。もし、その状態を作っていない状態で3年生を迎えてしまうと、残り1年では共通テストの問題には対応できません。ただし、センター試験にはなかったような独特の形態の問題が出題されることが予定されていますので、受験産業の低学年からの共通テスト対策を利用し、入試傾向を確認するのは有効でしょう。 * 「センター試験レベル」とは かつてのセンター試験は大学受験の登竜門として多くの受験生にかかわるために、しばしば易しい入試問題の代名詞として「センター試験レベル」ということばだけが独り歩きしがちでした。しかし、この代名詞の使いかたは、ほぼ間違っています。なぜなら、センター試験はマークシート式なので用語の暗記の負担が少ないので一見すると簡単そうに思われますが、そのぶん細かい知識を問う出題も多いので(実際のセンターの出題で、いちぶの教科書会社の検定教科書の章末コラムにしか書いてない知識を問うような出題すら、2010年以降の近年のセンター試験にも散見されました)、なので一般的な普通科高校の定期試験レベルのものを想像するのは誤りです。その上、高校で学習する全範囲から出題されることも相俟って(あいまって)、しかるべき対策を取らなければ高得点は望めない試験でした。さらに、30年にわたって行われてきた中で、受験生が対策を取るのとイタチごっこをする形で難易度も大きく変化していますので、過去の認識で話をしている大人の言うことを鵜呑みにはできない難易度でした。過去、センター試験よりさらに以前に実施されていた共通一次試験の難易度が比較的に低めだったため、その頃のままの認識でいる大人も多かったのですが、しかしその認識はマチガイであり、難易度の傾向としてセンター試験は共通一次試験よりも難しくなっていました<ref>[http://agora-web.jp/archives/2043766.html 『「共通一次より現在のセンター試験の方が遥かに難しい」という意外な事実』物江 潤 ] 2020年01月15日 06:00 の記事。2020年4月26日に確認。 </ref>。 センター試験の問題の難易度は、年ごとにもかなりのばらつきがありました。大学入試センターは毎年の平均点を公開していますので、センター試験の問題で過去問演習をする際は平均点を参考に、自分が解いている問題は難易度が高かったのか低かったのかも見ることで、実力を過信したり過剰に不安になったりすることを防ぐことができます。なお、共通テストはセンター試験よりもさらに難しい出題となることが予定されています。 共通テストを終え、自己採点後に出願校を検討する際にも、自分の取った点数をどう評価するかを考えるためには、受験生全体の傾向を知ることが必要になります。ただし、予備校による「センターリサーチ」や、それをもとにした「バンザイシステム」などの合否判定システムは非常に多くの受験生が参考にするため、額面通りに受け止めて出願する受験生が多ければその受験生たちは失敗しやすくなります。データを参考にすることは必要ですが、データに振り回されないようにすることも必要です。 * センター試験の過去問集について 大学入試の過去問といえば二次試験対策では(教学社の)「赤本」が有名です。センター試験の「赤本」ももちろん出版されています。しかし、センター試験の過去問集は他社からも刊行されていますので、解説の質や掲載年数をよく比較してから購入するのがよいでしょう。また、過去問以外にも、出版社独自に作成したマーク型問題を集めた問題集や、予備校が出版するマーク型模擬試験の過去問集も発売されています。現行カリキュラムで有効な過去問は数が限られていますので、過去問だけでなくこれらの問題集も必要に応じて活用するとよいでしょう。ただし、共通テストはセンター試験にはなかった形態の問題も出題される予定ですので、注意が必要です。 * 理科の科目について かつては物化生地それぞれの科目の前半部に当たる「○○I」(たとえば「生物I」)という名前の科目しかセンター試験では出題されませんでしたが、現在では後半部も含めたその科目のすべての範囲が出題範囲となる科目も設定されており、たとえば「生物」のように科目名の語尾に何もつかない「○○」という科目がそれです。理系学部を受験する場合はこちらを受験することが必須であり、以前よりも負担が増えています。大人のなかには、最近の受験の変化についていけていない、よくわかっていないことを言う人がいるので、高校生・受験生は、わかってない大人に惑わされぬよう注意が必要です。また理系の場合、大学によっては「共通テストでは物理受験が必須。加えて、もう生物・化学・地学のうち1つ」のように、学科に関係の深い科目が共通テスト必須になっていることもよくありますのでこちらも要注意です。文系の場合は「○○基礎」を受験すればよく、これはかつての「○○I」よりも狭い範囲ですが、その代わり「○○基礎」を1科目単独で受験することは不可能で、2科目セットでの受験となりますので、これもやはりかつての受験生よりは負担増になっています。 * 地歴公民の科目について 地歴公民は文系の場合は2科目、理系の場合は1科目受験することが必要なことがほとんどです。その際、地歴のA科目(2単位科目)はいちおう共通テストで設定されてはいますがこちらを使用可能な大学はほとんどありませんので、地歴を使用する場合は必ず4単位のB科目を受験する必要があります。 公民の場合は、2単位科目の「現代社会」「倫理」「政治経済」を使用可能な大学と、4単位科目の「倫理、政治経済」しか認めないという大学に分かれており、難関大は後者が多くなっています。したがって、そのような大学の文系を受験する場合は「倫理、政治経済」の受験がほぼ必須と言えます。理系であれば「倫理、政治経済」にするか地歴のBにするかを選ぶことができますので、地歴Bを受験するのが一般的ですが、「倫理、政治経済」を受験しても構いません。 出題傾向は、センター試験では長らくいわゆる「知識問題」「暗記問題」が多くを占めていました。しかし、共通テストでは思考力を問う問題を増やすことが予定されており、既にセンター試験末期にもその傾向は見られます。ただし、科目の特性として、いわゆる「暗記問題」がまったくなくなることもないだろうと思われます。 * まとめ 以上を踏まえたうえで最も重要なことは、けっして受験校が絞られる前から早々に科目を絞らないことです。受験校の最終決定は共通テスト後にしかできませんが、このとき受験した科目が少なかったために不本意な出願をせざるを得なくなることが少なくありません。特に高校1・2年次に科目を絞るなどは論外ですので、塾などのそのような指導を鵜呑みにしないように気をつける必要があります。 * その他、英語外部試験の導入などについて 共通テストの導入と併せて、当該年度内に受験した英語の民間試験の成績を大学入試に用いることが予定されていました。おおむね英検準2級から2級に対応するCEFR A2相当は取得しておくことが、国公立大学を受験するうえでの必要条件となりそうな状況でしたが、そのようなことを全受験生に課すことは受験生の負担が大きすぎることへの批判などから、この計画の初年度からの導入は見送られています。一部大学でさらに上のCEFR B2程度以上で英語の試験を満点扱いにするなどと言った措置は見られますが、限定的です。このような非常に高いレベルを目指すよりは他教科の学習をする方が多くの人にとっては効率的ですので、英語外部試験は闇雲に受験するのでなく、戦略的に行う必要がありそうです。 == 二次試験の科目選択 == 国公立大学二次試験で用いることになる科目は、もちろん個別の大学ごとに千差万別ですが、文系理系ごとの大まかな傾向についてここで述べます。 * 文系 文系では、国英が主要教科です。特に英語を用いずに済むことはまずありませんので、英語が弱点の場合はこれを克服することが最重要課題です。それに加え、難関大や経済学部の場合は数学が加わります。地歴を用いる大学もありますが、教員養成大学の社会科課程を中心とする少数の大学のみです。 他に、近年は小論文を使うことが少なくありません。教科の名前がついていても実態としては数百字の文章を書かせるという大学もあり、国語での論述も含め、作文能力は受験生の思っているよりも多くの大学で問われていると言えます。 * 理系 理系では、英数が主要教科です。数IIBまでか数IIIまでかは大学・学部によりますが、ほとんどの大学では数学IIIまでです。また、進学後のことも考えれば数IIIまでをきちんと学習しておくに越したことはありません。加えて理科も非常に多くの大学で課されますが、2科目要求されるセンター試験とは異なり、その学科で特に必要となる1科目のみというのが主流です(難関大では2科目を要求されます)。二次試験の理科では、物理や化学、生物のように、『〇〇』科目を要求するのが一般的です。 加えて国語を課す大学もありますが、これは少数派です。医療系では面接が課されることがしばしばあり、これも対策が必要です。 == 過去問の使い方 == 志望校の過去問よりも、まずは市販の問題集で、解説付きの問題集を重視して使用したほうがよいです。なぜなら過去問とは、まず出題傾向や難度のレベルを調べるためのものであり、当然ですが使用者の学力向上を第一目的としたものではありません。 過去問集にも解説などはありますが、参考書と比べたら解説も少ないし、また出題範囲も志望校のものに片寄っています。しかも、たいてい入試問題が難しめなので、初心者には学習の効率が悪いです。基本的には、あまり難関校の問題に挑戦するよりも、むしろ入試平均レベルの問題で良いから多くの問題を確実に解けるようにしたほうが、多くの大学の入試では有利な場合が多いです。 もちろん、大学ごとの出題傾向は固定化されている場合がかなりありますので、過去問練習は、けっして、まったくの無駄にはなりません。要は、使い方だということです。 なお、センター試験の過去問などは、試験馴れの目的も含めて、少なくとも過去数年分のセンター過去問ぐらいは練習したほうが良いでしょう。ただし、センター過去問を使う場合であっても、あくまで過去問は、まず出題傾向などを確認したり、苦手分野を確認して復習するべき分野を探すためのものであり、過去問を解くだけでは、あまり学力は上がりません。 もし、センター対策の問題練習をするなら、実際のセンター過去問ばかりをするよりも、「センター対策」などと書かれた参考書を読んだりした上で、「センター対策」などと銘打った予想問題集に掲載された問題を解くほうが、より効率的かもしれません。 == 検定教科書の難易度 == 検定教科書には、難易度に差をつけた、いくつかの種類の教科書があります。教科書会社ごとの違いだけでなく、同じ教科書会社が複数種類の難易度の教科書を出版している場合もあります。たとえば山川出版の世界史Bの検定教科書には、同じ「世界史B」科目でも、難度別の3種類の検定教科書があります。これらの中から、学校ごとに、その学校の教員が適切と考える教科書を選定し、採用しています。 このことは、生徒はそこまで気にする必要はありません。あくまで高校で与えられた教科書に従って学習するのが基本です。いずれにせよ、検定教科書だけでなく、参考書や問題集なども、受験合格のためには勉強する必要が生じます。 ただし、センター試験の出題範囲が、多くの科目で基本的に検定教科書の内容にもとづいているので、受験生側もある程度は、自分の出身高校以外で使われてる検定教科書での記述の傾向を知っておく必要があります。とはいえ、それらの傾向は市販のセンター対策と銘打ってる参考書でおおむね把握できますので、わざわざ検定教科書を実際に買い足す必要も、あまりありません。 受験生の入試傾向の情報収集としては、基本的に参考書で傾向を情報収集しつつ、出版状況がどうしても市販の参考書では不十分な状況にあると思われる科目の場合にだけ、自分の高校以外で使われている検定教科書も1〜2冊ほど購入して通読すれば、傾向の把握としての教科書の読み込むとしては充分でしょう。検定教科書ばかりでなく、実際にセンター試験の過去問や志望大学などの過去問から、情報収集する必要があります。 なお、もし高校卒業後に浪人や再受験をしていて、検定教科書を買いたい場合などで、しかし高校現役時代と受験科目が変わるなどして、どの検定教科書を買えばいいのかが、よく分からなければ、とりあえず地元の進学校で採用している教科書を買うなどすれば、良いでしょう。 なお、受験勉強法の書籍などで、難関大学の合格者インタビュー結果として「受験勉強なんて、検定教科書の予習復習だけで完璧」などと言われている場合、これは比較的難易度の高い検定教科書を想定しているでしょうから、この点には注意が必要です。 == 塾・予備校の注意点 == === 「合格実績」の注意点 === ;塾生1人でなん十個も大学受験する可能性 合格実績を「水増し」(みずまし)をしている塾などが過去にはありました。具体的には、たとえば1人のいちばん好成績の塾生に、塾が30大学などの受験量を出して各大学を受験させて、その塾からの合格した「大学数」の実績をかせぐ方法です。合格人数はたった1人でも、この方法を使えば、たとえば30倍の大学数に増加できます。せめて、合格した人数を見ましょう。上位10名の生徒が30大学に合格すれば、300大学ぶんのカウントになりますので、事情の知らない人はあたかも300人が合格したかのように錯覚する、という手口です。 ;模試は塾生でなくても受けられる 水増しではないですが、模試をしている予備校については、模試受験生と予備校生とを混同しないようにしましょう(ときどき混同する人がいるので、念のため注記)。他の予備校に通っていても模試を受けられます。たとえば駿台(すんだい)模試を受験するのに駿台予備校の予備校生になる必要はないです。たとえば、河合塾(かわいじゅく)に通ってる人が駿台模試を受験しても、別に構わないのです。どこの予備校に通ってなくても、駿台や河合塾の模試を受けられます。 ;夏期講習だけ・冬期講習だけの合格実績 夏期講習や冬期講習など、短期の講習を受けただけの子の大学合格実績を、その塾・予備校の塾生の合格実績として含める場合もあります。必ずしも通年で塾・予備校に通ってるとは限りません。 ;付属校・指定校の合格が混ざる可能性 ほか、大学の付属高校などの子でも塾に通うことがあるので(付属校には内部進学用のテストがある場合もあるので、その対策として塾に通う場合があります)、注意が必要です。たとえば「塾生が早慶マーチに合格した」と宣伝されても、もとから早慶マーチの付属校や指定校に通っている場合もあります。一般受験での合格とは限りません。 === 指導法の注意点 === ;高校・学習指導要領の無視・妨害 塾や予備校の中には、不適切な指導をするところもあるので、注意が必要です。生徒にはまず学校での学習があり、他科目の学習があるということを無視して、いたずらに自分の担当科目の、自分の塾オリジナルの、不必要な難問を含んでいたりする教材を勉強させたり、大量の宿題を要求したりする指導などが代表的でしょう。志望校や受験校の選択についても、過度に現役合格にこだわるあまり不適切な指導をする事例がよく聞かれます。こういった指導をする塾や予備校は、市場原理で淘汰されてはいるものの、根絶されてはいません。その塾・予備校に相談しても改善が見られない場合、保護者に相談して、他の塾・予備校に変えるなどの対策が必要です。 == 入試範囲外の学習について == 入試範囲外の知識があることで解きやすくなる問題が、しばしばみられます。 よくあるのが、高校の範囲内だが他科目の範囲である知識があると解きやすくなる入試問題です。具体的には、現代文や英語の文章でありながら様々な分野の基本的な知識があると読みやすくなるもの、物理基礎・化学基礎・生物基礎の問題でありながら物理・化学・生物の知識があると解きやすくなるもの、数学IIの問題でありながら数学IIIの知識があると解きやすくなるなるもの、などなど。こういった入試問題でも、原理的には出題範囲の科目の高校参考書の知識だけで解けるように作られていますので、対応するための特別な学習は必要ありません。あえて言うならば、入試科目ではなくても、高校教育で履修する科目の学習はすべて大切にすることが、こういった問題への最も有効な対策と言えるでしょう。 また、大学で習う知識をあつかった入試問題もありますが、そのような入試問題は、高校の教科書・参考書の範囲内で解けるよう、適切な誘導がされています。さらに、高校生用の受験参考書や平均レベルの問題集でも、入試に出題されやすい大学レベルの背景知識には触れている場合が多いので、わざわざ難解な大学生向けの教科書を購入する必要は全くありません。 そもそも、大学レベルの話題をあつかった入試問題といっても、大学で習う用語や公式などを丸暗記しただけで解けるというものではありません。たとえば、大学で学ぶ公式の導出が問題になることがあります。あるいは、そのような公式をあらかじめ問題文中に提示して、代入して使わせることでより難しい問題へのヒントとするような出題もあります。高校で学ぶ知識のみでは計算が大変だが、問題文中に書かれていない大学で学ぶ公式を使うと計算がショートカットできるという問題もないわけではありませんが、そのような公式を使用した答案は、適用可能な条件を満たしているかをきちんと確認しているかも含め、厳しい採点基準で採点されると言われています。 == 参考文献・脚注など == [[カテゴリ:大学入試]] 33i9ug0y02h0gyve28ucao6ws3id165 246688 246687 2024-04-14T07:09:56Z すじにくシチュー 12058 /* = */ wikitext text/x-wiki == 傾向と対策 == === 傾向 === 大学入試の出題について、文部科学省の通知文である「大学入学者選抜実施要項」には次のように記載されています。<ref>[https://www.mext.go.jp/a_menu/koutou/senbatsu/mxt_kouhou02-20200619_1.pdf 令和3年度大学入学者選抜実施要項について(通知)]</ref> :以下の三つの要素のそれぞれを適切に把握するよう十分留意する。 :(中略) :① 基礎的・基本的な知識・技能(以下「知識・技能」という。) :② 知識・技能を活用して,自ら課題を発見し,その解決に向けて探究し,成果等を表現するために必要な思考力・判断力・表現力等の能力(以下「思考力・判断力・表現力等」という。) :③ 主体性を持ち,多様な人々と協働しつつ学習する態度 「知識・技能」の部分はいわゆる教科書通りの問題、「思考力・判断力・表現力等」の部分が教科書よりもやや難しく感じられる出題を指すと解することができます。実態としては、知識ではなく思考力・判断力を問おうとして出題した問題が、しばしば意図に反して検定教科書の範囲よりもやや広い範囲の知識があれば解けてしまうために、そのような知識を問う問題として機能してしまうこともあります。 このような大学入試の現状から逆算して、以下のような対策が必要になるでしょう。 === 対策 === 定期テストだけで受験対策するのは大学入試ではほぼ無理ですが、かといって、平均的な高校の定期テストの問題すらも解けないような学力では、大学受験には対応できません。 低学年のうちから受験の過去問ばかりをするのは非効率です。なぜなら、大学入試問題は難しく、学力が足りない低学年のうちから読みこんでも意味不明であり、そのような段階では過去問が学力の習得に役立たない可能性が高いからです。まずは、定期テスト程度なら8割ほどは楽に解ける、という状態を作るべきです。そのために、まずは定期テスト対策の学習をきちんとする必要があります。 定期テストだけに特化した、その場しのぎの学習は非効率です。最終的な目標は、けっして定期テストの問題を解けるようになることではありません。当面の中間目標として、定期テスト程度の易しい問題なら楽に解けるという状態を作ることを目指しているのです。日頃からの学習の積み重ねが物を言います。 == 定期テストを活用する == 高校にもよりますが、平均以上のレベルの高校の1年生や2年生の定期テストの出題範囲は、授業で習った範囲を基準にしつつも、参考書などで紹介されている基礎事項も少しだけ出題するという場合が多いでしょう。ほとんどの高校の場合、定期テストはその単元の理解を確認するテストであり、易しい問題が中心でしょう。定期テスト対策の勉強法は、数学・理科・地歴公民については、教科書を理解をするために読み込みつつも、参考書もその単元について1冊は読んで、そしてワークブックなどで問題練習する事です。 以下で教科ごとの学習法について詳しく述べます。 === 国語 === :教科書以外に必要なもの - 参考書、ワークブック、漢字ドリルなど. 古文・漢文については、まずは単語と文法事項の理解を深めます。英語と比べれば覚えるべき事項はとても少ないですので、完璧にすることです。なまじっか日本語だからと言ってこのような学習を軽視する人がいますが、それは後々になって大きなビハインドになります。そのうえで、教科書の作品を丁寧に口語訳しながら読解することで、当時の人が持っていた常識的感覚を体得します。このような基本に忠実な学習を繰り返していかないと、初見の文章を読めるようにはなりません。古典は作品数が有限ではありますが、かなり大きな有限ですので、入試において初見の文章を読む覚悟はしておかなくてはいけません。初見の作品であっても、当時の人に好まれたよくある作品のパターンには収まっているものが多いです。文法に加えてそのパターンを体得していれば、読解は難しくありません。 現代文についても、評論については典型的な論の運び方のパターンを、小説においては典型的な作家の表現のパターンを、それぞれ読解の数をこなす中で体得することが重要です。なんとなく、ではなく、根拠をもってその論・表現の意図を説明できるようにしておきましょう。ある程度以上の大学の記述試験では、まとまった論述も求められます。読解するだけでなく、その内容を要約して表現する作文力も求められるということです。自分の感想はさておいて、筆者は何を言っているのか、作者はどのような意図で表現しているのか、冷静な筆致で表現できなければなりません。これには、相応の練習が必要です。もちろん、それ以前に正確な読解が必要なのは言うまでもありません。 漢字は、覚えるしかないので、漢字ドリルなどで出題されてる漢字を、きちんと練習しましょう。 === 英語 === :教科書以外に必要なもの - 参考書および'''単語帳'''. 英語の場合、単語力の欠如が文法や読解の学習を妨げるので、とにかく単語力が大切です。 英語の教科書だけでは文法などの解説・問題例がやや足りないこともあり、参考書などで補ってください。 長文読解や解釈に関しても、一般の検定教科書や学校で配布される問題集では不足があるので、必要に応じて問題集を利用しましょう。 === 数学 === :教科書以外に必要なもの - 参考書(ただし問題集付きおよび'''解説付き'''の物). 数学の場合、教科書レベルの練習問題〜発展問題を解ければ定期テスト対策としては充分なのですが、その教科書レベルを理解するのが手間取ります。 数学の教科書レベルを理解するためには、教科書の練習問題や応用問題・発展問題などをきちんと練習したうえで、さらに参考書でその単元の基本問題や練習問題を補えば、たいてい定期テスト対策としては充分でしょう。数学の参考書の場合、基礎レベルの参考書自体がワークブック的な問題集の機能も兼ているので、ワークブックは別途は必要ありません。数学の場合、問題練習に時間が掛かるため、参考書は当面は1冊で充分です。数学の参考書を買う際は、問題に答えと解説が付いているものを選んでください。数学の高校参考書では、普通の厚めの参考書なら、問題の答えと解説が付いていますので、買う際はそれを買います。参考書の発展レベルは、定期テスト対策では不要です。低学年では、数学参考書の発展レベルに深入りするよりも、他教科の勉強に時間を掛けるべきでしょう。 === 地歴公民 === :教科書以外に必要なもの - 平易な参考書(実質的にはセンター対策本)または別の教科書出版社の教科書、ワークブック. 地歴公民の理解を深める手っ取り早い方法は、教科書の他に、もう1冊、参考書か別の教科書出版社の教科書を読む方法です。重要事項や基礎事項はどの教材でも触れられているので、複数冊を読むことで繰り返し学習することになり、記憶が定着します。一方、発展的な事項や、著者や出版社によって視点や意見が分かれるような題材については、複数冊を読むことによって、さまざまな視点で読めることになるので、理解が深まります。参考書を買う場合は、とりあえず、短かめの参考書を買うのが良いでしょう。「センター試験対策」などと銘打った参考書が、わりと短めなので、まずは、それを買うと良いかもしれません。片っ端から全てを覚えるのは非効率なので、まずは基礎的な事項を重点的に説明した、入門的な参考書があると便利です。加えて地歴公民では、内容の理解はもちろん必要なのですが、しかし実際のテストでは定期テストでも入試でも、用語の漢字などでの書き取りを問う出題も多いので、書き取り練習なども必要です。 ニュース、一般の歴史評論書や経済評論書などは、学習に取り入れる必要は原則としてありません。受験向けにまとめられた教科書や参考書を複数買って読んで読み比べるほうが、受験勉強としてより効率的です。 時事問題の関連知識が必要な場合、書店で市販されている『現代社会』資料集などが時事問題を解説していたりします。また、中学入試や高校入試対策の教材で、時事問題の解説をした教材が市販されていますので、それらを参考にすれば十分でしょう。 === 理科 === :教科書以外に必要なもの - 参考書および、ワークブックまたは簡単な問題集. 理科の学習法は、手短かに言うと、数学と地歴公民の中間です。問題練習をしつつも、用語などは暗記しなければなりません。物理については、数学に勉強法が近いです。生物については、やや地歴公民に勉強法が近くなります。化学の勉強法は、物理と生物の中間、といったところでしょう。 なお、もし理系の大学を進学志望する場合、大学では生物の勉強法が化学に近付いていき、化学の勉強法が物理に近付きますので、高校では物理・化学・生物の学習は、どれもサボらずに、高校必修の範囲は、ひととおり勉強しておきましょう。 さて、テレビのニュースなどでノーベル賞など科学的な話題を見ることがあると思いますが、それらの報道を追いかける必要は基本的にありません。いわゆる時事問題のように、そういった事柄が直接問題になるということはまずないからです。ただし、そういった時事ネタを元に入試問題が作成されることもあります<ref>2019年度 早稲田大学基幹/先進理工学部 生物 第3問(2017年ノーベル生理学・医学賞に関する問題)など</ref>し、理科への意欲も深まるでしょうから、知ってて損をすることもないでしょう。 == 参考書・問題集を使った学習 == 学校ですでに習い終わった単元については、定期テスト程度なら楽に解ける、という状態になったら、プラスアルファの学習をしましょう。そのためには、教科書以外の参考書・問題集を用意する必要があります。 参考書は、あまりたくさん用意する必要はありません。1冊では心もとないというなら2冊程度はあってもいいですが、参考書を読む以外にも問題練習などもしなければならないので、あまり多くの参考書を読めません。細かな理解は、問題練習などを通して、これから深めていきます。 また、英語では参考書の他にも単語集・熟語集、社会科では用語集や日本史の史料解説集、などのように、各科目ごとに、その教科のメインの参考書以外にも補助教材がいずれ必要になるので、それを忘れないようにしましょう。入学当初は参考書だけでも構いませんが、いずれ単語集や史料集などの補助教材を利用する必要が出てきます。 参考書を読むだけでなく、問題演習も必要です。"定期テスト対策"の問題集・ワークブックしか入手してない場合、それとは別に、"入試対策"用の問題集を入手してください。入試対策用の問題集の選択には、まずは平均的な難度の大学向けの問題集でよいので、問題集を入手して、問題練習してください。この「標準的」とされる「入試」対策用の問題集ですら、現役の高校生には、かなり難しいです。なので、まだ「難関校むけ」の問題集には取り掛からないほうが良いでしょう。たとえ難関校を志望する場合ですら、入試問題には標準難度の大学の入試問題を解く能力も、要求されます。なので、志望校が難関校か中堅校かの、どちらにせよ、平均的な難度の入試対策問題集を楽々解ける能力が、受験生のころまでに必要になります。難関校向けの問題集よりも、まず先に "標準レベル" の入試対策問題集を使用してください。 予習については、先取り学習もしたほうが色々な理由で効果的な部分はあります<ref>船登惟希『改訂版 高校の勉強のトリセツ』、GAKKEN、48ページ</ref>ので、余力がある人は参考書を使い概要の把握程度の予習をするのもよいでしょう。教科書の後ろのほうの単元などは問題練習不足などにもなりやすく、概要程度を一通り早めに全体像を把握することができればそのような事態を防ぐことができます<ref>船登惟希『改訂版 高校の勉強のトリセツ』、GAKKEN、48ページ</ref>。ただし一方で、積み上げによる学習が必要とされる教科において、前の単元の理解が不十分なままに先の単元の「予習ごっこ」をするのは非効率です。そのような事態に陥らないよう、先生などの指導者のアドバイスを受けながら進めるのがよいでしょう。 == ノートづくりを目的にしてはならない == 記憶の定着を図るために、授業の内容などをノートにとっても良いでしょう。あるいは、参考書の語句および、その語句などの手短な解説などを、ノートなどに取っても良いでしょう。でも、ノートづくりを目的にしてはいけません。色鮮やかな自己満足ノートを作るのは時間の無駄です。その結果、学習者は知識が片寄ってしまいます。そのようなノートづくりをするよりも、語句の書き取り練習とか、あるいは問題練習などに時間を割いたほうが良いでしょう。 == 小論対策で読書するなら志望学科から逆算 == そもそも論として、参考書以外の読書はあまり受験対策には必要ないのですが(参考書などにある普通の知識のほうが出題頻度が高いので)、どうしても小論文などの対策として読書をする場合、注意事項として、 :入試の小論文では、志望の学科に関するテーマの小論が要求される、 という事をふまえる必要があります。 たとえば、もし経済学部や法学部などの社会科学っぽい学部を目指しているのに、文学小説や世界文学全集などを読み漁っても、それを経済学部・法学部などの入試の小論で活用するのは、かなりの難しさです。よほどの天才的な読書家でない限り、小説の知識などをもとに社会問題についての意見の小論を、受験できちんと得点できる水準で書くのは、まず無理です。 入試では「国語」科目で小論文が扱われる場合も多いのですが、だからといって文芸小説の小論だと勘違いしないよう、気をつけましょう。 基本的に、志望学科から遠い内容の文献をもとに論述をされても、あまり印象は良くないと思います。なぜなら、分野が違うと求める目標も違うので、異分野の文献をもとに小論をするのは、かなりの難しさです。 経済学部志望で法律学書の知見をもとに書くくらいならまだしも、経済学部志望なのに文学書や美術書や音楽書などの知見をもとに小論を述べるのは、一般入試では、かなりの難しさでしょう(ただし、スポーツ推薦とか文化活動推薦とかで志望する場合は、別かもしれません。この節では、一般入試の場合を述べています。) また、理工学部および理学部または工学部の入試では、めったに小論文は出ません。日本では、理系の学部のほとんどは理工系または情報系です。医療系の学部や、よほどの難関大の理系の学部でないかぎり、一般入試では小論文は出ないのが普通です。 == 模試の使いかた == 予備校などが、受験生の試験なれのため、入試などを真似た模擬試験(略して「模試」)を有料で行っています。 模擬試験の使い道とは、受験科目のなかで自分のまだ習得できてない単元をみつけて、その苦手分野をこれから復習すること、日本全国の受験生のなかで、自分がどれくらいの学力にあるかを調べることです。 模擬試験を受けるだけ受けても復習をしなければ、せっかく受けた模擬試験は、ほぼ無意味になります。学力をあげる方法とは、あくまで参考書などを読んだり、計算練習するなどの予習・復習であり、けっして模擬試験そのものは学力向上の手段ではありません。参考書を一度も読まずに「模試だけを何度も受けて、答えのパターンごと覚えよう」などという学習法では、学習すべき全範囲を網羅することができません。 == 大学入学共通テスト対策 == 大学入学共通テストは、国公立大学の受験をするなら避けては通れません。 ほぼすべての国立大学で、共通テストは5教科(国語・数学、英語、地歴公民、理科)が要求されます。このため国立志望では、共通テスト対策として、5教科をまんべんなく勉強する必要があります。 共通テストと二次試験の比率は大学により異なりますが、共通テストの比率の高い大学ではほぼ共通テストだけで決まると言えるところもあります(ただし難関大は二次試験重視が一般的)。また、一部の大学では共通テストの得点がある基準点に達していることを要求したり、共通テストの得点である一定の倍率まで絞ってしまう、いわゆる「足きり」と呼ばれる制度があります。また、近年 拡大傾向にある私大の共通テスト利用入試に活用することもできるため、ますます重要性が上がっています。 共通テストは、かつて行われていた大学入試センター試験にあたるものです。センター試験は、出題範囲こそ形式的には教科書レベルを逸脱しない範囲でしたが、しかし近年のセンター試験の出題では、検定教科書では説明の短いような細かな知識すらも出題してくる事があり、教科書の知識にプラスアルファ的な対策を取らないと点数がとりづらい試験でした。大学入学共通テストは、それに加えて思考力を問う問題を課すことになっており、目標平均点もセンター試験より低い点数が設定されており、センター試験よりもやや難しい問題になると想定されています。それゆえに受験産業が危機感を煽って低学年次からの共通テスト対策特化講座を開きますが、しかし、これを鵜呑みにするのは得策ではありません。共通テストばかりに気を取られると、共通テスト以外の他の大学受験問題に対応できなくなるリスクが高くなります。もし共通テストだけに専念してしまい、二次試験対策を怠る(おこたる)と、志望できる大学や志望学部がごくわずかに限られてしまいます。同様に、少数の科目に絞って学習してしまうのも、出願できる大学の幅を減らすことになり危険です。 なので、1,2年生にとっての共通テスト対策は、一般的な普通科高校の2年の終わりまでに習う科目で、いわゆる「教科書レベル」に(検定教科書にある問題 や 教科書会社などの出版する基礎ドリル・ワークブックの問題集レベル)、まずは対応できるという状態を作っておくことが先決です。もし、その状態を作っていない状態で3年生を迎えてしまうと、残り1年では共通テストの問題には対応できません。ただし、センター試験にはなかったような独特の形態の問題が出題されることが予定されていますので、受験産業の低学年からの共通テスト対策を利用し、入試傾向を確認するのは有効でしょう。 * 「センター試験レベル」とは かつてのセンター試験は大学受験の登竜門として多くの受験生にかかわるために、しばしば易しい入試問題の代名詞として「センター試験レベル」ということばだけが独り歩きしがちでした。しかし、この代名詞の使いかたは、ほぼ間違っています。なぜなら、センター試験はマークシート式なので用語の暗記の負担が少ないので一見すると簡単そうに思われますが、そのぶん細かい知識を問う出題も多いので(実際のセンターの出題で、いちぶの教科書会社の検定教科書の章末コラムにしか書いてない知識を問うような出題すら、2010年以降の近年のセンター試験にも散見されました)、なので一般的な普通科高校の定期試験レベルのものを想像するのは誤りです。その上、高校で学習する全範囲から出題されることも相俟って(あいまって)、しかるべき対策を取らなければ高得点は望めない試験でした。さらに、30年にわたって行われてきた中で、受験生が対策を取るのとイタチごっこをする形で難易度も大きく変化していますので、過去の認識で話をしている大人の言うことを鵜呑みにはできない難易度でした。過去、センター試験よりさらに以前に実施されていた共通一次試験の難易度が比較的に低めだったため、その頃のままの認識でいる大人も多かったのですが、しかしその認識はマチガイであり、難易度の傾向としてセンター試験は共通一次試験よりも難しくなっていました<ref>[http://agora-web.jp/archives/2043766.html 『「共通一次より現在のセンター試験の方が遥かに難しい」という意外な事実』物江 潤 ] 2020年01月15日 06:00 の記事。2020年4月26日に確認。 </ref>。 センター試験の問題の難易度は、年ごとにもかなりのばらつきがありました。大学入試センターは毎年の平均点を公開していますので、センター試験の問題で過去問演習をする際は平均点を参考に、自分が解いている問題は難易度が高かったのか低かったのかも見ることで、実力を過信したり過剰に不安になったりすることを防ぐことができます。なお、共通テストはセンター試験よりもさらに難しい出題となることが予定されています。 共通テストを終え、自己採点後に出願校を検討する際にも、自分の取った点数をどう評価するかを考えるためには、受験生全体の傾向を知ることが必要になります。ただし、予備校による「センターリサーチ」や、それをもとにした「バンザイシステム」などの合否判定システムは非常に多くの受験生が参考にするため、額面通りに受け止めて出願する受験生が多ければその受験生たちは失敗しやすくなります。データを参考にすることは必要ですが、データに振り回されないようにすることも必要です。 * センター試験の過去問集について 大学入試の過去問といえば二次試験対策では(教学社の)「赤本」が有名です。センター試験の「赤本」ももちろん出版されています。しかし、センター試験の過去問集は他社からも刊行されていますので、解説の質や掲載年数をよく比較してから購入するのがよいでしょう。また、過去問以外にも、出版社独自に作成したマーク型問題を集めた問題集や、予備校が出版するマーク型模擬試験の過去問集も発売されています。現行カリキュラムで有効な過去問は数が限られていますので、過去問だけでなくこれらの問題集も必要に応じて活用するとよいでしょう。ただし、共通テストはセンター試験にはなかった形態の問題も出題される予定ですので、注意が必要です。 * 理科の科目について かつては物化生地それぞれの科目の前半部に当たる「○○I」(たとえば「生物I」)という名前の科目しかセンター試験では出題されませんでしたが、現在では後半部も含めたその科目のすべての範囲が出題範囲となる科目も設定されており、たとえば「生物」のように科目名の語尾に何もつかない「○○」という科目がそれです。理系学部を受験する場合はこちらを受験することが必須であり、以前よりも負担が増えています。大人のなかには、最近の受験の変化についていけていない、よくわかっていないことを言う人がいるので、高校生・受験生は、わかってない大人に惑わされぬよう注意が必要です。また理系の場合、大学によっては「共通テストでは物理受験が必須。加えて、もう生物・化学・地学のうち1つ」のように、学科に関係の深い科目が共通テスト必須になっていることもよくありますのでこちらも要注意です。文系の場合は「○○基礎」を受験すればよく、これはかつての「○○I」よりも狭い範囲ですが、その代わり「○○基礎」を1科目単独で受験することは不可能で、2科目セットでの受験となりますので、これもやはりかつての受験生よりは負担増になっています。 * 地歴公民の科目について 地歴公民は文系の場合は2科目、理系の場合は1科目受験することが必要なことがほとんどです。その際、地歴のA科目(2単位科目)はいちおう共通テストで設定されてはいますがこちらを使用可能な大学はほとんどありませんので、地歴を使用する場合は必ず4単位のB科目を受験する必要があります。 公民の場合は、2単位科目の「現代社会」「倫理」「政治経済」を使用可能な大学と、4単位科目の「倫理、政治経済」しか認めないという大学に分かれており、難関大は後者が多くなっています。したがって、そのような大学の文系を受験する場合は「倫理、政治経済」の受験がほぼ必須と言えます。理系であれば「倫理、政治経済」にするか地歴のBにするかを選ぶことができますので、地歴Bを受験するのが一般的ですが、「倫理、政治経済」を受験しても構いません。 出題傾向は、センター試験では長らくいわゆる「知識問題」「暗記問題」が多くを占めていました。しかし、共通テストでは思考力を問う問題を増やすことが予定されており、既にセンター試験末期にもその傾向は見られます。ただし、科目の特性として、いわゆる「暗記問題」がまったくなくなることもないだろうと思われます。 * まとめ 以上を踏まえたうえで最も重要なことは、けっして受験校が絞られる前から早々に科目を絞らないことです。受験校の最終決定は共通テスト後にしかできませんが、このとき受験した科目が少なかったために不本意な出願をせざるを得なくなることが少なくありません。特に高校1・2年次に科目を絞るなどは論外ですので、塾などのそのような指導を鵜呑みにしないように気をつける必要があります。 * その他、英語外部試験の導入などについて 共通テストの導入と併せて、当該年度内に受験した英語の民間試験の成績を大学入試に用いることが予定されていました。おおむね英検準2級から2級に対応するCEFR A2相当は取得しておくことが、国公立大学を受験するうえでの必要条件となりそうな状況でしたが、そのようなことを全受験生に課すことは受験生の負担が大きすぎることへの批判などから、この計画の初年度からの導入は見送られています。一部大学でさらに上のCEFR B2程度以上で英語の試験を満点扱いにするなどと言った措置は見られますが、限定的です。このような非常に高いレベルを目指すよりは他教科の学習をする方が多くの人にとっては効率的ですので、英語外部試験は闇雲に受験するのでなく、戦略的に行う必要がありそうです。 == 二次試験の科目選択 == 国公立大学二次試験で用いることになる科目は、もちろん個別の大学ごとに千差万別ですが、文系理系ごとの大まかな傾向についてここで述べます。 * 文系 文系では、国英が主要教科です。特に英語を用いずに済むことはまずありませんので、英語が弱点の場合はこれを克服することが最重要課題です。それに加え、難関大や経済学部の場合は数学が加わります。地歴を用いる大学もありますが、教員養成大学の社会科課程を中心とする少数の大学のみです。 他に、近年は小論文を使うことが少なくありません。教科の名前がついていても実態としては数百字の文章を書かせるという大学もあり、国語での論述も含め、作文能力は受験生の思っているよりも多くの大学で問われていると言えます。 * 理系 理系では、英数が主要教科です。数IIBまでか数IIIまでかは大学・学部によりますが、ほとんどの大学では数学IIIまでです。また、進学後のことも考えれば数IIIまでをきちんと学習しておくに越したことはありません。加えて理科も非常に多くの大学で課されますが、2科目要求されるセンター試験とは異なり、その学科で特に必要となる1科目のみというのが主流です(難関大では2科目を要求されます)。二次試験の理科では、物理や化学、生物のように、『〇〇』科目を要求するのが一般的です。 加えて国語を課す大学もありますが、これは少数派です。医療系では面接が課されることがしばしばあり、これも対策が必要です。 == 過去問の使い方 == 志望校の過去問よりも、まずは市販の問題集で、解説付きの問題集を重視して使用したほうがよいです。なぜなら過去問とは、まず出題傾向や難度のレベルを調べるためのものであり、当然ですが使用者の学力向上を第一目的としたものではありません。 過去問集にも解説などはありますが、参考書と比べたら解説も少ないし、また出題範囲も志望校のものに片寄っています。しかも、たいてい入試問題が難しめなので、初心者には学習の効率が悪いです。基本的には、あまり難関校の問題に挑戦するよりも、むしろ入試平均レベルの問題で良いから多くの問題を確実に解けるようにしたほうが、多くの大学の入試では有利な場合が多いです。 もちろん、大学ごとの出題傾向は固定化されている場合がかなりありますので、過去問練習は、けっして、まったくの無駄にはなりません。要は、使い方だということです。 なお、センター試験の過去問などは、試験馴れの目的も含めて、少なくとも過去数年分のセンター過去問ぐらいは練習したほうが良いでしょう。ただし、センター過去問を使う場合であっても、あくまで過去問は、まず出題傾向などを確認したり、苦手分野を確認して復習するべき分野を探すためのものであり、過去問を解くだけでは、あまり学力は上がりません。 もし、センター対策の問題練習をするなら、実際のセンター過去問ばかりをするよりも、「センター対策」などと書かれた参考書を読んだりした上で、「センター対策」などと銘打った予想問題集に掲載された問題を解くほうが、より効率的かもしれません。 == 検定教科書の難易度 == 検定教科書には、難易度に差をつけた、いくつかの種類の教科書があります。教科書会社ごとの違いだけでなく、同じ教科書会社が複数種類の難易度の教科書を出版している場合もあります。たとえば山川出版の世界史Bの検定教科書には、同じ「世界史B」科目でも、難度別の3種類の検定教科書があります。これらの中から、学校ごとに、その学校の教員が適切と考える教科書を選定し、採用しています。 このことは、生徒はそこまで気にする必要はありません。あくまで高校で与えられた教科書に従って学習するのが基本です。いずれにせよ、検定教科書だけでなく、参考書や問題集なども、受験合格のためには勉強する必要が生じます。 ただし、センター試験の出題範囲が、多くの科目で基本的に検定教科書の内容にもとづいているので、受験生側もある程度は、自分の出身高校以外で使われてる検定教科書での記述の傾向を知っておく必要があります。とはいえ、それらの傾向は市販のセンター対策と銘打ってる参考書でおおむね把握できますので、わざわざ検定教科書を実際に買い足す必要も、あまりありません。 受験生の入試傾向の情報収集としては、基本的に参考書で傾向を情報収集しつつ、出版状況がどうしても市販の参考書では不十分な状況にあると思われる科目の場合にだけ、自分の高校以外で使われている検定教科書も1〜2冊ほど購入して通読すれば、傾向の把握としての教科書の読み込むとしては充分でしょう。検定教科書ばかりでなく、実際にセンター試験の過去問や志望大学などの過去問から、情報収集する必要があります。 なお、もし高校卒業後に浪人や再受験をしていて、検定教科書を買いたい場合などで、しかし高校現役時代と受験科目が変わるなどして、どの検定教科書を買えばいいのかが、よく分からなければ、とりあえず地元の進学校で採用している教科書を買うなどすれば、良いでしょう。 なお、受験勉強法の書籍などで、難関大学の合格者インタビュー結果として「受験勉強なんて、検定教科書の予習復習だけで完璧」などと言われている場合、これは比較的難易度の高い検定教科書を想定しているでしょうから、この点には注意が必要です。 == 塾・予備校の注意点 == === 「合格実績」の注意点 === ;塾生1人でなん十個も大学受験する可能性 合格実績を「水増し」(みずまし)をしている塾などが過去にはありました。具体的には、たとえば1人のいちばん好成績の塾生に、塾が30大学などの受験量を出して各大学を受験させて、その塾からの合格した「大学数」の実績をかせぐ方法です。合格人数はたった1人でも、この方法を使えば、たとえば30倍の大学数に増加できます。せめて、合格した人数を見ましょう。上位10名の生徒が30大学に合格すれば、300大学ぶんのカウントになりますので、事情の知らない人はあたかも300人が合格したかのように錯覚する、という手口です。 ;模試は塾生でなくても受けられる 水増しではないですが、模試をしている予備校については、模試受験生と予備校生とを混同しないようにしましょう(ときどき混同する人がいるので、念のため注記)。他の予備校に通っていても模試を受けられます。たとえば駿台(すんだい)模試を受験するのに駿台予備校の予備校生になる必要はないです。たとえば、河合塾(かわいじゅく)に通ってる人が駿台模試を受験しても、別に構わないのです。どこの予備校に通ってなくても、駿台や河合塾の模試を受けられます。 ;夏期講習だけ・冬期講習だけの合格実績 夏期講習や冬期講習など、短期の講習を受けただけの子の大学合格実績を、その塾・予備校の塾生の合格実績として含める場合もあります。必ずしも通年で塾・予備校に通ってるとは限りません。 ;付属校・指定校の合格が混ざる可能性 ほか、大学の付属高校などの子でも塾に通うことがあるので(付属校には内部進学用のテストがある場合もあるので、その対策として塾に通う場合があります)、注意が必要です。たとえば「塾生が早慶マーチに合格した」と宣伝されても、もとから早慶マーチの付属校や指定校に通っている場合もあります。一般受験での合格とは限りません。 === 指導法の注意点 === ;高校・学習指導要領の無視・妨害 塾や予備校の中には、不適切な指導をするところもあるので、注意が必要です。生徒にはまず学校での学習があり、他科目の学習があるということを無視して、いたずらに自分の担当科目の、自分の塾オリジナルの、不必要な難問を含んでいたりする教材を勉強させたり、大量の宿題を要求したりする指導などが代表的でしょう。志望校や受験校の選択についても、過度に現役合格にこだわるあまり不適切な指導をする事例がよく聞かれます。こういった指導をする塾や予備校は、市場原理で淘汰されてはいるものの、根絶されてはいません。その塾・予備校に相談しても改善が見られない場合、保護者に相談して、他の塾・予備校に変えるなどの対策が必要です。 == 入試範囲外の学習について == 入試範囲外の知識があることで解きやすくなる問題が、しばしばみられます。 よくあるのが、高校の範囲内だが他科目の範囲である知識があると解きやすくなる入試問題です。具体的には、現代文や英語の文章でありながら様々な分野の基本的な知識があると読みやすくなるもの、物理基礎・化学基礎・生物基礎の問題でありながら物理・化学・生物の知識があると解きやすくなるもの、数学IIの問題でありながら数学IIIの知識があると解きやすくなるなるもの、などなど。こういった入試問題でも、原理的には出題範囲の科目の高校参考書の知識だけで解けるように作られていますので、対応するための特別な学習は必要ありません。あえて言うならば、入試科目ではなくても、高校教育で履修する科目の学習はすべて大切にすることが、こういった問題への最も有効な対策と言えるでしょう。 また、大学で習う知識をあつかった入試問題もありますが、そのような入試問題は、高校の教科書・参考書の範囲内で解けるよう、適切な誘導がされています。さらに、高校生用の受験参考書や平均レベルの問題集でも、入試に出題されやすい大学レベルの背景知識には触れている場合が多いので、わざわざ難解な大学生向けの教科書を購入する必要は全くありません。 そもそも、大学レベルの話題をあつかった入試問題といっても、大学で習う用語や公式などを丸暗記しただけで解けるというものではありません。たとえば、大学で学ぶ公式の導出が問題になることがあります。あるいは、そのような公式をあらかじめ問題文中に提示して、代入して使わせることでより難しい問題へのヒントとするような出題もあります。高校で学ぶ知識のみでは計算が大変だが、問題文中に書かれていない大学で学ぶ公式を使うと計算がショートカットできるという問題もないわけではありませんが、そのような公式を使用した答案は、適用可能な条件を満たしているかをきちんと確認しているかも含め、厳しい採点基準で採点されると言われています。 == 参考文献・脚注など == [[カテゴリ:大学入試]] d9hinanujvhout7ugboz7imxyyw24oe 学習方法/高校英語 0 19481 246689 246612 2024-04-14T07:38:03Z すじにくシチュー 12058 /* 英単語集のパターン */ ついでに話しますが、難関私大の英語はそもそも正しい英語なのか、疑問もあります。やや古い話ですが、1990年代に売れた書籍『超勉強法』によると、英文科の大学教授が欧米に留学したら、自身の英語が通じなかった、というエピソードが紹介されています。(『超勉強法』著者の野口悠紀雄(のぐち ゆきお)のことではない。野口が聞いた、ほかの大学教授の話。) wikitext text/x-wiki == 「高等学校外国語」は実質的に英語 == 文科省の指導要領では、教科名は「外国語」です。 しかし、科目名は「英語コミュニケーション」とか「論理・表現」とか、英語の科目しかありません。「論理・表現」科目の内容も、英語の学習です。 なお、一部の高校で第二外国語を開講していますが、その高校でも英語が必履修です。そもそも高校卒業の要件として、英語の単位を一定以上取得しないと、高校卒業の資格を取得できないはずです。 また、高卒認定試験でも、外国語科目では英語が必修です。 第二外国語を学ぶにせよ英語に専念するにせよ、どちらにせよ、高校生は英語を勉強する必要があります。 ;第二外国語の授業の現状について 大学受験では、いちおうは、文学部の仏文科とか独文科や、語学系の学部のフランス語学科とかの入試で、大学によってはフランス語やドイツ語などの第二外国語も入試も出る大学もあります(高校入試とは違い、大学入試では一部の大学では第二外国語でも受験できます)。しかし第二外国語の学習は検定教科書以外で自習などをする事になります。 フランス語とかドイツ語とかの検定教科書は、存在を聞いたことがありません(つまり、フランス語などの検定教科書は無いはず)。少なくともフランス語の検定教科書は存在しません<ref>pdf [https://konan-wu.repo.nii.ac.jp/?action=repository_uri&item_id=1159&file_id=22&file_no=1 前田美樹 著『高校でのフランス語教育: 現状報告 - 授業の活性化と発展に向けて,2011年3月, P35 ] 2023年10月5日に確認.</ref><ref>[https://www.jactfl.or.jp/wdps/wp-content/uploads/2020/03/JACTFL2_87-100.pdf 長谷川由起子 著『高等学校第二外国語必修化提言実現に伴う課題』,2014 , P92]</ref>。もし高校生向けのフランス語などの教材を教科書会社が出版・販売していたとしても、それは検定教科書ではありません。 なお、第二外国語の授業のある高校でのその授業の教材は、大学生向けの教材を用いたり、あるいはその高校独自の教材を用いたりしています。 ;第二外国語の大学受験について 大学入試共通試験(旧センター試験)の科目に、フランス語とドイツ語と中国語と韓国語もあります。語学系の学部・学科など、ごく一部の学科でなら、共通試験のフランス語なども使える場合もあ、そのような大学の学科なら一般入試でも使える可能性もあります。ですが、その他の多くの大学では、第二外国語ではなく英語を受験科目の外国語としては要求しています。 なお、一部の高校ではスペイン語とロシア語とアラビア語の科目もあり高校卒業のための単位として文科省により認められていますが、しかし大学入試共通試験(センター試験)の科目にはスペイン語などは存在していません。このように、高校の単位として日本国に認められていても大学入試共通試験にない科目もあります。 == IPA(国際音声記号)を学ぼう == IPA(International Phonetic Alphabet, 国際音声記号)とは世界中の言語の発音を表記できるように開発された記号である。これが、英語の単語を発音する際、重要であることは明白であろう。日本には、「英語には日本語にはない音が存在する」「英語は発音が大事」などと声高に叫ぶが、どうやってその音を調音するかという肝要なことは教えていない高校も存在するようだ。しかし、調音方法を知らずに第一言語に存在しない音を発音しろというのは不可能と言っていい。IPAを学ぶ際には必然的に音声の調音方法を体系的に学ぶことになる。したがって、フィーリングではなく理論に基づいた音声の発音が可能となる。 * [http://www.coelang.tufs.ac.jp/ipa/index.php IPAモジュール] * [[w:子音|子音]] * [[w:調音部位|調音部位]] * [[w:調音方法|調音方法]] * [[w:母音|母音]] * [[w:国際音声記号|国際音声記号]] * [[wikipedia:IPA_vowel_chart_with_audio|母音のIPAとその発音]] * [[wikipedia:IPA_pulmonic_consonant_chart_with_audio|子音のIPAとその発音]] * [[w:英語学#%E9%9F%B3%E5%A3%B0%E3%83%BB%E9%9F%B3%E9%9F%BB%E5%AD%A6|英語の音素]] == 参考書と辞書と単語集が基本 == 高校英語の検定教科書は授業で教師が解説するのを前提にしているため独学用には作られていなません。 なので、予習復習や独学や受験準備などは教科書では無理です。なので、受験準備などのために教科書とは別に高校レベルの参考書や単語集が必要ですので、早めに購入しておきましょう。 たぶん、普通の高校なら、単語集なども購入させられると思います。もし学校で購入を指定されていなくても、まずは高校基礎と高校中級レベルの単語集を購入しましょう。 実際の検定教科書を見てみると、高校1年向けの検定教科書で、もう高校3年向けの4500語レベルの単語集にある単語が紹介されていることもあります。 とはいえ、さすがに高校1年で4500語レベルまで習得するのは困難です。 そこで普段の家庭などでの勉強では3000語レベルまでを勉強しておいて、検定教科書を読んでて単語集で見当たらない語があれば、そこだけ辞書に頼るのがラクでしょう。ただし既に単語帳で覚えた単語も用法が不明瞭ならば辞書を引くと良いであろう。単語帳は意味は載っているものの、用法は詳しく載っていないことが多いからである。また、少しは辞書の使い方も練習すべきです。 ともかく、高校では単語集がないと、まともに英語を勉強できないだろうと思います 検定教科書は入試対策本ではないので、大学受験を考えている人は、英語の勉強では検定教科書ばかりに深入りしすぎてはいけません。 ともかく、大学受験対策は、あくまで市販の参考書と辞書と単語集などで行います。 == 大学入試に出づらい分野など == === 教科書の学習目標を真に受けないように === 高校英語の学習指導要領などが掲げている目標の中には、高校生には荷が重い目標もあります。 検定教科書の英語表現IIの実物を見比べると、どうも英語でのプレゼンテーションなどが指導要領などで目標に掲げられているようですが、しかし正直、高校生には英語プレゼンテーションは荷が重いでしょう。英語以外の教科の学習を考えると、高校段階では外国語でのプレゼンテーションの習得は非現実的です。 高校英語のプレゼンテーション単元も、中学英語の留学生との会話の単元などと同じで、実際の多くの高校の教育現場ではそれを実行できる場面はまずないかと思います。 2022年の時点では、文科省の英語教育の目標が、かなり高負担な内容ですので、大学入試の傾向とは検定教科書の傾向は、差が大きいかと思います。 昔から教科書と受験英語との間には差がありましたが、とくに近年、上述のように教育目標の負担増の理由で、入試との差異が大きくなっているだろうと思います。なので大学受験を考える人は、教科書の勉強だけでなく、うまく学習スケジュールを自己管理する必要があるでしょう。 === 自己意見の英作文は入試に出ないところもある === 足きりのある大学(たとえば国立大や医学部など)でないかぎり、採点の手間があるので一般入試では数十語もある英作文は出されない可能性が高い、実態があります。 さて、昨今の教科書では、日本のことを英語で説明する課題がよくあります。検定教科書にあるので、いちおうは新共通試験などの出題範囲ではあるわけですが、やはりこれも大学入試の出題傾向の兼ね合いを考える必要があります。 難関大学の入試で要求される単語は、抽象性の高い単語、または学術的な単語などです。 === スピーキング === 英語スピーキングは、大学入試では採点の手間があるので、一般入試ではスピーチの実施はされない。もし入試でスピーチングをやるとしたら、せいぜい、受験者数が比較的に少人数に限られる推薦入試でしょう。 また、英検3級以上ではスピーングの試験がある。英検などの英語系資格を取っておくと入試でいくらか優遇される場合があるので、そういったものを使いたい人にはスピーキングの勉強をする必要がある。 == 教科書ガイドを購入するほうがいい場合 == 教科書ガイドを買わなくても高校英語は勉強できるのですが、色々な理由により、教科書ガイドがあると効率的です。 英語教師のなかには低能な教員もいて、宿題などで、数学など他教科の予習復習の時間を無視して、毎週のように「辞書で教科書の英文の意味を調べてこい」などと、英語科目の事しか考えずに宿題を出す人がいます。 特に英語は、文系大学の志望でも理系大学の志望でも活用するため、教師がうぬぼれていて傲慢な場合があります。 このような英語教師の場合、もし教科書ガイドがあれば、辞書で調べる時間を、大幅に減らせることができます。教科書ガイドによって、空いた時間を活用することができ、単語の練習など、より本質的な勉強ができるようになります。 ただし、ガイドには、あまり細かい答えまで書いてありません。中学までの教科書ガイドとは違います。 == 英語勉強法マニアにならないように == ここに描かれた勉強法を覚えるよりも、まずは、とにかく、3000語レベルまでは英単語の習得のほうが重要です。勉強法マニアになっても、語学では価値がありません。勉強法を調べるよりも、実際に勉強してください。 とくに英語教育についての評論では、多くの評論家が英語教育を評論したがるし、また市販の英語教材などでも英語教育のノウハウをうたっている商品も多いですし、中には英語が苦手なのにウサンくさい勉強法(自称)を掲げる人も多くいるので、あまり勉強法そのものに深入りしないようにしてください。 勉強法に迷ったときにだけ、市販の参考書などに書かれた信頼できる勉強法などを参考にしてください。 == 単語 == まず、単語数3000語あたりの中級レベルを謡っている英単語集を1冊買いましょう。 初級レベル 1700~1800あたりのものは、これは一応高校レベルの単語も紹介していますが、ほとんどの単語が中学レベルなので、当面は読む必要がありません。 また、初級レベルの単語集のうち、中学で習わない可能性の高い単語は、中級レベルの単語集にも書いてあるので、わざわざ初級レベルを買う必要がありません。 さて、単語集の使い方は、赤シートを使って英単語の和訳を隠して、英単語のイメージを思い浮かべてから、その英単語の和訳を見て自分が思い浮かべたイメージと合致するか確認してみたりして、もし合致していたら次の単語へ、一方もし合致していなかったらチェックをして次の単語のテストを行う。これを1~2回もすれば英単語を覚えています。 中学単語については、意味のほうで中学では習わなかった意味がある可能性があるかもしれないので、そちらに注目してください。参考書をつくっている会社は、そうなるように工夫して参考書を編集しています。 === 学習の優先順位 === もしかしたら、英語の単語を覚える作業は文法等の勉強をすることよりも大切なことかもしれません。 市販の学習ノウハウ本でも、高校英語および大学受験英語では、英単語力が決め手になると主張されています<ref>船登惟希 『改訂版 高校一冊目の参考書』、KADOKAWA、2019年3月18日120ページ</ref>。 英文読解で、もし単語の意味が分からないと、せっかく文法の知識があっても、理解できない文も大学入試では多くあります。また大学入試では、暗記を要求される単語数が、ずいぶんと多くなります。 もっと言えば、単語という基礎があってこそ覚えた文の組み立て方が生きてくるのです 大学受験の標準(おおむね4500語レベル)~やや発展レベルまでの単語であれば、単語はいくら覚えても損はありません。学校で教えてもらう英単語だけで満足しないでください。近年では様々な出版社から英単語帳が出ています。 === 英単語集の選び方 === ==== 基本の要求事項 ==== ===== セットになる別単語も必要 ===== 高校レベルでは、新しい単語の意味を覚えるときは、単語の日本語の訳の字面だけを覚えても不十分です。 いくつかの予備校の単語集には英単語の勉強法も書かれており、どれを見ても大抵、「新しい単語の学習では、一緒につかう単語とセットで覚えろ」といった内容が書かれています。 動詞も同様、セットになる名詞と一緒に練習するべきです。もっとも、普通の市販の単語集なら、そういうセットになる単語も書かれているので、市販の単語集で勉強すれば問題ありません。 進出単語がセットでなくても覚えられるのは、せいぜい中学の前半までです。高校ではもう、単語を1語ずつ単独でバラバラに勉強するのは、やめましょう。 しかし、ネット上の英語勉強サイトには、サイト作者・企業の手抜きからか、日本語の訳だけを羅列したような低品質なサイトもあります。まったくネットは参考になりません。きちんと市販の単語集を買いましょう。 ===== 類義語や対義語、例文など必須 ===== まず、単語の学習では、けっしてヤミクモに多くの単語を覚えるのではなく、類義語や対義語との違いなども把握しなければなりません。そのため、例文なども交えつつ把握しながら勉強する必要があります。 なので、例文などの少ない単語集は、少なくとも高校基礎レベルとしてはアウトです。 ==== 結局どうすればいいか ==== 高校生向けの参考書は、セット語彙や類義語・対義語の紹介の必要性など、そういう事をきちんと理解しているので、とりあえず高校生むけの単語集を買えばとくに問題はないのです。 しかし、高校生向けではない市販の英検対策やTOEFL対策本などの資格本の中には、単語を多く掲載したいあまりに、例文や類義語などを省略ぎみの単語集も(英検対策本などでは)多くあります。 なので高校生は、英検対策ではなく、まずは高校生向けの単語集を買いましょう。1社の単語集しか使わないと例文がどうしても不足するので、少なくとも4500語レベル付近では1社だけでなく2社以上が必要です。 ==== 英検などは後回し ==== 現代では、高校の教科書レベル自体、上がっています。昭和の後半や平成の初期は、今で言う3000語レベルが、高校卒業レベルでした。 しかし、令和の今では、4500語レベルが、高校卒業レベルです。 なので本来なら、時代が大きく違えば、英検の級の数値は比較の参考になりません。つまり、年月とともに資格試験で保証された知識は、少しずつ錆びていくのです。 英検などを受けたいなら、高校生向けの単語集を買って習得したあとなら、必要に応じて英検対策本などを買うのは構いませんが、しかしいきなり最初から英検対策本などを買うのは失敗の道です。 なお、もし英検を参考にするなら、準1級までを買えば十分でしょう。 なぜなら、難関大の過去問から構成される桐原5500と英検1級の単語集とを比べてみましたが、傾向がだいぶ違っています。 ==== 英単語集のパターン ==== 英単語集には、主に2パターンあって、 :・ パターン1: 単語を分野別にまとめているパターン(たとえば「旅行」の意味の単語なら、trip と tour と travel をひとつのページにまとめていたりする)の英単語集 と、 :・ パターン2: もうひとつのパターンとして、入試出題の頻度順に統計的に並べた英単語集 があります。 初めて高校英語を勉強する場合は、とりあえず、'''分野別に単語をまとめたパターンの参考書のほうが、使いやすい'''と思います。 なぜなら、分野別の単語集のほうが、類義語や対義語なども、まとめて勉強できるからです。 いっぽう、入試出題の頻度順に統計的に並べた単語集は、高校後半~高校3年からの仕上げなどで用いるのが効果的でしょう。 さて、分野別に単語をまとめたパターンの英単語集で勉強する場合は、レベルが「中学3年〜高校初期」「高校必修」「共通テスト」「二次試験」と何段階に分かれていたりしますが、とりあえず、高校1年の時点で、「高校必修」レベル(3000語レベル)と「共通テスト」レベル(4500語レベル付近)の2冊を買ってしまってください。 高校必修レベルの単語集を買えば、その単語集で中学レベルの復習もしますので、わざわざ中学レベルの復習をふくむ単語集を買う必要はないのです。 自分で単語集を予習する際は、次のペースで予習します。「全部覚える」ではなく「全部勉強する」がポイントです。 :・ 高校1年: 「高校必修」レベル(3000語レベル)〜「センター試験」レベル(4500語レベル付近)の単語を高校1年の終わりまでに全部勉強する。 :・ 高校2年: 「センター試験」レベル(4500語レベル)の単語を高校2年の終わりまでに全部勉強する。 :・ 高校3年: 「二次試験」レベル(4500語レベル+アルファ)の単語を高校3年の2学期の終わりくらいまでに全部勉強する。 これとは別に単語集がもう少し必要ですが(入試用単語集を1~2冊)、まずは上記を出来るようになってください。 注意点として、学校から配布されるような東京書籍や桐原の基本的な単語集は(ただし桐原の灰色のヤツは難関大用なのでのぞく)、高校2年のうちに終わらせる必要があります。 つまり、高校1年のあいだに、予習をして、「高校必修」(3000語レベル)およびレベルの単語集を、ひととおり書き写して、勉強してしまう必要があります。(覚えられるかどうかは別として。) 4500レベルまでいければ理想ですが、それが無理でも必ず高校1年のあいだに3000レベルを終わらせてください。「終わらせる」とは「7割ほど覚える」という意味です(英語以外の教科も考えて、この数字)。これが終わらせられないと、大学受験の現役合格は難しいでしょう。一見するとハイペースですが、実は後述のように中学で習う単語が3000レベルには多いので、意外とラクです。 また、「全部覚える」ではなく「全部勉強する」とありますが、その単語の100%の単語を覚えられなくても70%を覚えたら、次学年の単語集を1回だけ全単語を学び始めてください(たとえ新単語を1回の書き取りで1周しただけでは30%しか覚えられなくても、もし新単語に1000語も触れたら合計300語を覚えられるから、そっちのほうが最初は効率的だからです)。 この、最初に1冊の書き取りをさらっとする勉強法は、他教科たとえば数学では通じない勉強法かもしれません。数学では公式だけでなく応用力なども問われるからです。しかし英単語はそういうのではなく、ほぼ単なる暗記なので(米英なら幼児・児童でも分かる程度の理解力で十分)、なので単語集をさっさと1冊、一周したほうが効率的に覚えられるのです。 さて、いまの単語集を7割ほど習得したら、次学年用の新単語集を購入して1回書き取りだけで一周しつつ、並行(へいこう)して、現学年用の単語集の完成度を上げていき100%に近づけていきます。 特に、高校2年用の単語集は、入試でも基本的な運用力を問う問題として狙われやすいので、それも押さえておきましょう。裏を返すと高校1年用の単語集は、これは例外的に高校受験で狙われやすいもの以外は深入りしなくても良いでしょう。 高校必修レベル(高校1年レベル)には、中学校できちんと5教科を勉強していれば、読みがある程度は身についているハズの単語が、多いのです。 なので、さっさと高校必修レベルをひととおり練習して終わらせてしまい、次ステップの「センター試験」レベルに時間を掛けたほうが得です。 なお、高校によっては、高校3年になっても「センター試験」レベルの単語集までしか、高校3年の英語の授業では扱わない場合があります。 なので、'''授業とは別に、自分で単語集を予習する必要があります'''。 では、なぜ、上記のスケジュール(「高校必修」レベルの単語を高校1年の終わりまでに全部勉強するスケジュール)のようにするのが合理的かいうと、最終的に高校卒業までに(つまり高校3年の終わりまでに)、「二次試験」レベルの単語集(4,500語+アルファ)を終わらせる必要があるので、そこから逆算して、高校2年の終わりまでに「センター試験」レベルの単語集を終わらせる必要があります。 なお、新共通テス・旧センター単語とは別の大学受験単語の傾向では、早稲田大など一部の難関大と、国公立との傾向が違います。(wiki追記: 例外として東京外語大(国立)や英文科などを除けば、)平均的な地方国立大よりも早稲田大のほうが英単語が難しいです<ref>[https://www.youtube.com/watch?v=E-U8m3en_E0 『英単語暗記必勝法!今こそ苦手を克服せよ!』 2022/12/13 ]</ref>。理系の人は、そういう早稲田みたいな難関大の英単語を相手にしてはいけないというか、仮に購入したとしても、けっしてその難関大用の単語集の全単語を覚えようとしてはいけません。 ついでに話しますが、難関私大の英語はそもそも正しい英語なのか、疑問もあります。やや古い話ですが、1990年代に売れた書籍『超勉強法』によると、英文科の大学教授が欧米に留学したら、自身の英語が通じなかった、というエピソードが紹介されています。(『超勉強法』著者の野口悠紀雄(のぐち ゆきお)のことではない。野口が聞いた、ほかの大学教授の話。)そもそも1990年代以前の昭和の英文科の大学教授がこのような惨状なので、あまり古い1990年代~2001年ごろを初版とする単語集にある難しすぎる単語は、真に受けてはいけません。 さて、高校2年の終わりまでに、4500レベルつまり「センター試験」レベルの単語集を終わらせるためには、逆算すれば、高校1年の終わりまでに3000レベルの「高校必修」レベルの単語集を、勉強してしまう必要があることが分かります。 そうするためには、普段からの予習も必要です。 また、もし「今読んでいる章を完全に覚えてから、次の章に進む」などというふうに勉強していると、特定の分野の単語ばかりを覚えることになってしまい、入試に対応できません。特に、学校で、このような分野別にまとめられた英単語を用いている場合に、気をつけましょう。 また、現代の高校英語の単語の紹介順序は、もはや学年別になっていません。高校1年の検定教科書でも、すでに3000語レベルの単語や4500語レベルの単語も平気で紹介したりしています。 現代の検定教科書がそうだということは、現代の入試もそうだという可能性があるということです。なので、あまり単語集の最初のほうばかりに詳しくなっても、現代ではあまりメリットがありません。 また、予習をしないと、たとえば学習ペースの配分ミスを起かしやすく、たとえば高校3年の終わりごろになって、やっと桐原4500語・東京書籍4500語レベルにしか到達できずに、そのため高校3年終わりの時点では「二次試験」レベルに対応したプラスアルファの単語集(旺文社や、予備校系の単語集)に到達できずに、志望校に不合格になってしまうような、ペース配分の失敗を起こしやすい原因にも、なります。 なので、とにかく、予習をして、単語集の先のほうへと進んでいくのが、合理的な勉強法なのです。 ==== 予備校系パターン ==== 単語集にはさらに、「論理性重視で解説が多めの単語集」と「単語が多めの単語集」があります。 で、桐原・東京書籍・旺文社は、実は単語が多めの単語集です。 高校単語の範囲は広いので、少なくとも4500語レベルについては、まずこの3冊のうちの2冊が、受験までに、ほぼ必須で必要です。 しかしこれだけだと、論理的な知識が不足します。桐原などの単語数が多めの単語集などでは、スペース不足などの都合で解説できない知識が、いくつもあるのです。 そういうのを、予備校などの補足的な単語集で補う必要があるのです。だからもう高校2年の半ばあたりから、予備校系の単語集も読み始めてしまうのも、良いかもしれません。 ですが、あくまで予備校単語集「も」です。基本はまず、桐原・東京書籍・旺文社のような、高校英語を一通りカバーしている単語集をベースにするべきでしょう。 ==== 2社目の単語集が必要 ==== 単語集は、1社だけでは対応できません。たとえば東京書籍を使っている場合、東京書籍の単語集には例文が書いてある用法でも、桐原の単語集には例文が書いてない用法もあります(例文なしで意味紹介のみ、という場合がよくある)。同様、桐原の単語集にはあるのに東京書籍にない用法もあります。 この問題に対応するため、高校2年になってからは、たとえば東京書籍を使っているなら、もう一つ別の会社の単語集'''も'''使いましょう。何を使うかは、個人の判断に任せます。しかし、何を使おうが、1社だけでは太刀打ちできません。(昭和の昔なら、ここまで考えなくても大丈夫でした。まだ高校2年生は、昭和なら単語集は1社だけでオッケーだった。しかし令和だと事情が違います。) 実際、塾・予備校などでも、高校で良く買わされる単語集(東京書籍や桐原)とは別の単語集・熟語集をもう1社ぶん買い与えるのが基本であり、受験生は結局、2社の単語集・熟語集を使うことになります。別に東京書籍・桐原のもう一方でなくとも、予備校系の単語集でも良いし、あるいは旺文社ターゲットなどでも構いません。とにかくもう1社ぶん、必要です。 別に2社の単語集を読み比べる必要はありません。新聞のメディアリテラシーの練習とかじゃないので。、 また、一応、単語集のレベルに応じて、上級レベルの単語帳で、過去に下級レベル単語集で習った単語の新しい別用法を教えることもよくあります。なので、東京書籍でも桐原でも、まずは1社ぶんを全部やるのも必要です。どちらかをメインにすると決めたほうが良いでしょう。 高校1年レベルの単語集(3000語以下)はもう1社目では仮に省くとしても(なお、省かずに1周しても構いません)、それでも高校2年次以降の単語集で、もう1社ぶんが必要になってしまいます。このため、どうあがいても単語集だけで最低もう2冊は(2年生の4500語レベル単語集と、やや難関大用の単語集で、合計2冊)、これが平均的な私大に一般受験するのでも必要です。 昭和の昔なら1冊だけで十分だったかもしれませんが、しかし令和は入試の単語が増えたので、そういうわけにも行かなくなりました。 また、上記と関連して、新共通テストも3000語レベルとされていますが、実際には4500語レベルの単語も新共通テストに出てくると思われます。なぜなら上述のように、3000語レベルと4500語レベルの単語に明瞭な境界線は無いからです(さすがに5500語レベルとか7000語レベルとかを要求する事は新共通テストでは出題が無いというだけです)。少なくとも20001年ごろの旧センター試験の時代、学校で渡された3000語レベルの単語集をこなしていてもセンター対応できない受験失敗例もよく聞かれました。(当時、センター試験の出題傾向について上述のような問題が知られていなかったので、進学校でも今でいう3000語レベルしか対応しない高校もよくあった。) :※ なお、説明の都合上、2001年ごろについても「3000語」レベルとか言いましたが、実際には単語数の算出基準が変わっており、現在の単語数の数え方には一致しません。 === 単語の練習法 === かといって、いきなり高校1年で入試対策レベルの単語集を使っても効率が悪いので、まずは基礎レベルの単語から始めるのが良いでしょう。 読解練習や文法練習よりも先に、単語力を増やす練習が大事です。熟語集の暗記よりも先に単語集あるいは単語・熟語集の暗記を優先してください。 英単語を勉強する際、まず最初は、なるべく早く、その単語集の全体の単語と例文を書き終えます。もちろん、それだけでは全部の単語は覚えられませんが、そのほうが次の理屈で効率が良いです<ref>[https://www.youtube.com/watch?v=E-U8m3en_E0 『英単語暗記必勝法!今こそ苦手を克服せよ!』 2022/12/13 ]</ref>。 たとえば1000語ある単語帳を2週間ですべて単語と例文をそれぞれ1回だけ書き写したとしましょう(実際は他教科もあるので無理かもしれないが置いとく)。 たとえ3割しか覚えられなくても、なんと計算上、300語もの単語(=1000×0.3)をたった2週間で覚えられます。たった1周するだけで良いのです。というか、むしろ、けっして3回や5回も書き写すのではなく、最初はたった1回のほうが良いのです。 もしこれを同じ期間に100個だけ限定して熱心に難度も読み書きして覚える方法をすると、たとえ仮に100%覚えたと仮定しても、計算上は100語までしか覚えられません。まして実際には100%は無理でしょうから、よくて80%を覚えて、80語ていどでしょうか。 よって、先に単語集の単語を、たとえ覚えられなくても良いので、全部の単語を書き写すほうが効率が良いのです。 じっくりと何度も読み書きをして確実に覚えるのは、そのあとからです。 入試の現状で、どの教科も覚えることが増えて時間が無いのに、英語では多くの単語を覚えないといけないので、こういう工夫が必要です<ref>[https://www.youtube.com/watch?v=E-U8m3en_E0 『英単語暗記必勝法!今こそ苦手を克服せよ!』 2022/12/13 ]</ref>。 また、参考サイトには書いてないですが、とにかく早めに単語を学ばないと、いつまで経っても英文読解の勉強を始められません。よって、高校入学後の割と早い時期や、および高校2年の初めごろに、まずは、それぞれの学年にあった単語集の単語を一通り通読する必要があります。 高校や塾などの小テストで週に50語~100語とか覚えるのは、それはそれでヤレバいいのですが、それとは別に、単語帳を1周、ぜんぶ早めに書き写すのです。 大学入試では、高校入試と違って、国公立の大学ですら、理系の高校生などを無視した、教科書レベルをやや超えた難単語を平気で入試に出してきます。このため、とにかく上記のような工夫が必要です。 標準レベルの3000語レベルの単語が高校2年あたりでひととおり終わったあたりから、桐原・東京書籍の4,500語に加えて予備校など受験対応の単語集も買って練習します。まだ、平均レベルの単語集を覚え切れて無くても構わないので、受験レベル(4500~5500)の単語集を勉強します。 学生・受験生の勉強科目は、数学など、英語科目以外にもあるので、大変でしょう。ですが、うまくスケジュールを工夫して時間を作ってください。 さらに単語を定着させるためには、英文読解やリスニングなどの単語以外の他の練習もします。 === 単語集のレベル別の利用法 === ==== 初級レベル(1700~1800語)はまず不要 ==== 中学できちんと勉強してきた人なら、初級レベル(1800語)レベルの 単語集には、高校生には不要です。これは、どちらかというと中学3年~高校受験用のものです。 普通に受験勉強をしてきて偏差値48以上ぐらいの人なら、1800語レベルは買う必要はありません、。 本屋で表紙を見ると「高校基礎レベル」とか書いてあるかもしれませんが、ウソではないですが誤解を招く表現です。表紙の宣伝文句は信用しないでおくのが安全です。 この1700~1800語レベルは、おおむね英検3級レベルか、それに毛の生えた程度です。英検3級と英検準2級との間には、かなり難度の開きがあるので、このレベルの教材は英検教材コーナーにはないので、これはこれで1700~1800語レベルは出版・販売されてると便利です。 この1700~1800レベルの後半を見ると、中学で習わない単語も書いてありますが、しかしそれを買わなくても3000語レベルにも同様の単語が書いてあります。 たとえばある1700レベルの単語集で injure (けがをする)という単語を見つけましたが、同じ出版社の 3000語レベルでも同じ単語がありました。 わざわざ初級レベルの単語集で練習しなくても、中級(3000語レベル)の練習での例文の書き取りなどのついでに、自然と初級レベルの単語のスペルも身についていきます なお、初級レベル(1700~1800)の単語集の中に書いてある「高校1年 基礎レベル」みたいな難度の情報は、あまり信用してはいけません。(実際に買ってみて読んで確認しました。)ある単語集でそのレベルの単語を確認したら、いくつも中学レベルの単語がありました。 year (年)とか month (月)とかの中学で習ったはずの単語が、「高校1年 基礎レベル」になっていました。 どうしても1700~1800語レベルを活用するなら、どっちかというと単語練習よりも、高校受験のレベル確認用と言うか、「高校受験の終わり~遅くとも高校1年の1学期の終わりまでには、大体この程度の単語は出来るようになって欲しい」といった確認のためのツールでしょうか。 ==== 3000語レベル ==== ===== 基本 ===== 特別な事情がないかぎり、高校生は3000語レベルから単語集を勉強すると良いでしょう。 いきなり3000語を使うのは中学と高校の橋渡しに不安かもしれませんが、しかし出版社側が3000語レベル本の冒頭の第1章で、中学単語の復習およびそれを高校の視点で理解しなおす勉強をしてあります。桐原と東京書籍のどちらとも3000語レベルの本の第1章は、そういう中高の橋渡しのための単語の紹介です。 逆に、4500語レベルの本には、そういう橋渡しが書いてないので、高校1年では4500語レベルは不適切です。 * スペル暗記の対象について スペルの暗記について、実は中級の単語であっても、すべてを暗記する必要はないし、すべてのスペル暗記は面倒です。優先して覚えるべき単語は、知的レベルの高い単語です。 また、東京書籍『コーパス』シリーズの単語集の前書きを見てみると、実は3000語レベルは「受信語彙」としており、つまりリーディング用の語彙にすぎず、受験の英作文などでは高校新出単語の多くは基本的に用いないことを想定しています。 受験では短時間に英文を書かないといけないので、中学レベルに毛の生えた単語力に、若干の高校中級レベルの単語を加えて、それで英作文を完成させれば十分なのです。もちろんビジネスの仕事の英文とは違いますが、そういう実務の英作文はそういう専門家の大人にまかせればいいのであり、高校生には関係ないです。 東京書籍の意見ではないですが、具体的に単語例を挙げて説明するなら、たとえば respond「応答する」 と nod 「うなづく」だったら、respondのほうを優先してスペルを覚えなければなりません。 なぜなら、respond のほうが名詞形の response などもあり、応用が多く、意味も広範であり英作文などで使わざるを得ない可能性が高いからです。一方で nod のほうの用途は、誰かがうなづく場面どまりです。また、ノッドの名詞形や形容詞形はないと思います。 また、nod はビジネス英語などでも agree 「賛成する」で言い換え可能です。入試の英作文ですら、ほとんどの場合は agree で十分でしょう。 この nod のように、利用価値の低い単語は、スペル暗記は後回しです。せいぜいリーディング用に「そういう単語もあるんだなあ・・・」と知っていれば十分です。 実は中堅私大や地方国立の英文の単語は、学科によっては案外センター試験ほど難しくない場合もあります。 さて、残念なことに、高校の単語集あたりから、だんだんと英語教育の質が形骸化しており、単語集がやみくもに単語数を多く紹介したいあまりに説明不足になってきています。 たとえば中級単語で content (満足する)という形容詞があるのですが、じゃあ satisfied (満足する)とどう違うのかは、単語集には書いていません。なぜならcontent は中級レベル、satisfied は初級レベルの単語なので、本を別冊にまたいでしまうからです。こういう縦割り教育なのが現状です。 辞書で content を調べるような思慮深い人は、他の単語を覚える勉強時間が不足してしまうので入試では不利になってしまうわけです。ひどいもんです。 * 2冊買うべきかどうか 3000語レベルの単語集(桐原『データベース3000』や東京書籍『コーパス3000』)については、2冊そろえるべきか1冊に集中すべきか、判断が分かれるでしょう。実際に各自が単語集を読んでみて判断してください。べつに2冊あっても構いませんし便利ですが、他の教科の勉強などもあるので、難しいところです。 旺文社の『英単語ターゲット1200』も、中級レベルでしょう。 あるいは、2冊そろえれば例文の数が単純計算で2倍になるので、辞書でいちいち高校レベルの例文を探す手間が減りますので、2冊目の単語集にはそういう活用法もあるかもしれません。あるいは、問題練習とかの手間を2冊目の単語集で減らせるかもしれません。 このように2冊目の単語集は便利かもしれませんが、しかし目的が上級レベル(4500~5500語)と中級レベル(3000語)では違います。 まあ各自がどうするか判断してください。 なお、東京書籍『コーパス3000』は、数字だけ見れば桐原『データベース3000』と同じですが、しかし東京書籍のほうで3000語レベルのもの(たとえばinjure)が桐原の4500語レベルに書いてあったり、あるいは別の単語ではその逆で桐原3000レベルの単語が東京書籍4500語に書いてあったりと、あまり分類は明確ではありません。 ===== 3000語の語法は初めは深追いするな ===== 偏差値の低め~平均程度の大学のなかには、4500語レベルの単語をあまり出さない代わりに、3000語レベルの範囲の単語で、やたらと細かい語法を要求する問題もあります。 しかし、4500語レベルや5500語レベルも勉強する一方で、いつまでも3000語の語法ばかりを覚え続けるわけにもいきません。 だから勉強法としては、極端なことを言えば、3000語の語法を熱心に練習するよりも先に、まず4500語レベルの単語集で一通り、単語の訳を暗記したほうがマシです。 実際、入試問題にも、そういう傾向もあります。 文系私大の偏差値50前後の平均的な大学が3000語レベルの細かい語法を4択問題などで聞いてくる一方で、文系私大の偏差値60くらいの大学のある出題が、4500語レベルで単語の和訳の丸暗記だけで4択問題が解けてしまう、といったような出題事例も少なからずあります。 ==== 上級レベル(4500~5500)の単語集について ==== ===== 原則 ===== もし大学受験を目指しているなら、高校3年くらいになったら、4500語+アルファの単語集にステップアップします。ここでいうアルファは、予備校などの出している、補足的な単語集です。 いっぽう、桐原の5500語レベルの単語集は、あれは志望校などの傾向の確認用などで、辞書的に使うものです。 桐原5500をメインにするべきではありません。桐原4500語または東京書籍4500語を一通りクリアしたのなら、メインの単語集としては旺文社1900または予備校系の単語集に入るべきです。 5500語レベルの単語集の使い方なのですが、かなり難しいです。ここでいう5500語レベルとは、桐原『データベース5500』を想定しています。 旺文社の(1200ではなく)『英単語ターゲット1900』は、実はやや高レベルです。東京書籍4500・桐原4500にはない単語でも、旺文社1900には記述されていることもあります。なお、それらの単語の元ネタは、受験過去問もありますが、じつは英検2級~準1級あたりです。 旺文社のは、数字の小ささにダマされてはいけません。桐原や東京書籍の数字とは、旺文社の数字は意味が違います。 桐原4500はその装丁の厳めしさなどに比べて、実はやや単語のレベルは控えめです。東京書籍も桐原のスタイルを踏襲しているような所があり、やや控えめのレベルです。 だから旺文社は、派生語などで、桐原・東京書籍が紹介してない単語をポンポンとたくさん紹介しています。 このため、現代でも勉強法としては、「まずは高校2年の終わりまでに東京書籍または桐原の出している高校用参考集をベースに勉強。高校3年あたりで旺文社のレベル高めの単語集を買い足して勉強する」といった感じになるでしょうか。 4500語レベル単語集では、桐原と東京書籍のどちらの単語集でも不足です。なぜなら、単語集1冊だけでは、例文不足かつ解説不足により、あまり役立ちません。なので少なくとも上級レベルだけ、出版社を変えて2冊、必要でしょう。東京書籍4500+旺文社1900にするか、それとも桐原4500+旺文社1900にするか、判断は読者に任せます。 具体的に単語をあげて説明すると、たとえば「限定する」という意味のrestrict と confine、ともに似たような意味ですが、単語集には意味の細かい違いは書いていないか、書かれていても強調されていません。 桐原の単語集だとこの2つが類義語だという情報はあるのですが、しかしニュアンスの違いが説明不測です。 一方、東京書籍および旺文社だと、restrict を「制限する」の意味で説明しているのでニュアンスの違いは分かりますが、しかしconfineと類義語である情報が欠落していました。 さてconfine のほうが、「地理的に制限する」=「閉じ込める」のような意味合いが強いのですが、旺文社の単語集だと「閉じ込める」の意味もあるのですが、しかし桐原の単語集にはそこまで書いていないのです。 かといって東京書籍のほうには、confine の「限定する」の意味が書かれていません。 また、restrictは(限度内に)「制限する」という意味もあります。むしろ、こっちの意味で紹介している単語集もあります。 どちらの単語集を使うにも、例文が不足しており、ひとつの単語集だけでは意味がまったく分かりません。困った教育状況です。本来なら入試に出題する単語を減らすなどして理解を深めさせるべきでしょうが、しかしそういった教育が出来ていないのが日本の現実です。 それでも、まだしも大学受験用の単語集は、なんとか教育効果を高めようとした形跡も見られるのでマシです。なので、単語集を2つ組み合わせると、なんとか役立ちます。一方、TOEIC 高得点用の教材とか英検の1級あたりの教材の単語集とか、やたらと単語数を多くしているばかりで、ひどいものです。(資格本の活用法については別セクションで述べる。要点:出題傾向を把握する目的だけに英語資格本を使う。) なお、桐原の場合、紹介する単語数そのものは旺文社などと比べて減りますが、その代わり、桐原の密度の高さが長所であり、桐原では他の単語集には無い語法などを紹介しているなど、単語1つあたりの情報量が桐原では増えています。なので、桐原の単語集も油断はできません。 一見すると、桐原の単語の項目のひとつずつの情報量は多くないように見えますが、しかし、桐原では別ページの紹介単語を用いた熟語をまとめたページなどがあるので、それを含めると桐原の単語ひとつあたりの情報量は多くなります。 かといって高校生としては、英単語集ばかりをそう何社も比較して勉強するのは無理でしょうから(数学など他教科の勉強も必要だし、英語の勉強も単語以外にも読解練習やリスニングなど多々あるので)、受験では結局、すべての単語は覚えきれない状態で挑むことになるでしょうか。 大学受験もその後の資格試験も、けっして満点はとる必要は無く、人生の目的に必要な志望校などの合格最低点を上回って合格さえ出来ればいいのです。 別に大学受験の英語に限った話ではないですが、大学受験において、平均以上の大学の入試では満点をとるのは基本的には困難であり、普通は満点は無理です。小中学校の校内テストと事情が異なります。 ===== 4500語以上のスペルは実は覚えなくていい ===== 実を言うと英語のスペルの暗記については、4500語レベルおよびそれ以上のレベルの単語のスペルは、まず覚える必要が低いです。 なぜなら英作文や和文英訳であまり使わないからです。 また、桐原5500や、東京書籍4500の後半部の単語などは、実はもうその1~2回のスペル練習すら、しないでも済むのです。おおよそのスペルと用法のイメージを頭に入れれば十分でしょう。 また、グローバル人材の育成などを目指す大学ならば、英作文などを要求してくると思いますが、だったら英作文で使うようなレベルの中級英語(4500)で十分なのです。むしろ、4500語レベルですらスペルミスなく習得していたら、かなりの勉強家です。 ましてや5500語レベルの単語については、読解問題で出題されたときに意味を把握できればいいのです。 仮に、桐原5500語レベルの単語のスペルを暗記させる問題を出す大学があっても、どうせ他の現役受験生の多くも解けない問題なので、実質的にスペル暗記は5500語レベルでは無視していいでしょう。 一部の浪人生で文系専願の人なら解けるかもしれませんが、難関大を目指して4浪だの8浪だのしている連中と、現役生は張り合ってはなりません。 TOEICなどの国際的な資格試験では普通、書き取りをしません。なぜなら採点の手間の都合で、TOEICでは選択問題ばかりです。大学側が入試で入学後のTOEIC対策などを考えた出題をしたとしても、スペル対策はもはや不要なのです。 英検でスペル暗記を使うかもしれませんが、しかし英検は日本でしか評価されません。 桐原5500は論外として、 正直、時間的に現役高校生が、桐原『データベース4500』と東京書籍『コーパス4500』または旺文社『英単語ターゲット1900』を使いこなすレベルにクリアするのですら、高校3年間では少しキツいと思います。たぶん多くの高校生は予想では3年生のときに「上級レベルの単語集の用法や用例を覚えている最中に、時間切れで、高校3年の卒業式を迎える」という結果になると思います。なぜなら、このレベルで、急に単語を覚えるのが難しくなるからです。かといって中級レベルまでしか勉強しないと、卒業後の実務のリーディングにも不便なので、上級レベルを高校3年で教えるのにも意義のあることなので、教育者には悩みどころなのでしょう。 なので勉強法としては、4500語レベルをクリアできなくてもいいので、ある程度の勉強をしたら、予備校などの出しているレベル高めの単語集をいくつか買います。 諸般の事情で、東京書籍・桐原・旺文社が紹介していないが、高校生に勉強してほしい定番の単語みたいなのがあって、そういうのが予備校系の単語集で紹介されています。 ==== 予備校の単語集は何をしているか ==== 歴史的な事情で、今の4500語レベルの単語集には書かれていないが実は昔の1990年代ごろまでの高レベル単語集には書かれていた単語があります。 そういう単語が、難関大学で狙われるかもしれません。 旺文社1900や桐原・東京書籍4500語にない単語の正体のひとつは、そういう昔の課程の単語です。 で、それが予備校系の単語集の元ネタのひとつでもあります。 東京書籍・桐原の3000語レベルや4500語レベルで旅行会話のような実用英語が増えたりビジネス英単語などが増えたので、昔なら4500語レベルに書いてあった単語のいくつかが今は5500語レベルにハミ出ているのです。 なので、予備校などの出す、受験レベルの単語集が1~2冊は必要です。そういうハミ出た単語だけ、あとは予備校系の単語集で抑えておけば十分なのです。 予備校の単語集を見てみましたが、実はそれほど特別な英単語はないのです。また、じつは、桐原4500などの学校向け単語集の単語すべてを均等に覚える必要はなく、やや傾向があります。 たとえば旅行英語で使う単語など、検定教科書にあるから桐原・東京書籍は紹介しているものの、あまり大学が重視してない項目もあります。 だから、桐原/東京書籍 に加えて、旺文社ターゲット、さらに別の予備校系などの高校3年レベルの単語集を何か1~2冊つかって知識の穴埋めをすれば、もう十分でしょう。 もしかしたら、高校2年からもう、予備校の出版している難関向けの単語集を使ってもいいかもしれません。 市販の予備校の単語集を見ても、けっして、桐原5500語レベルの単語を片っ端からは教えていません。桐原5500のアレは、高校生には習得が無理だと思われているのでしょう。 ==== 受験英語の特殊事情 ==== 大学受験英語の特殊な事情ですが、明らかに高校範囲外で実用的にもメッタに使われていない英単語が難関大学で出されており、当然に読めないのですが、しかしなぜか他の文章の単語から文脈にとって意味をとれるようになっています。 もちろん、現実ではそんな好都合なことは滅多に無いのですが、受験の英文はたいてい都合よくそうなっています。 また、万が一、他の英文の文脈から読めない単語が出ても、どうせ他の多くの受験生も解けないので、そういう問題は解けるようにしておく必要がありません。 ともかく、入試対策としては最低限、東京書籍4500・桐原4500をベースに、さらに旺文社1900で派生語を固める必要があります。 しかし、それとは別に、予備校などの出す、プラス・アルファ的な受験レベルの単語集が1~2冊は必要です。 歴史的な事情で、今の4500語レベルの単語集には書かれていないが実は昔の高レベル単語集には書かれていた単語があって、4500語と旺文社1900をひととおりクリアしたあとは、そういう歴史的経緯のある単語だけ予備校単語集で攻略すればいいのです。 ==== 英単語集の読書計画 ==== 最初から高校在学中の読書計画に、英単語集の読書を想定して組み込んでおくと良いでしょう。また、桐原・東京書籍・旺文社あたりに基本の単語集とは別に、他社の少しだけ発展的な単語集を読書感覚で読むと良いでしょう。 高校必修の範囲を越えた単語や派生語などは、読書感覚でひととおり解説に目を通すだけの単語集の勉強でも十分に対応できる場合も多くあります。 しかし、いちども読んだこともない単語は、さすがに入試で対応できません。だから、一度でも解説に目を通してしまえば、済む単語も多くあるのです。 なので、広く浅くでいいので、読書しておく必要があります。 === 大学受験に必要な単語量について === 一般に、大学受験で、難関な学校の英語を読み解くには4000語程度を知っていることが望ましい。 世間でよくある勘違いとして、「近年はリスニング導入などにより単語数が減ったから、用法を覚えるのを中心にすべきだ」という知ったかぶりの勘違いがありますが、しかしそれは「90年代のような(現代換算で)6000語レベルとか7000語レベルとかやってた受験戦争の時代ほどは、2020年代では多くの単語を覚える必要が無い」という意味です。そんだけ昭和や平成初期の受験戦争は、片寄っていたというだけです。現代だと早稲田や上智の英文あたりしか出さない難しい英単語を、昔はマーチ文系学部や関関同立なども出していた、というだけです。 2020年代の現在での平均的な大学受験レベルである4500語レベルまでは、さっさと目指してドンドンと覚えてください。もちろん用法なども覚えるのは当然です。 「単語数が減った」という意味は、「英検1級にしか出ないような超マニアック単語は出ない」という意味です。(たとえば redemption 「(キリスト教用語)人間の罪のあがない」(なお、おそらく「罪」とは宗教的な原罪)みたいなマニアック単語は大学受験では出ないという意味。) 2001年ころは実際に入試に英検1級の redemption が出たかはともかく、ひょっとしたら英検1級単語もチラホラと出るかもしれないとして、一部の文系受験生はそういう単語も勉強してたわけです(まだ今ほど受験ノウハウが、インターネットで共有されてなかった時代だったので)。 つまり、難解な単語も多い桐原5500は、あれでもマシなほうなのです(なぜなら、実際に入試に出た単語を中心に掲載しているので)。英検1級の単語集は、桐原5500をはるかに超え、もっとマニアックで(高校生にとっては)ひどい教材です。そういうのが英検1級です。 === 学部ごとによる出題傾向の違い === 単語集などで出題校を見ると、学部名が書いてないですが、実際は学部によって出題傾向がけっこう違います。少なくとも1990年代はそうでした。 基本的に、理系の学部では、5500語レベルのような、あまりに難しい単語は出ません。そういうのを出すのは、よほどの難関私大や、それも文系の学科です。少なくとも2001年ごろはそうでした。理系学部が出すのは基本、化学英語を除けば、せいぜい旺文社ターゲット1900のような、どこの書店の参考書コーナーでも入るような単語です。少なくとも2001年ころの私大では、法政大学の理系学部および東京理科大および四工大(芝浦工大や工学院大など)はそうでした。 理系の学部の入試では、英文科ほど難しい単語は出てきません。もし仮に出てきたとしても、相手する価値が無い大学です。それとは別に、理系の大学では、科学英語などが出る場合があります。特に私大は、少なくとも1990年代はそうでした(当時、科学英語の参考書が少ないにも関わらず、マーチでも青学あたりがそういうの出していた)。私立だけでなく国立でも、東工大などの国立の難関理系大学でも、昔は科学英語を出してた時代もありました(今はどうか知りません)。 ほか、最近はどうか知りませんが、桐原5500の単語を見ると「輸血」の英語など、ちょくちょく医学的な英語があったりして、90年代くらいの昔は出たようです。 常識的に、医学部などで、そういう長文でも出したのでしょう。もしかしたら他学部の出題かもしれませんが、志望以外の専攻の専門用語までは付き合いきれません。 もし今の書店の受験参考書コーナーにそういう科学英語の単語集があれば、今でも出るのだろうし、無ければ、出ないと出版社が判断したのでしょうから、書店の状況に従えば安全だと思います。 赤本などの過去問などで、もしかしたらそういう専門的な英単語を勉強できるかもしれません。志望校にも寄るので、念のため、過去問などを確認してください。 もし、普通の書店にある単語集に無い単語ばかり出す国立大学があれば、批判されるべきです。国民の税金で運営されているのですから、どこに住んでる国民でも勉強できる単語でないといけません。 私大の単語はどうか知りません。 === 単語の小テストばかりを受けても、復習しなければ単語力は身に付かない === 学校や塾で、単語の小テストを受けさせられる場合もあるでしょう。「単語集の○○ページから△△ページまでを小テストで出すので、書き取り練習して覚えるように」という小テストです。 たいていの高校生の場合、予習はテスト前にしますが、いっぽうで復習をしているかどうかは、個人任せです。 ですが、小テストをいくら受けても、復習しなければ、単語力は増えません。 もし、単語の小テストを受けたままで、その後は復習せずに、ほったらかしにしてしまったら、何も単語力が伸びません。 単語テストは、テストを受けた後に、自分の未修得の単語を復習するために存在しているので、テスト後に復習をする必要があります。(もちろん、テスト前に予習も必要である。予習をしていれば、未修得の単語が減るので、復習の単語数が減る。) 要するに、小テストの使い方は、全国模試の使い方と同じです。 全国の高校や塾のうちの一部では、どうも、小テストの目的を忘れていて、「とにかく毎週、単語の小テストをすればいい」と安易に考えているような教育も、ある気がします。 ここを読んでいる読者高校生は、小テスト本来の目的を思い出して、小テスト後には復習と予習をしましょう。 さて、たいていの高校や塾では、1週間に1回のペースで、単語20〜50語ほどの記憶をはかる小テストをしていると思います。 1週間ごとに50語ほどのペースで単語小テストをしていれば、充分にハイペースですので、それ以上は週あたりの単語数を増やす必要はありません。(英語が好きなら、さらに勝手に単語数のペースを増やせばいいだろう。) 裏を返せば、復習をしきれない量の単語小テストを毎回受けさせられても、非効率です。例えば、1週間ごとに300語の単語小テストを高校で受けたとしても(ただし高校1年の1学期だと、中学英語の復習で、そういう数百問のテストもありうる。しかしそれは期間限定)、そんなに英単語ばかり復習しきれないでしょう。(数学など他教科の勉強もありますし。) 万が一、そういう高校や塾の場合(1週間に300語の単語小テストの場合)、その高校や塾の小テストは後回しにして、自分で単語を予習・復習しましょう。 ただし、定期試験や期末試験などで、今までの単語小テストの合計の数百語のなかから単語が出題される場合は、多くあるので、その復習はしましょう。つまり、学期内の小テストは、その学期中に復習し始めましょう。(どのみち、テスト後にも補習などがあるだろうが・・・) 夏休み明けや、冬休み明けに、前の学期の小テストの範囲内の単語が出題されたりしますので、休み中にも、復習しましょう。(予習も忘れずに。小テストは最終目的ではなく、入試合格などが、より本質的な目的なので。) 同様に、3学期の年度末の期末テストなら、1年間の小テスト範囲の合計1000語ちかくがテスト範囲に含まれる場合も多いので、その復習はしましょう。つまり、年度内の小テストは、その年度中に復習し始めましょう。(どのみち、テスト後にも補習などがあるが。) == 文法 == === 完璧な文法理解はあきらめる === ==== 背景 ==== 高校では、中学英語の不正確な文法を、修正するような内容も習います。 しかし、だからといって、けっして完全にネイティブ級な英文法を目指してはいけません。高校生には無理です(大学生ですら無理だろう)。それこそ、米英生まれの人以外は、もう専業の英語教師みたいに年以上も勉強しないと到達できない水準の世界です。 なので、大学受験で要求される文法は、せいぜい、大学受験用のどの参考書にも書いてあるレベルの基本的な文法さえ理解できればいいのです。 そういう基本事項さえ押さえていれば、少しくらい文法が不正確でも、たぶん大学受験では多めに見てくれます。仮に多めに見てもらえなくても、もうそこまでの対策の時間は高校生にはありません。 じつは、受験参考書の文法解説すら、本当はまだまだ説明不足です。ですが、大学受験参考書を超える内容はもう、高校生には時間的には無理だし、数学など他の教科の勉強も必要なので、あきらめる必要があります。 これはつまり、大学受験の英作文でも、実は少しくらいマチガイがあっても良いのです。どの参考書にもある基本的な文法事項さえ押さえてあれば、少しくらい文法が間違っていても、大学は許容するでしょう。(許容しない大学があっても、英数学など英語以外の他教科の勉強を無視した大学なので、無視していい。なお、国公立の東京外国語大学では、受験生に数学を要求しています。) 日本人と外国人の立場を変えれば分かります。日本在住の外国人タレントとかで、もう十年以上の長いあいだ日本に住んでいる人ですら、ときどき文法ミスをしますし、日本語の発音も日本人とは少し違います。ですが、それを日本社会は許容します。 英語でも同じことです。向こうの国の人は、少しくらい日本人の英語の単語の並びや発音がヘンでも、話の内容がシッカリしていれば、聞いてくれます。 ==== 対策 ==== 上記のような背景のため、大学受験対策の英文法の勉強としては、せいせい平均レベルの問題集をせいぜい2冊ほどクリアすれば十分です。せいぜい、複合問題とかを解ければ、充分でしょう。 もっと言うなら、'''英作文の入試問題の場合、文法がすこしくらい間違っていてもいい'''のです。どの教科書・参考書にも書いてある基本を学んだ形跡さえある英作文を書ければ、あとは意味が通じれば、たとえば英作文中で冠詞がすこしくらい抜けててもいい、もしくは余計な冠詞があっても良い(本来は冠詞をつけない名詞に a とか the とか書いてもいい)のです。(ただし、あくまで「意味が通じるなら」の条件つきです。冠詞を間違えると意味が通じない英作文の場合は、間違えてはいけません。) 英作文の問題なんて、せいぜい英作文の参考書を数冊と、あとは普通の英文法の参考書の内容を押さえておいて、一通り学んだ形跡さえあれば、あとはもう小さなミスは受け入れるしかありません。仮に入試でその文法ミスが減点されようが、もう対策の時間がありません。 たとえば、日本語訳に引っ張られて、英語では、その単語には使わない冠詞をつけくわえても、そういうミスはもう、受け入れるしかありません。「英語以外にも日本語の知識も多いがゆえに、間違えてしまう」という類のミスは、もう受け入れるしかないのです。 日本語の学力に限らず、数学の学力でも理科でも社会でも、'''他教科の学力が高いがゆえに発生しやすいミスは、受け入れるしかありません'''。仮にこういう知識の多さゆえのミスをひどく減点する採点者のいる大学があっても、そういう大学はあまり教育水準が高くないので、もう相手しないほうが良いです。 また、辞書や一部の参考書のコラムにしか書いてないような細かい文法はもう、いちいち覚えてられないので、間違えてもいいのです。 また、仮に文法にミスが無くても単語にミスがあれば英作文では減点されかねないので、単語を学ぶほうが重要です。 ともかく英作文では、けっして「小さなミスを避ける」という発想ではなく、「'''大きなミスをなくすために、小さなミスを許容する'''」という発想の転換のほうが重要でしょう。 大きなミスにつながりかねない、文型とか過去形・完了形とか仮定法とか関係詞とか、「もし間違えると、意味がまったく変わってしまったり、逆の意味になってしまいかねない」という、そういう単元を重点的に身に着ける必要があります。いっぽう、助動詞などの高校で習うような微妙なニュアンスの違いとかは(たとえば助動詞 will は、「明日は日曜日だ」みたいな確実な未来では使わないというニュアンスがある)、間違えても小さなミスですので、ある程度は小さなミスを英作文では妥協する必要があります。 英作文では、よほど簡単な文でない限り、ミスは無くせません。また、だいたい英作文を要求してくる大学は、そこそこの長さの英作文を要求してきます。よって、ミスをゼロにしようという発想では、ネイティブ以外では対処できません。 たとえば、英作文がまったく逆の意味に受け取られてしまうような大きなミスは、避けなければいけません。また、そもそも米英人に通じないような文章も、避けなければいけません。 しかし裏を返せば、英作文で少しくらいニュアンスが変わってしまっても、教科書レベルの文法をきちんと押さえていて、もとの和文の意味の90%くらいが通じるなら、ミスは受け入れざるを得ません。 ;大学入試も英検・TOEICも単語重視 文法の要求水準がそんなに高くないので、平均的な文法問題集をクリアしたら、そのあとは単語などを勉強したほうが良いと思います。 もし仮に、文法で難問を入試に出してくるブランド大学があったとしても、そういう大学は単語力も多く要求してくるでしょうから、文法の難問よりも単語力の増強に時間を当てたほうが良いでしょう。 英検など検定試験では、単語については大学受験を超える単語も要求されます。しかし文法については上述の通り、大学受験を超えるような文法理解は英検・TOEICですら要求されないです。世間の人は、そもそも受験参考書を超える文法知識の存在そのものを知らない人すらも多くいるくらいです。 === 参考書で勉強する === 高校英語の英文法の勉強は、検定教科書ではなく参考書で勉強するのが定石、基本です。 なので、まずは参考書を買い始めましょう。普通科高校なら、おそらく高校の入学時、検定教科書の購入と一緒に、参考書も買わされると思います。 もし大学受験を考えるなら、英文法の参考書を買わなければなりません。 とりあえず、下記に後述する網羅形式の本を持っていれば、ひとまずは安心でしょう。 === 高校英文法は例外も多い === 中学の英文法の教育では、規則的・論理的な文法事項だけが取り上げられたのですが、高校は違います。 このことからか、高校英語では英文法の参考書のスタンスがいくつか分かれています。 1. 例外的な事例にはあまり深入りせず、基本的な事項を重視したスタンス 2. 辞書的に、英文法のあらゆるパターンを網羅的に掲載したスタンス があります。(実際にはこの中間の編集方針の参考書もあるが、説明の都合上、二極に単純化することにする。) 予備校系の講義形式をうたった参考書のいくつかや、高校英文法の入門書などの参考書のいくつかは、基礎的な重要事項を特に重視したスタンスです。(そのため、例外的な事項の説明は省かれているか、少なめです。) いっぽう、高校にもよりますが、高校で配布されるような昔からの、いかめしい感じのする参考書は、辞書的・網羅的なスタンスの参考書です。 センター試験などを考えるなら、網羅的なスタンスの文法参考書を最終的には読んで覚えざるを得ません。 一応、網羅本だけでも受験対策は可能ですが、塾や予備校などに通ってない人や、高校の授業の質に不安のある人は、さらに基礎的な事項を重視したスタンスの文法参考書もあると良いかもしれません。 例えば理系の中堅私大などで、あまり例外的な文法事項を要求するとは思えません。 ただし、これは私大の場合の話です。国公立の志望の場合は、共通試験を対策せざるを得ず、そのため二次試験がどうなっていようが、その対策のために辞書的・網羅的な参考書を読まざるを得ません。 TOEICなどの資格試験が近年重視されており、大学でも私大などで推薦入試や自己推薦などでTOEICの成績を考慮する大学も多く、企業もTOEICを表向きには重視していますが、TOEICは文法教育における論理性や高校生の論理性の涵養に配慮する義務はありません。なので、この問題の逃げ場は、大学受験にはありません。TOEICが果たして本当に実用英語かどうかはともかく、世間一般で「実用英語」だろうとは言われています。 === 網羅本でも全部の構文は紹介していない === 例えば比較級の構文「A is B no more than C is D」は、ある参考書(網羅本)には紹介されていませんでした。 高校英語で習う構文は多いので、複合的な構文などは、網羅本といえども一冊の参考書では紹介しきれないのです。 もし英語だけしか学習しないので済むのであれば(実際は違いますが)、英文法の網羅本の参考書を2冊や3冊も読み比べることで自分にあった参考書を選べばいいですが、しかし他教科の勉強もあるので、そうはいきません。 悩みどころです。各自、うまく対応してください。 また、大学生・社会人向けの厚めの文法参考書でも、すべての構文が書いてあるわけではないです。例えば『ロイヤル英文法』という大人向けのやや専門的かつ高度な英文法参考書がありますが、「all the +比較級」の構文は書いてありませんでしたし、巻末の索引を調べてもありません。 だから、大人向けの文法参考書を読んだところで、この問題「網羅本でも全部の構文は紹介していない」は解決しないのです。 === 時間配分 === 文法の学習は当然に必要ですし、入試にも良く出ます。しかし、文法の学習にばかり時間を掛けてはなりません。 高校に入学すると、高校の範囲の文法事項を、おそらく学校や塾などで急に教わり始めるでしょう。それらの文法の新知識の学習も大事ですし、当然に学習するべき知識ですが、読者のみなさんは英単語の学習も欠かさないようにしてください。文法なんて覚えることも少ないし、大学受験をするなら最終的には大学受験のころにまで文法を覚えられれば良いのです。なので文法の難問を練習する時間があるなら、それよりも、まず先に単語を優先的に勉強して語彙力を増やしたほうが効率的でしょう。 また、入試の文法問題も、文法の知識だけで解ける問題は少なく、単語の知識や語法の知識などと組み合わせないと解けない問題なども、入試では、よく出題されやすいです。なので、単語の知識が、大学受験対策では優先的に必要なのです。 2010年以降なら、中学校で、すでに大まかな文法の枠組みは習っています。2022年では、仮定法すら中学校で習っているはずです。もはや高校で習うのは、無生物主語など若干の単元と、あとは仮定法過去完了だとか、現在完了進行形とかくらいです。 そういった合わせ技は、それほど熱心に勉強しなくても、入門的な問題集などで問題練習すれば、普通に習得できます。 === 高校英文法は実は少しウソ知識 === 高校生用の文法参考書は、高校標準レベルの参考書は、基本的には、中学英語の復習も兼ねています。 このため、普通なら、高校1年生は復習のためにわざわざ中学参考書を買いなおす必要はないです。 それよりも重要なこととして、実は高校英語の文法参考書には、不正確な知識があるという事です。中学英語が理解重視のため少し不正確でかなりひどいカタコト英語が中学生用の参考書・教科書にあるので、同様に高校の英文法も少しだけ不正確なウソの知識があるのです。 さて、単語集では基礎レベルの単語集の前半が、中学英語の復習を兼ねているように、実は高校英文法の参考書も、少なくない割と多くの部分が中学の復習や、中学で習った分類など理解の再構成を兼ねています。 単語集ほどではありませんが、高校の文法参考書でも、あまり序盤にある中学文法の復習の部分には、高校でも深入りする必要がないことが、上述の考察・市場調査などから分かります。 また、このことに気づけば、つまり単語以外の知識で、一部の参考書にしか紹介されていない細かい文法の理論的な知識は、入試対策としては覚える必要が低いことが導かれます。単語集だと、細かい発展的な単語も入試に出ますが、しかし文法書については事情が違います。高校英文法には、深入りせずに、広く浅く学ぶのが安全でしょう。 文法参考書に書いてある知識がそもそも初学者の理解しやすさを重視したためのウソ知識なのですから、むしろ、けっして鵜吞みにして深入りしてはイケナイのです。 ほか、使用頻度の少ない表現など、参考書によって説明が微妙に食い違っています。たとえば接続詞 lest は、ある参考書では、「文語的であり、あまり使われない」と主張する一方、他社の参考書では「(for fear よりも)頻度は lest のほうが高い」(ジーニアス)と主張していたりします。 こういうふうに、細かい表現の英米での利用状況には諸説あるので、あまり参考書を鵜呑みにしすぎないようにしましょう。 === 大学生向けの参考書は例文不足 === 大学生むけの参考書は高校生向けのものと、用途がやや異なります。 高校生は、高校生向けをターゲット層にした一般の高校生向けの英文法参考書を中心に勉強しましょう。 === 細かなニュアンスの違いは覚えなくて良い === 受験勉強では、細かなニュアンスの暗記よりも、英単語をたくさん覚えなければなりません。また英語以外の国語や数学などの勉強も必要です。 参考書で勉強をする際、あまり細かなニュアンスの違いの暗記に入り込まないように注意してください。 実際、ある検定教科書でも、文法事項の類似表現などは、たとえば Would you ~? と Could you ~? などの依頼表現としてのニュアンスの違いは説明していません。せいぜい、 「Please と比べたらWould You および Could you は丁寧な言い回しである」という程度のニュアンスさえ把握できていれば大学受験レベルでは十分です。 参考書にはもしかしたらもっと細かいニュアンスの違いなどが書いてあるかもしれませんが、そういう詳細な情報はせいぜい参考程度にしましょう。 実は参考書でも、もう細かいニュアンスの違いは教えていない書籍も多くあります。 つまり、大学受験用の英語参考書には2種類あり、 :ひとつは受験用に入試に出る最低限のことだけを教える参考書と、 :もうひとつは細かいニュアンスの違いなども教える参考書と、 そういう2種類があります。 なお、上記とは別に英語研究者用の文法参考書がありますが、大学受験には全く対応していないので間違えて購入しないでください。 最低限のことを教える文法参考書の例として、ジーニアス英和辞典を出している大修館書店は高校生向けの文法参考書(『ジーニアス総合英語』)も出していますが、しかし文法参考書のほうでは辞書ほど細かいニュアンスの違いを説明していないのが現状です。 特に新共通試験(旧制度のセンター試験に相当)などの公共機関の試験や、英検・TOEICなどの資格試験では、細かいニュアンスを問う問題はまず出題が難しいでしょう。西暦2000年以降、国公立人気などでセンター試験や新共通試験の影響がどんどん強まっている影響も考えれば、文法学習であまり深入りニュアンスに深入りするメリットは残念ながら少ないのが現状だろうと思います。 それが英語教育として良いかどうか不明ですが、現在の大学入試の対策として要求される文法教育とはそういうものです。 基本構文などの細かなニュアンスの違いは、英会話などではそれなりに重要ですが、しかし入試や画一的な資格試験では英会話をそこまで細かく採点できないので、したがってニュアンスの違いに基づく使い分けもそれらの試験では出題されづらいことになります。新共通試験にリスニング試験はありますが、しかし実際に会話をさせる試験はありません。 裏を返せば、細かいニュアンスに深入りした文法参考書は、高校卒業後の英会話などの英語学習などのステップアップで使うのが効果的かもしれません。 高校の文法参考書の題名は、「文法」と書いてあるものを選んでもいいですが、2022年の書店で確認したところ『総合英語』と書かれている参考書も文法事項が中心的です。 === 各社ごとの注意 === 参考書えらびの際に、高校1年生がたぶん勘違いしそうなことを、述べておく。 * 大修館「ジーニアス」と数研出版「チャート式」の細かさ 大修館「ジーニアス」ブランドは、辞書では昔から細かい説明で有名であり進学校などではジーニアスの辞書が勧められるとの噂も昔からよくあります。ですが、しかし「ジーニアス」ブランドの文法参考書はあまり細かくありません。注意してください。 別に細かい文法参考書がいいだの悪いだのという話ではなく、ともかく、辞書のような細かさを「ジーニアス」文法参考書に期待してはいけません。用途が違います。 いっぽう、数研出版のチャート式の文法参考書のほうが、多くの構文が細かく網羅的・羅列的には書いてある傾向にあります。このため、1990年代の昔からよくチャート式の一番難しいバージョン(白・黄・青など色々バージョンがある)が進学校などでの参考書として配布されることもありました(かつては赤チャートが難しかったが、現代は赤が廃止され次点だった青チャートが一番難しいバージョンになっている)。 ただし、果たして2020年代の現代の入試にもチャート式が効果的かどうかは分かりません(会話重視・リスニング重視や単語重視など、入試の流行の変化もあるので)。 * 文英堂「インスパイア」と学研の参考書の入門者対応 なお、かつて文英堂『シグマベスト』というシリーズが、1990年代~2001年くらいは高校入門レベルの参考書として定番だったが、現代はそもそも英語のシグマベストが無いのと(英語は『インスパイア』に変更)、しかし同社・文英堂の『インスパイア』は、難しめです。高校生むけの一般的な参考書のなかでは、たぶんインスパイアが一番情報量が多いと思います(青チャートよりもインスパイアのほうが説明が細かいです)。 暗記科目なので、難しくても、とりあえず読めますが、しかし『インスパイア』のレベルはやや受験レベルを少し超えている記述もチラホラあります。 なお、例えば理科など他教科でも『シグマベスト』は実は2010年以降の現代はなかなか発展的であり難しくなってきていて、情報も細かく羅列的である。90年代の当時とは『シグマベスト』の中身の難しさが違うので、参考書選びのさいには、けっして90年代のままの世間の大人たちの評価を鵜吞みにしないように注意。 背景として、90年代の昔は、英数理の参考書選びのパターンとして、「シグマベストで入門レベルをカバーして、チャート式で高度な事項を勉強」という有名パターンがありました(なお、国語と社会科のチャート式は参考書としては無い)。あるいは、「その教科が苦手ならシグマベストを選ぶ。その教科が得意ならチャート式を選ぶ。」のようなパターンが90年代にありました。 しかし、現代では シグマ + チャート のパターンが、もはや上述の出版事情の変化で通用しなくなってるので注意。 2010年台の今だと例えば学研が高校入門レベルの初等的な参考書の立場だが、90年代の昔、学研がまだ高校参考書にあまり参入しておらず(昔の学研は小中学校むけの教材ばかりがメインだった)、当時は文英堂のシグマベストが今の学研の高校参考書に近い立場だったという背景事情がある。 === 文法参考書の選びかた === インターネットで参考書の形式やレベルなどを調べたり、または、教師や塾講師、チューター、同じ学生などからの評判なども参考にしながら、実際に書店で参考書の内容を閲覧するなどして選ぶといいだろう。 また、古本屋などで参考書を購入すると出費を抑えられる可能性がある。 中学英語は昔とカリキュラムが大幅に変わったので古本屋は論外だが、高校英語は昔から到達地点が同じままなので、文法学習はちょっとぐらい古い本でも特に問題ないかもしれないかもしれない。とりあえず、古本屋で英文法書を購入するなら、なるべく最近のものを購入したほうがいいだろう。 「大学英文法」とかそういうのは一般的には無い。文法は高校英語で、とりあえずゴールである。あとは単語や熟語を増やすのが、その後の道である。 英語教師などを目指す人のための細かい英文法理論書はあるが、高校生には必要ない。なお、書店によってはそういう教師向けの英文法理論書が高校英語コーナーに売っていたりするので、間違えて買わないように。わかった上で買うなら自己責任で。 === 高校の文法参考書はどういうものか === 「時事的な文法」とか無いので、もし改訂などあっても、あまり頻繁に買い換える必要は無い。 他のセクションでも言ってるかもしれないが、「大学英文法」と言うのはない。なので、文法において「大学教養レベルの先取り」とかは不要であるし、そもそも存在しないし、そういう教材もまず無い。 このことは、大学受験においては、つまり文法問題は、高校生向けのやや高レベルな参考書を習得できたら、それ以上は英語教師でも目指さないかぎりは、英文科向けのさらに高度な文法書には進む必要は無い、という事である。 英文科の学生などに向けた文法書は、あれは教師向けまたは研究者向けの参考書である。内容も、基本的には高校生向けの文法参考書に書いてある内容を、大学生または教師志望者などの視点やレベルに合わせて書き直した程度のものである。なのでともかく、受験生には不要である。 このことから、ゴールが明確に定まり、受験生向けのやや高度なレベルの参考書がゴールである。 そこから逆算すると、あまり多くの参考書を読み漁る必要はない。せいぜい、2冊読めば十分だろう。 高校1年レベルから分かりそうな易しめのレベルのものと、あとは少し難しめの感じのもう一冊で十分である。もしかしたらどちらか片方だけでも十分かもしれない。 また、説明を省略したが、前提として、高校の参考書は、学年別とかには売ってない(書店で実物を見れば分かると思うが)。 なので参考書での学習の際にも、いちいち学年ごとにペースを3等分とかして「私は1年生なので、参考書の前半の3分の1だけ読む」みたいなことはする必要は無いし、むしろ現代では3等分すべきでもない。 つまり、参考書は高校1年で購入したら、とりあえず、さっさと通読すべきである。現代の中学・高校のカリキュラムなら、文法参考書の通読は中学英文法の復習にもなるので、まずは通読しよう。 そして何回か通読したら、問題集などにチャレンジしたり、あるいは単語なども増やそう。 これがもし英語でなく数学の勉強法だったら、先の学年の内容を通読するよりも学校で習った単元の復習などを重視するのも手かもしれないが、しかし英語はあまりそういう単元ではない。 高校の授業や定期テストなどは、あれはあれで教育ノウハウが詰まっているので活用すればいいが、別にそれを活用したからといって文法参考書を通読できなくなるわけでもない。 それに塾などだと、参考書の後ろのほうにある無生物主語などを高校クラスでは1年で先に教える流儀もある。 参考書の最初のほうにある文型がどうのこうのと言った話は、どうせ塾の中学生クラスや中学参考書などでも既に教えている可能性があるので、塾の高校生クラスではそういうのはもう後回しにして、先に無生物主語や仮定法など参考書の後半の単元を教えるというパターンもある。家庭での自習などの際にはご参考に。 また、そもそも2年の終わりくらいから高校や塾などで全国模試などを次第に受け始めることを考えるなら、けっして高校3年間で学校の授業で文法を習うのを待つのではなく、自習によって高校2年の後半の段階までに一通り、高校生むけの単元である無生物主語やら仮定法過去完了やら分詞構文などを含めて、とりあえず文法参考書は全ページを通読は済ましておいて、加えて問題練習を軽くでいいのでしておくべきだろう。 そして、高校3年では模試なども活用して、問題練習で定着させていく、・・・という段取りである。 == 熟語 == 単語集の前半のほうにも、実務ではあまり使わないだろう熟語、つまり、より平易な表現に言い換えることの多い表現がよくあります(少なくともこのセクションのある編集者が、ネット上の海外英語では見たことない表現がいくつもありました)。 中学1~2年で習うレベルの単語の組み合わせで作れるマニアックな熟語がいくつかあるので、学習時に注意が必要です。単語集では編集の都合上、そういうマニアック熟語が前半のほうに書いてありますが、正直、後回しにすべき熟語です。 一方、 come true (実現する)のような、たとえば構成する単語と意味が近い場合なら、学習効果は高いです。たとえばtrue 「=真実」と「実現する」は比較的に意味が近いです。参考書でも、よくSVC文型の例としてcome true が出てくるので、こっちは重要事項です。 しかし残念ながら、単語集にある出題頻度の情報を見ると、come true は出題頻度が低いようです。 そのほか優先して覚えるべき熟語は、たとえば no longer ~「もはや~ない」のように構文的な熟語や、あるいはget over ~「克服する。回復する」(= overcome)のように中学レベルの単語には言い換えできなくてその熟語表現を使わざるを得ない可能性の高そうな熟語とか、そういうのです。 このような熟語の教育状況になってるのは、つまり残念なことですが、「英語教育での英作文などでは、実務的を想定した教育がされておらず、つまり形骸化している可能性がある」という事です。 「出題頻度順」の掲載をうたった単語集で前半のほうに、不便なマニアック熟語があるので、つまり入試では、実際には仕事などで英語を使うつもりのない人たちを想定した入試が行われているという証拠です。 英作文をする際、getで一語で説明できることを「come by ~」で表現する可能性は実用では低いでしょう。英会話でも、果たして米英人が、日本人相手に come by で説明するでしょうか。はなはだ疑問です。 なぜなら外国人は、もし英語が得意な日本人相手なら躊躇なくobtain のような非熟語を会話で使うだろうし、あるいは「英語が苦手な日本人かな」と思って気を使ってくれるなら get で表現してくれるでしょう。 come の基本的な意味は「来る」ですから、熟語come byの「入手」とは、かけ離れています。おそらく「手元に来る」的なニュアンスなのでしょうが、しかし「by」からそれを想像するのは、かなり前置詞「by」の基本の意味から離れています。そういう、基本単語の意味からの距離の大きい表現は、実務では学習コストが高いので、いろいろと不便なのです。 不便とはいえ、海外での利用の可能性がないとは言えないので日本の受験英語でも教えられていますが、なるべくなら後回しにしたいマニアック熟語表現です。 come true 「実現する」のようなSVC文型の例にもなるような教育的な熟語だと出題頻度が低いようですが、これはつまり、入試出題者が、高校生の学習効果を見る良問よりも「落とすための問題」「ヒッカケ問題」を21世紀の少子化の時代になっても未だに出題し続けているという証拠でしょうか。 == リスニング == まずは、前提となる単語力をつける必要がある。その上で、参考書で、音声CDつきの参考書などで聞き取り練習をするなどすればいいだろう。また、例えばYouTubeやTEDなどで自分の興味のある分野の英語を聞くなどしてもいいだろう。 テレビのNHK教育の英語番組は、学校の授業用に作られており、大学受験対策には作られていないこと、洋画は字幕や吹き替えに尺や字数の都合などで意訳が多いため学習には向いてないとする意見もある。 さて、新共通テストの場合なら、回答の選択肢が4択で与えられるわけですから、その選択肢の中からリスニング内容に一番ちかいのを選べればいいのです。すべての単語を1回で聞き取る必要はありません。それはプロの同時通訳者でも無理です。(なお、試験によっては2回ほど放送される場合もある。) すべての単語を聞き取るような問題は、おそらく共通テスト出題者は、作成しないだろうと思います。仮に作成したとしたら、かなりゆっくりと発音するリスニング問題でしょう。 テレビの生放送で、定型業務ではない政治討論の番組などで音声モードを英語モードに切り替えをして視聴してみると分かるのですが、実は生放送ではプロの同時通訳者ですら完全には流暢(りゅうちょう)には翻訳を出来ないのがプロでも実態です。テレビ生放送の英語は、プロですら、ややカタコト(片言)気味の翻訳になります。しかもテレビ番組などは、実は事前に原稿・台本があり、その原稿が事前にスタッフなどに渡されて読まれており、それをもとに撮影および音声収録をしています。それですら、少しカタコトの同時通訳なのです。 なお、テレビの原稿・台本のようにプロの同時通訳では、話題にある程度の予備知識が必要です。しかし新共通テストでは、そこまで個別のトピックのある話題には踏み込まないでしょう。(ただし、難関私大や国立二次試験はどうか知りません。もっとも受験生には他の勉強もあるので、普通に英文読解などの教科書・参考書によくある話題に触れておけば十分でしょう。) == 読解 == 読解練習をしたい場合は、まずは学校でのリーディングの教科書などをきちんと読むのは当然ですが、そのほかにも参考書があると便利かもしれません。 書店の参考書コーナーに、高校生用の英文読解の参考書などが置いてあるはずですから、それら高校生用の参考書で勉強してください。 大学入試の英文では、平均以上の難度の大学になると、単語の知識がないと、まったく内容が把握できないでしょう。なので、読解練習だけでなく単語の勉強もしてください。とりあえず単語集などで4500語レベルまでの範囲の単語は最低限、ひととおり学習してください。 * 試験での読解問題の時間配分について 出題英文を読むのに時間が掛かりますから、試験中の時間の配分にも気をつけてください。まずは単語力を増やすと読解スピードも上がるので、普段の勉強では単語力を増やしてください。 試験中の配分の対策として、実際の入試では、たとえば、長文読解問題よりも先に、短時間で解けそうな単語問題・文法問題などを先に解くとかして、時間配分の対策をしてください。あるいは、設問の問題文を先に読んでおいて、見当をつけてから長文を読むなどという方法もあります。ここらへんの対策は、じっさいに過去問や想定問題などを解いて練習してください。基本的に、入試国語での現代文などでの読解問題対策などの際の時間配分と似ていると思います。 ただし、時間配分のテクニックばかりを磨いてもダメであり、単語力などを増やさないと、読解スピードも上がりません。 * 学部と出題内容の関係 入試では、ときどき、志望先の学部の内容に関する記述が出る場合もあります。また、高校で習う教科に関する記述が出る場合もあります。もっとも、べつに必ずしも志望先学部と近い内容の英文が出題されるとは限らず、あまり関係のない内容の英文も出題される場合もあります。 どちらにせよ、合格後の人生も考えて、学生は、志望先学部に近い内容の高校教科の勉強もしておいたほうが安全でしょう。たとえば経済学部に進学志望なら高校政治経済などの参考書を読んでおくとか、あるいは理工学部に志望なら理科・数学の参考書を読んでおいたほうが安全でしょう。 == 発音・英会話など == 基本的には、標準的な参考書でカバーでき、あとは単語の記憶量を増やす練習とか、リスニングの練習とかの対策でよいです。あとは参考書などの英会話文例や発音問題を覚えておけば、入試での、だいたいの発音や英会話の試験もカバーできます。 * 入試の発音問題について 発音問題は、入試に英単語と発音記号を照らしあわせる問題は出ます。ですが、自分で発音することは、入試ではない。 * 入試での英会話について 大学入試では文章題などで、英会話の空欄を埋める問題などが出されるかもしれません。いっぽう、大学側が、直接受験生と会話をする試験は、一般入試では出ないでしょう。 ただし、いくら一般入試に会話が出にくいといっても、基本的な会話くらいは、せっかく高校で習うのですから、きちんと練習してください。そもそも建前上は、高校で習うことは、高校生は学習するべきということになっています。そして大学側だってバカじゃないんだから、なるべくきちんと勉強している受験生を優先的に合格させたいのです。 == 英作文 == 英作文の練習よりも、まず先に文法学習や単語の記憶量を増やす勉強を優先したほうが安全でしょう。単語の記憶量が増えて、文法や熟語なども覚えれば、英作文なども、自然と上達します。逆に言うと、英作文だけを勉強しようとしても、難しいです。なお、単に英単語の意味や綴りを覚えているだけでは英作はできない。動詞ならば他動詞(Vt)なのか自動詞(Vi)なのか両方あるのか,他動詞ならば第4文型(SVOO)や第5文型(SVOC)をとれるのか,名詞ならば可算名詞(C)なのか不可算名詞なのかなど(これ以外にもたくさんある),とにかく用法まで正確に知っておく必要がある。従って辞書を引く必要がある。 == 問題集を信じすぎるな == 問題練習をする際には、必ずしも偏差値順にステップアップする必要は無い、という事です。 また、日本人の高校生のレベルを越える難しすぎる問題は、そもそも解けるようになる必要もないでしょう。 選択問題では、高校レベルで習得できるレベルでの、初心者のよくやるミスをしない事のような、明らかに間違った言い回しを排除する事さえできれば、それでいいでしょう。 納得の行かない問題の対策はやりすぎないようにスキップして、他の勉強をすべきです。英語の勉強なら、もっと確実に偏差値アップの出来る勉強、たとえば単語力を増やすなどの勉強をしましょう。 == あきらめるべき事 == === 第二外国語は、あきらめるべき === ==== 入試に第二外国語は出ない ==== 高校によっては、第二外国語の授業を用意している高校もあります。 共通テストや二次試験では英語以外の外国語を使えるところもあるが、特別な理由がないなら英語を選択したほうがいいだろう。 また、中国語を勉強しても、漢文の入試問題を解くのには役立ちません。 帰国子女とか、あるいは進路志望が語学関連の分野で無い限り、あまり第二外国語には手を伸ばさないほうが良いでしょう。 == 一般入試対策ではTOEIC対策などには手を出さないほうが安全 == 英語能力を測る国際的な試験のTOEFLやTOEICなどは、高校生の学習用には作られていません。そもそも日本人に内容を合わせていません。 それにTOEICとTOEFLのどちらとも、試験の目的が、日本の高校英語の教育目的とは違います。 TOEICとTOEFLのどちらも目的は、英米への留学や海外生活のためなどの語学が目的です。日本の大学入試や、日本の大学での英語論文読解などの目的には、TOEIC・TOEFLなどは合わせていません。TOEFLとかTOEICとかで、ハイスコアを目指すのは、大学受験対策とは目的がズレています。 なお、そもそもTOEICをつくったのは日本の通産省(当時)であり、通産省がアメリカの非営利テスト開発機関、ETS(Educational Testing Service)に依頼をして、日本がつくったテストです。 よって、TOEICの出題内容は、アメリカ国内での実用とは若干、ズレていますので、てっきり実用英語だとは勘違いしないようにしましょう。また、てっきりTOEICは(OECDあたりの)「国際機関のつくった試験である」などと勘違いしないようにしましょう。 さらに、TOEICの参考書などにある「高校生レベルは◯◯点」などの数値も、じゃっかん、疑わしいので、あまり鵜呑みにしないようにしましょう。 ;* 平均点 :なお、高校生のTOEICの平均点は、年度にもよりますが、2018年の時点では、高校生の平均点はおおよそ350~400点くらいです。なおTOEICの満点は990点です。 ネット上では「TOEIC 600点が英検2級相当」という言説が出回っており、英検2級が高校英語レベルを出題範囲として想定していることから、あたかも「高校を卒業したら TOEIC 600 点で当然」みたいな言説が出回っていますが、しかし2018年の統計などをもとに考えれば、この言説はデタラメです。 また、「TOEIC 600点が英検2級相当」という言説の根拠も、よくよく調べてみると、2001年くらいに英検2級保持者にTOEICの点数をアンケートしたところ TOEIC 400点~800点あたりに得点がバラついたという統計を、とりあえず平均値をとって600点としただけにすぎないのが実態です。 高校の数学で統計値の「分散」という概念を習います。分散を知らないと、統計詐欺にダマされてしまいます。 ;* TOEICは事実上は文系向けの試験である :世の中には、文系の大人が多く、その影響で、学生でも理系科目をサボってまで英語の勉強をして、英語の成績を上げる人がいます。TOEICの平均点も、そういう文系の人間を基準に算出されてしまいます。 :一般入試や国公立受験、理系の学部などを目指す人は、けっして、そういう文系の大人や、文系しかできない学生を多く含むTOEIC平均点を、参考にしてはいけません。 :* 4択問題と難易度 :TOEICの各問題は基本的に4択問題ですので、デタラメに選択しても、990点満点(約1000点)中のうちの4分の1である約250点を取れます。 : さらに、欧米で英米への留学希望者むけのテストなどとして知られている英語検定試験はTOEFLです。 TOEICは、日本と韓国で流行っている英語検定です。 また、英検は日本人用の試験ですが、しかし高校生用には試験が作られていません。中学生・高校生なども意識して英検は作られているでしょうが、しかし、中高生だけを意識してはいません。 英検を入試対策で使うなら、志望校合格などが保証されないかぎりは、なるべく英検'''準'''1級までに止めるのが無難です。 * 推薦入試などの評価事項になることも ただし、推薦入試ではTOEICやTOEFL、英検などの成績が考慮される場合もあります。 * 難関大学への対策用としての場合 大学によっては、入試で高校レベルを超えた、かなり難しい英語を出す場合もあります。そういう大学に対応する場合、市販の受験参考書では太刀打ちできないかもしれません。このような場合、しかたなくTOEFL対策や英検1級対策などの参考書が必要な場合もあるかもしれません。 * 就職活動でのTOEIC評価について ただし、大学生の就職活動では、企業にTOEICなどの点数を聞かれることもあります。就職活動時のエントリーシートに、最初からTOEICなど成績の記入欄がある場合もあります。また、外国大学への留学の際に、TOEICなどで一定以上の成績を修めることが必須の要件とされる場合も多いです。たとえ英語圏以外の国の大学への留学でも、TOEICやTOEFLなどの成績が必須要件として必要な場合があります。 なので高校生でも、TOEIC受験の機会があれば、受験をするのも良いでしょう。 ただし、TOEICの成績が良いからと言って、けっして、それだけで企業が「即・採用」をするなんて事はありません。 高校生の段階では、TOEICなどの語学検定については、もし受験できるなら、視野を広げるような目的で検定を受けるのが良いでしょう。 == 英語の検定教科書にある時事や古典文学の勉強は不要だし、危険 == 中学高校の英語の検定教科書には、他の教科では説明しづらい時事や古典文学、最近の日本のアニメやマンガの、海外での人気について、英文で紹介されたりするかもしれません。 そもそも、本来の目的は英語を学ぶということなので、これらの題材で得た知識がそのまま大学受験に役に立つということはありません。 [[カテゴリ:英語]] 2llhih7aeebl17bup4ktjxewy817nw4 246690 246689 2024-04-14T07:54:07Z すじにくシチュー 12058 /* 英単語集のパターン */ {{コラム|5000語レベル以上の単語集は真に受けないように| wikitext text/x-wiki == 「高等学校外国語」は実質的に英語 == 文科省の指導要領では、教科名は「外国語」です。 しかし、科目名は「英語コミュニケーション」とか「論理・表現」とか、英語の科目しかありません。「論理・表現」科目の内容も、英語の学習です。 なお、一部の高校で第二外国語を開講していますが、その高校でも英語が必履修です。そもそも高校卒業の要件として、英語の単位を一定以上取得しないと、高校卒業の資格を取得できないはずです。 また、高卒認定試験でも、外国語科目では英語が必修です。 第二外国語を学ぶにせよ英語に専念するにせよ、どちらにせよ、高校生は英語を勉強する必要があります。 ;第二外国語の授業の現状について 大学受験では、いちおうは、文学部の仏文科とか独文科や、語学系の学部のフランス語学科とかの入試で、大学によってはフランス語やドイツ語などの第二外国語も入試も出る大学もあります(高校入試とは違い、大学入試では一部の大学では第二外国語でも受験できます)。しかし第二外国語の学習は検定教科書以外で自習などをする事になります。 フランス語とかドイツ語とかの検定教科書は、存在を聞いたことがありません(つまり、フランス語などの検定教科書は無いはず)。少なくともフランス語の検定教科書は存在しません<ref>pdf [https://konan-wu.repo.nii.ac.jp/?action=repository_uri&item_id=1159&file_id=22&file_no=1 前田美樹 著『高校でのフランス語教育: 現状報告 - 授業の活性化と発展に向けて,2011年3月, P35 ] 2023年10月5日に確認.</ref><ref>[https://www.jactfl.or.jp/wdps/wp-content/uploads/2020/03/JACTFL2_87-100.pdf 長谷川由起子 著『高等学校第二外国語必修化提言実現に伴う課題』,2014 , P92]</ref>。もし高校生向けのフランス語などの教材を教科書会社が出版・販売していたとしても、それは検定教科書ではありません。 なお、第二外国語の授業のある高校でのその授業の教材は、大学生向けの教材を用いたり、あるいはその高校独自の教材を用いたりしています。 ;第二外国語の大学受験について 大学入試共通試験(旧センター試験)の科目に、フランス語とドイツ語と中国語と韓国語もあります。語学系の学部・学科など、ごく一部の学科でなら、共通試験のフランス語なども使える場合もあ、そのような大学の学科なら一般入試でも使える可能性もあります。ですが、その他の多くの大学では、第二外国語ではなく英語を受験科目の外国語としては要求しています。 なお、一部の高校ではスペイン語とロシア語とアラビア語の科目もあり高校卒業のための単位として文科省により認められていますが、しかし大学入試共通試験(センター試験)の科目にはスペイン語などは存在していません。このように、高校の単位として日本国に認められていても大学入試共通試験にない科目もあります。 == IPA(国際音声記号)を学ぼう == IPA(International Phonetic Alphabet, 国際音声記号)とは世界中の言語の発音を表記できるように開発された記号である。これが、英語の単語を発音する際、重要であることは明白であろう。日本には、「英語には日本語にはない音が存在する」「英語は発音が大事」などと声高に叫ぶが、どうやってその音を調音するかという肝要なことは教えていない高校も存在するようだ。しかし、調音方法を知らずに第一言語に存在しない音を発音しろというのは不可能と言っていい。IPAを学ぶ際には必然的に音声の調音方法を体系的に学ぶことになる。したがって、フィーリングではなく理論に基づいた音声の発音が可能となる。 * [http://www.coelang.tufs.ac.jp/ipa/index.php IPAモジュール] * [[w:子音|子音]] * [[w:調音部位|調音部位]] * [[w:調音方法|調音方法]] * [[w:母音|母音]] * [[w:国際音声記号|国際音声記号]] * [[wikipedia:IPA_vowel_chart_with_audio|母音のIPAとその発音]] * [[wikipedia:IPA_pulmonic_consonant_chart_with_audio|子音のIPAとその発音]] * [[w:英語学#%E9%9F%B3%E5%A3%B0%E3%83%BB%E9%9F%B3%E9%9F%BB%E5%AD%A6|英語の音素]] == 参考書と辞書と単語集が基本 == 高校英語の検定教科書は授業で教師が解説するのを前提にしているため独学用には作られていなません。 なので、予習復習や独学や受験準備などは教科書では無理です。なので、受験準備などのために教科書とは別に高校レベルの参考書や単語集が必要ですので、早めに購入しておきましょう。 たぶん、普通の高校なら、単語集なども購入させられると思います。もし学校で購入を指定されていなくても、まずは高校基礎と高校中級レベルの単語集を購入しましょう。 実際の検定教科書を見てみると、高校1年向けの検定教科書で、もう高校3年向けの4500語レベルの単語集にある単語が紹介されていることもあります。 とはいえ、さすがに高校1年で4500語レベルまで習得するのは困難です。 そこで普段の家庭などでの勉強では3000語レベルまでを勉強しておいて、検定教科書を読んでて単語集で見当たらない語があれば、そこだけ辞書に頼るのがラクでしょう。ただし既に単語帳で覚えた単語も用法が不明瞭ならば辞書を引くと良いであろう。単語帳は意味は載っているものの、用法は詳しく載っていないことが多いからである。また、少しは辞書の使い方も練習すべきです。 ともかく、高校では単語集がないと、まともに英語を勉強できないだろうと思います 検定教科書は入試対策本ではないので、大学受験を考えている人は、英語の勉強では検定教科書ばかりに深入りしすぎてはいけません。 ともかく、大学受験対策は、あくまで市販の参考書と辞書と単語集などで行います。 == 大学入試に出づらい分野など == === 教科書の学習目標を真に受けないように === 高校英語の学習指導要領などが掲げている目標の中には、高校生には荷が重い目標もあります。 検定教科書の英語表現IIの実物を見比べると、どうも英語でのプレゼンテーションなどが指導要領などで目標に掲げられているようですが、しかし正直、高校生には英語プレゼンテーションは荷が重いでしょう。英語以外の教科の学習を考えると、高校段階では外国語でのプレゼンテーションの習得は非現実的です。 高校英語のプレゼンテーション単元も、中学英語の留学生との会話の単元などと同じで、実際の多くの高校の教育現場ではそれを実行できる場面はまずないかと思います。 2022年の時点では、文科省の英語教育の目標が、かなり高負担な内容ですので、大学入試の傾向とは検定教科書の傾向は、差が大きいかと思います。 昔から教科書と受験英語との間には差がありましたが、とくに近年、上述のように教育目標の負担増の理由で、入試との差異が大きくなっているだろうと思います。なので大学受験を考える人は、教科書の勉強だけでなく、うまく学習スケジュールを自己管理する必要があるでしょう。 === 自己意見の英作文は入試に出ないところもある === 足きりのある大学(たとえば国立大や医学部など)でないかぎり、採点の手間があるので一般入試では数十語もある英作文は出されない可能性が高い、実態があります。 さて、昨今の教科書では、日本のことを英語で説明する課題がよくあります。検定教科書にあるので、いちおうは新共通試験などの出題範囲ではあるわけですが、やはりこれも大学入試の出題傾向の兼ね合いを考える必要があります。 難関大学の入試で要求される単語は、抽象性の高い単語、または学術的な単語などです。 === スピーキング === 英語スピーキングは、大学入試では採点の手間があるので、一般入試ではスピーチの実施はされない。もし入試でスピーチングをやるとしたら、せいぜい、受験者数が比較的に少人数に限られる推薦入試でしょう。 また、英検3級以上ではスピーングの試験がある。英検などの英語系資格を取っておくと入試でいくらか優遇される場合があるので、そういったものを使いたい人にはスピーキングの勉強をする必要がある。 == 教科書ガイドを購入するほうがいい場合 == 教科書ガイドを買わなくても高校英語は勉強できるのですが、色々な理由により、教科書ガイドがあると効率的です。 英語教師のなかには低能な教員もいて、宿題などで、数学など他教科の予習復習の時間を無視して、毎週のように「辞書で教科書の英文の意味を調べてこい」などと、英語科目の事しか考えずに宿題を出す人がいます。 特に英語は、文系大学の志望でも理系大学の志望でも活用するため、教師がうぬぼれていて傲慢な場合があります。 このような英語教師の場合、もし教科書ガイドがあれば、辞書で調べる時間を、大幅に減らせることができます。教科書ガイドによって、空いた時間を活用することができ、単語の練習など、より本質的な勉強ができるようになります。 ただし、ガイドには、あまり細かい答えまで書いてありません。中学までの教科書ガイドとは違います。 == 英語勉強法マニアにならないように == ここに描かれた勉強法を覚えるよりも、まずは、とにかく、3000語レベルまでは英単語の習得のほうが重要です。勉強法マニアになっても、語学では価値がありません。勉強法を調べるよりも、実際に勉強してください。 とくに英語教育についての評論では、多くの評論家が英語教育を評論したがるし、また市販の英語教材などでも英語教育のノウハウをうたっている商品も多いですし、中には英語が苦手なのにウサンくさい勉強法(自称)を掲げる人も多くいるので、あまり勉強法そのものに深入りしないようにしてください。 勉強法に迷ったときにだけ、市販の参考書などに書かれた信頼できる勉強法などを参考にしてください。 == 単語 == まず、単語数3000語あたりの中級レベルを謡っている英単語集を1冊買いましょう。 初級レベル 1700~1800あたりのものは、これは一応高校レベルの単語も紹介していますが、ほとんどの単語が中学レベルなので、当面は読む必要がありません。 また、初級レベルの単語集のうち、中学で習わない可能性の高い単語は、中級レベルの単語集にも書いてあるので、わざわざ初級レベルを買う必要がありません。 さて、単語集の使い方は、赤シートを使って英単語の和訳を隠して、英単語のイメージを思い浮かべてから、その英単語の和訳を見て自分が思い浮かべたイメージと合致するか確認してみたりして、もし合致していたら次の単語へ、一方もし合致していなかったらチェックをして次の単語のテストを行う。これを1~2回もすれば英単語を覚えています。 中学単語については、意味のほうで中学では習わなかった意味がある可能性があるかもしれないので、そちらに注目してください。参考書をつくっている会社は、そうなるように工夫して参考書を編集しています。 === 学習の優先順位 === もしかしたら、英語の単語を覚える作業は文法等の勉強をすることよりも大切なことかもしれません。 市販の学習ノウハウ本でも、高校英語および大学受験英語では、英単語力が決め手になると主張されています<ref>船登惟希 『改訂版 高校一冊目の参考書』、KADOKAWA、2019年3月18日120ページ</ref>。 英文読解で、もし単語の意味が分からないと、せっかく文法の知識があっても、理解できない文も大学入試では多くあります。また大学入試では、暗記を要求される単語数が、ずいぶんと多くなります。 もっと言えば、単語という基礎があってこそ覚えた文の組み立て方が生きてくるのです 大学受験の標準(おおむね4500語レベル)~やや発展レベルまでの単語であれば、単語はいくら覚えても損はありません。学校で教えてもらう英単語だけで満足しないでください。近年では様々な出版社から英単語帳が出ています。 === 英単語集の選び方 === ==== 基本の要求事項 ==== ===== セットになる別単語も必要 ===== 高校レベルでは、新しい単語の意味を覚えるときは、単語の日本語の訳の字面だけを覚えても不十分です。 いくつかの予備校の単語集には英単語の勉強法も書かれており、どれを見ても大抵、「新しい単語の学習では、一緒につかう単語とセットで覚えろ」といった内容が書かれています。 動詞も同様、セットになる名詞と一緒に練習するべきです。もっとも、普通の市販の単語集なら、そういうセットになる単語も書かれているので、市販の単語集で勉強すれば問題ありません。 進出単語がセットでなくても覚えられるのは、せいぜい中学の前半までです。高校ではもう、単語を1語ずつ単独でバラバラに勉強するのは、やめましょう。 しかし、ネット上の英語勉強サイトには、サイト作者・企業の手抜きからか、日本語の訳だけを羅列したような低品質なサイトもあります。まったくネットは参考になりません。きちんと市販の単語集を買いましょう。 ===== 類義語や対義語、例文など必須 ===== まず、単語の学習では、けっしてヤミクモに多くの単語を覚えるのではなく、類義語や対義語との違いなども把握しなければなりません。そのため、例文なども交えつつ把握しながら勉強する必要があります。 なので、例文などの少ない単語集は、少なくとも高校基礎レベルとしてはアウトです。 ==== 結局どうすればいいか ==== 高校生向けの参考書は、セット語彙や類義語・対義語の紹介の必要性など、そういう事をきちんと理解しているので、とりあえず高校生むけの単語集を買えばとくに問題はないのです。 しかし、高校生向けではない市販の英検対策やTOEFL対策本などの資格本の中には、単語を多く掲載したいあまりに、例文や類義語などを省略ぎみの単語集も(英検対策本などでは)多くあります。 なので高校生は、英検対策ではなく、まずは高校生向けの単語集を買いましょう。1社の単語集しか使わないと例文がどうしても不足するので、少なくとも4500語レベル付近では1社だけでなく2社以上が必要です。 ==== 英検などは後回し ==== 現代では、高校の教科書レベル自体、上がっています。昭和の後半や平成の初期は、今で言う3000語レベルが、高校卒業レベルでした。 しかし、令和の今では、4500語レベルが、高校卒業レベルです。 なので本来なら、時代が大きく違えば、英検の級の数値は比較の参考になりません。つまり、年月とともに資格試験で保証された知識は、少しずつ錆びていくのです。 英検などを受けたいなら、高校生向けの単語集を買って習得したあとなら、必要に応じて英検対策本などを買うのは構いませんが、しかしいきなり最初から英検対策本などを買うのは失敗の道です。 なお、もし英検を参考にするなら、準1級までを買えば十分でしょう。 なぜなら、難関大の過去問から構成される桐原5500と英検1級の単語集とを比べてみましたが、傾向がだいぶ違っています。 ==== 英単語集のパターン ==== 英単語集には、主に2パターンあって、 :・ パターン1: 単語を分野別にまとめているパターン(たとえば「旅行」の意味の単語なら、trip と tour と travel をひとつのページにまとめていたりする)の英単語集 と、 :・ パターン2: もうひとつのパターンとして、入試出題の頻度順に統計的に並べた英単語集 があります。 初めて高校英語を勉強する場合は、とりあえず、'''分野別に単語をまとめたパターンの参考書のほうが、使いやすい'''と思います。 なぜなら、分野別の単語集のほうが、類義語や対義語なども、まとめて勉強できるからです。 いっぽう、入試出題の頻度順に統計的に並べた単語集は、高校後半~高校3年からの仕上げなどで用いるのが効果的でしょう。 さて、分野別に単語をまとめたパターンの英単語集で勉強する場合は、レベルが「中学3年〜高校初期」「高校必修」「共通テスト」「二次試験」と何段階に分かれていたりしますが、とりあえず、高校1年の時点で、「高校必修」レベル(3000語レベル)と「共通テスト」レベル(4500語レベル付近)の2冊を買ってしまってください。 高校必修レベルの単語集を買えば、その単語集で中学レベルの復習もしますので、わざわざ中学レベルの復習をふくむ単語集を買う必要はないのです。 自分で単語集を予習する際は、次のペースで予習します。「全部覚える」ではなく「全部勉強する」がポイントです。 :・ 高校1年: 「高校必修」レベル(3000語レベル)〜「センター試験」レベル(4500語レベル付近)の単語を高校1年の終わりまでに全部勉強する。 :・ 高校2年: 「センター試験」レベル(4500語レベル)の単語を高校2年の終わりまでに全部勉強する。 :・ 高校3年: 「二次試験」レベル(4500語レベル+アルファ)の単語を高校3年の2学期の終わりくらいまでに全部勉強する。 これとは別に単語集がもう少し必要ですが(入試用単語集を1~2冊)、まずは上記を出来るようになってください。 注意点として、学校から配布されるような東京書籍や桐原の基本的な単語集は(ただし桐原の灰色のヤツは難関大用なのでのぞく)、高校2年のうちに終わらせる必要があります。 つまり、高校1年のあいだに、予習をして、「高校必修」(3000語レベル)およびレベルの単語集を、ひととおり書き写して、勉強してしまう必要があります。(覚えられるかどうかは別として。) 4500レベルまでいければ理想ですが、それが無理でも必ず高校1年のあいだに3000レベルを終わらせてください。「終わらせる」とは「7割ほど覚える」という意味です(英語以外の教科も考えて、この数字)。これが終わらせられないと、大学受験の現役合格は難しいでしょう。一見するとハイペースですが、実は後述のように中学で習う単語が3000レベルには多いので、意外とラクです。 また、「全部覚える」ではなく「全部勉強する」とありますが、その単語の100%の単語を覚えられなくても70%を覚えたら、次学年の単語集を1回だけ全単語を学び始めてください(たとえ新単語を1回の書き取りで1周しただけでは30%しか覚えられなくても、もし新単語に1000語も触れたら合計300語を覚えられるから、そっちのほうが最初は効率的だからです)。 この、最初に1冊の書き取りをさらっとする勉強法は、他教科たとえば数学では通じない勉強法かもしれません。数学では公式だけでなく応用力なども問われるからです。しかし英単語はそういうのではなく、ほぼ単なる暗記なので(米英なら幼児・児童でも分かる程度の理解力で十分)、なので単語集をさっさと1冊、一周したほうが効率的に覚えられるのです。 さて、いまの単語集を7割ほど習得したら、次学年用の新単語集を購入して1回書き取りだけで一周しつつ、並行(へいこう)して、現学年用の単語集の完成度を上げていき100%に近づけていきます。 特に、高校2年用の単語集は、入試でも基本的な運用力を問う問題として狙われやすいので、それも押さえておきましょう。裏を返すと高校1年用の単語集は、これは例外的に高校受験で狙われやすいもの以外は深入りしなくても良いでしょう。 高校必修レベル(高校1年レベル)には、中学校できちんと5教科を勉強していれば、読みがある程度は身についているハズの単語が、多いのです。 なので、さっさと高校必修レベルをひととおり練習して終わらせてしまい、次ステップの「センター試験」レベルに時間を掛けたほうが得です。 なお、高校によっては、高校3年になっても「センター試験」レベルの単語集までしか、高校3年の英語の授業では扱わない場合があります。 なので、'''授業とは別に、自分で単語集を予習する必要があります'''。 では、なぜ、上記のスケジュール(「高校必修」レベルの単語を高校1年の終わりまでに全部勉強するスケジュール)のようにするのが合理的かいうと、最終的に高校卒業までに(つまり高校3年の終わりまでに)、「二次試験」レベルの単語集(4,500語+アルファ)を終わらせる必要があるので、そこから逆算して、高校2年の終わりまでに「センター試験」レベルの単語集を終わらせる必要があります。 なお、新共通テスト・旧センター単語とは別の大学受験単語の傾向では、早稲田大など一部の難関大と、国公立との傾向が違います。(wiki追記: 例外として東京外語大(国立)や英文科などを除けば、)平均的な地方国立大よりも早稲田大のほうが英単語が難しいです<ref>[https://www.youtube.com/watch?v=E-U8m3en_E0 『英単語暗記必勝法!今こそ苦手を克服せよ!』 2022/12/13 ]</ref>。理系の人は、そういう早稲田みたいな難関大の英単語を相手にしてはいけないというか、仮に購入したとしても、けっしてその難関大用の単語集の全単語を覚えようとしてはいけません。 {{コラム|5000語レベル以上の単語集は真に受けないように| 難関私大の6000語レベル以上ありそうな英語は、そもそも正しい英語なのか、疑問もあります。20世紀の話ですが、1990年代に売れた書籍『超勉強法』によると、英文科のある大学教授が欧米に留学したら、自身の英語が欧米人には通じなかった、というエピソードが紹介されています。(『超勉強法』著者の野口悠紀雄(のぐち ゆきお)のことではない。野口が聞いた、ほかの大学教授の話。)そもそも1990年代以前の昭和の英文科の大学教授がこのような惨状なので、あまり古い1990年代~2001年ごろを初版とする単語集にある難しすぎる単語は、たとえ有名大学で出題された過去がある単語および例文でも、あまり真に受けてはいけません。 英語の教科の場合、入試問題は、たとえ大学教授が作成しているからって、それだけでは問題の質を信用してはいけません。おそらく、20世紀の大学受験英語では、実用例を無視した、あまりに難しい言い回しの英文が出題されていた時代も過去にはあったのでしょう(あくまで難関私大の話です。平均的な偏差値の私大の話ではありません)。 難単語は、複数の大学で出題されるなどして、ようやく、まあ勉強する価値のありそうな単語です。とはいえ、いくつも各大学の過去問集を見ることは無理なので、そこで難関大むけの近年の5000語レベル以上ありそうな単語集を複数社、読むことになるでしょうか。 このように、4500語レベル完了までと、それ以降の5000語レベル以上とでは、単語の勉強法を微妙に変える必要があります。 }} さて、高校2年の終わりまでに、4500レベルつまり「センター試験」レベルの単語集を終わらせるためには、逆算すれば、高校1年の終わりまでに3000レベルの「高校必修」レベルの単語集を、勉強してしまう必要があることが分かります。 そうするためには、普段からの予習も必要です。 また、もし「今読んでいる章を完全に覚えてから、次の章に進む」などというふうに勉強していると、特定の分野の単語ばかりを覚えることになってしまい、入試に対応できません。特に、学校で、このような分野別にまとめられた英単語を用いている場合に、気をつけましょう。 また、現代の高校英語の単語の紹介順序は、もはや学年別になっていません。高校1年の検定教科書でも、すでに3000語レベルの単語や4500語レベルの単語も平気で紹介したりしています。 現代の検定教科書がそうだということは、現代の入試もそうだという可能性があるということです。なので、あまり単語集の最初のほうばかりに詳しくなっても、現代ではあまりメリットがありません。 また、予習をしないと、たとえば学習ペースの配分ミスを起かしやすく、たとえば高校3年の終わりごろになって、やっと桐原4500語・東京書籍4500語レベルにしか到達できずに、そのため高校3年終わりの時点では「二次試験」レベルに対応したプラスアルファの単語集(旺文社や、予備校系の単語集)に到達できずに、志望校に不合格になってしまうような、ペース配分の失敗を起こしやすい原因にも、なります。 なので、とにかく、予習をして、単語集の先のほうへと進んでいくのが、合理的な勉強法なのです。 ==== 予備校系パターン ==== 単語集にはさらに、「論理性重視で解説が多めの単語集」と「単語が多めの単語集」があります。 で、桐原・東京書籍・旺文社は、実は単語が多めの単語集です。 高校単語の範囲は広いので、少なくとも4500語レベルについては、まずこの3冊のうちの2冊が、受験までに、ほぼ必須で必要です。 しかしこれだけだと、論理的な知識が不足します。桐原などの単語数が多めの単語集などでは、スペース不足などの都合で解説できない知識が、いくつもあるのです。 そういうのを、予備校などの補足的な単語集で補う必要があるのです。だからもう高校2年の半ばあたりから、予備校系の単語集も読み始めてしまうのも、良いかもしれません。 ですが、あくまで予備校単語集「も」です。基本はまず、桐原・東京書籍・旺文社のような、高校英語を一通りカバーしている単語集をベースにするべきでしょう。 ==== 2社目の単語集が必要 ==== 単語集は、1社だけでは対応できません。たとえば東京書籍を使っている場合、東京書籍の単語集には例文が書いてある用法でも、桐原の単語集には例文が書いてない用法もあります(例文なしで意味紹介のみ、という場合がよくある)。同様、桐原の単語集にはあるのに東京書籍にない用法もあります。 この問題に対応するため、高校2年になってからは、たとえば東京書籍を使っているなら、もう一つ別の会社の単語集'''も'''使いましょう。何を使うかは、個人の判断に任せます。しかし、何を使おうが、1社だけでは太刀打ちできません。(昭和の昔なら、ここまで考えなくても大丈夫でした。まだ高校2年生は、昭和なら単語集は1社だけでオッケーだった。しかし令和だと事情が違います。) 実際、塾・予備校などでも、高校で良く買わされる単語集(東京書籍や桐原)とは別の単語集・熟語集をもう1社ぶん買い与えるのが基本であり、受験生は結局、2社の単語集・熟語集を使うことになります。別に東京書籍・桐原のもう一方でなくとも、予備校系の単語集でも良いし、あるいは旺文社ターゲットなどでも構いません。とにかくもう1社ぶん、必要です。 別に2社の単語集を読み比べる必要はありません。新聞のメディアリテラシーの練習とかじゃないので。、 また、一応、単語集のレベルに応じて、上級レベルの単語帳で、過去に下級レベル単語集で習った単語の新しい別用法を教えることもよくあります。なので、東京書籍でも桐原でも、まずは1社ぶんを全部やるのも必要です。どちらかをメインにすると決めたほうが良いでしょう。 高校1年レベルの単語集(3000語以下)はもう1社目では仮に省くとしても(なお、省かずに1周しても構いません)、それでも高校2年次以降の単語集で、もう1社ぶんが必要になってしまいます。このため、どうあがいても単語集だけで最低もう2冊は(2年生の4500語レベル単語集と、やや難関大用の単語集で、合計2冊)、これが平均的な私大に一般受験するのでも必要です。 昭和の昔なら1冊だけで十分だったかもしれませんが、しかし令和は入試の単語が増えたので、そういうわけにも行かなくなりました。 また、上記と関連して、新共通テストも3000語レベルとされていますが、実際には4500語レベルの単語も新共通テストに出てくると思われます。なぜなら上述のように、3000語レベルと4500語レベルの単語に明瞭な境界線は無いからです(さすがに5500語レベルとか7000語レベルとかを要求する事は新共通テストでは出題が無いというだけです)。少なくとも20001年ごろの旧センター試験の時代、学校で渡された3000語レベルの単語集をこなしていてもセンター対応できない受験失敗例もよく聞かれました。(当時、センター試験の出題傾向について上述のような問題が知られていなかったので、進学校でも今でいう3000語レベルしか対応しない高校もよくあった。) :※ なお、説明の都合上、2001年ごろについても「3000語」レベルとか言いましたが、実際には単語数の算出基準が変わっており、現在の単語数の数え方には一致しません。 === 単語の練習法 === かといって、いきなり高校1年で入試対策レベルの単語集を使っても効率が悪いので、まずは基礎レベルの単語から始めるのが良いでしょう。 読解練習や文法練習よりも先に、単語力を増やす練習が大事です。熟語集の暗記よりも先に単語集あるいは単語・熟語集の暗記を優先してください。 英単語を勉強する際、まず最初は、なるべく早く、その単語集の全体の単語と例文を書き終えます。もちろん、それだけでは全部の単語は覚えられませんが、そのほうが次の理屈で効率が良いです<ref>[https://www.youtube.com/watch?v=E-U8m3en_E0 『英単語暗記必勝法!今こそ苦手を克服せよ!』 2022/12/13 ]</ref>。 たとえば1000語ある単語帳を2週間ですべて単語と例文をそれぞれ1回だけ書き写したとしましょう(実際は他教科もあるので無理かもしれないが置いとく)。 たとえ3割しか覚えられなくても、なんと計算上、300語もの単語(=1000×0.3)をたった2週間で覚えられます。たった1周するだけで良いのです。というか、むしろ、けっして3回や5回も書き写すのではなく、最初はたった1回のほうが良いのです。 もしこれを同じ期間に100個だけ限定して熱心に難度も読み書きして覚える方法をすると、たとえ仮に100%覚えたと仮定しても、計算上は100語までしか覚えられません。まして実際には100%は無理でしょうから、よくて80%を覚えて、80語ていどでしょうか。 よって、先に単語集の単語を、たとえ覚えられなくても良いので、全部の単語を書き写すほうが効率が良いのです。 じっくりと何度も読み書きをして確実に覚えるのは、そのあとからです。 入試の現状で、どの教科も覚えることが増えて時間が無いのに、英語では多くの単語を覚えないといけないので、こういう工夫が必要です<ref>[https://www.youtube.com/watch?v=E-U8m3en_E0 『英単語暗記必勝法!今こそ苦手を克服せよ!』 2022/12/13 ]</ref>。 また、参考サイトには書いてないですが、とにかく早めに単語を学ばないと、いつまで経っても英文読解の勉強を始められません。よって、高校入学後の割と早い時期や、および高校2年の初めごろに、まずは、それぞれの学年にあった単語集の単語を一通り通読する必要があります。 高校や塾などの小テストで週に50語~100語とか覚えるのは、それはそれでヤレバいいのですが、それとは別に、単語帳を1周、ぜんぶ早めに書き写すのです。 大学入試では、高校入試と違って、国公立の大学ですら、理系の高校生などを無視した、教科書レベルをやや超えた難単語を平気で入試に出してきます。このため、とにかく上記のような工夫が必要です。 標準レベルの3000語レベルの単語が高校2年あたりでひととおり終わったあたりから、桐原・東京書籍の4,500語に加えて予備校など受験対応の単語集も買って練習します。まだ、平均レベルの単語集を覚え切れて無くても構わないので、受験レベル(4500~5500)の単語集を勉強します。 学生・受験生の勉強科目は、数学など、英語科目以外にもあるので、大変でしょう。ですが、うまくスケジュールを工夫して時間を作ってください。 さらに単語を定着させるためには、英文読解やリスニングなどの単語以外の他の練習もします。 === 単語集のレベル別の利用法 === ==== 初級レベル(1700~1800語)はまず不要 ==== 中学できちんと勉強してきた人なら、初級レベル(1800語)レベルの 単語集には、高校生には不要です。これは、どちらかというと中学3年~高校受験用のものです。 普通に受験勉強をしてきて偏差値48以上ぐらいの人なら、1800語レベルは買う必要はありません、。 本屋で表紙を見ると「高校基礎レベル」とか書いてあるかもしれませんが、ウソではないですが誤解を招く表現です。表紙の宣伝文句は信用しないでおくのが安全です。 この1700~1800語レベルは、おおむね英検3級レベルか、それに毛の生えた程度です。英検3級と英検準2級との間には、かなり難度の開きがあるので、このレベルの教材は英検教材コーナーにはないので、これはこれで1700~1800語レベルは出版・販売されてると便利です。 この1700~1800レベルの後半を見ると、中学で習わない単語も書いてありますが、しかしそれを買わなくても3000語レベルにも同様の単語が書いてあります。 たとえばある1700レベルの単語集で injure (けがをする)という単語を見つけましたが、同じ出版社の 3000語レベルでも同じ単語がありました。 わざわざ初級レベルの単語集で練習しなくても、中級(3000語レベル)の練習での例文の書き取りなどのついでに、自然と初級レベルの単語のスペルも身についていきます なお、初級レベル(1700~1800)の単語集の中に書いてある「高校1年 基礎レベル」みたいな難度の情報は、あまり信用してはいけません。(実際に買ってみて読んで確認しました。)ある単語集でそのレベルの単語を確認したら、いくつも中学レベルの単語がありました。 year (年)とか month (月)とかの中学で習ったはずの単語が、「高校1年 基礎レベル」になっていました。 どうしても1700~1800語レベルを活用するなら、どっちかというと単語練習よりも、高校受験のレベル確認用と言うか、「高校受験の終わり~遅くとも高校1年の1学期の終わりまでには、大体この程度の単語は出来るようになって欲しい」といった確認のためのツールでしょうか。 ==== 3000語レベル ==== ===== 基本 ===== 特別な事情がないかぎり、高校生は3000語レベルから単語集を勉強すると良いでしょう。 いきなり3000語を使うのは中学と高校の橋渡しに不安かもしれませんが、しかし出版社側が3000語レベル本の冒頭の第1章で、中学単語の復習およびそれを高校の視点で理解しなおす勉強をしてあります。桐原と東京書籍のどちらとも3000語レベルの本の第1章は、そういう中高の橋渡しのための単語の紹介です。 逆に、4500語レベルの本には、そういう橋渡しが書いてないので、高校1年では4500語レベルは不適切です。 * スペル暗記の対象について スペルの暗記について、実は中級の単語であっても、すべてを暗記する必要はないし、すべてのスペル暗記は面倒です。優先して覚えるべき単語は、知的レベルの高い単語です。 また、東京書籍『コーパス』シリーズの単語集の前書きを見てみると、実は3000語レベルは「受信語彙」としており、つまりリーディング用の語彙にすぎず、受験の英作文などでは高校新出単語の多くは基本的に用いないことを想定しています。 受験では短時間に英文を書かないといけないので、中学レベルに毛の生えた単語力に、若干の高校中級レベルの単語を加えて、それで英作文を完成させれば十分なのです。もちろんビジネスの仕事の英文とは違いますが、そういう実務の英作文はそういう専門家の大人にまかせればいいのであり、高校生には関係ないです。 東京書籍の意見ではないですが、具体的に単語例を挙げて説明するなら、たとえば respond「応答する」 と nod 「うなづく」だったら、respondのほうを優先してスペルを覚えなければなりません。 なぜなら、respond のほうが名詞形の response などもあり、応用が多く、意味も広範であり英作文などで使わざるを得ない可能性が高いからです。一方で nod のほうの用途は、誰かがうなづく場面どまりです。また、ノッドの名詞形や形容詞形はないと思います。 また、nod はビジネス英語などでも agree 「賛成する」で言い換え可能です。入試の英作文ですら、ほとんどの場合は agree で十分でしょう。 この nod のように、利用価値の低い単語は、スペル暗記は後回しです。せいぜいリーディング用に「そういう単語もあるんだなあ・・・」と知っていれば十分です。 実は中堅私大や地方国立の英文の単語は、学科によっては案外センター試験ほど難しくない場合もあります。 さて、残念なことに、高校の単語集あたりから、だんだんと英語教育の質が形骸化しており、単語集がやみくもに単語数を多く紹介したいあまりに説明不足になってきています。 たとえば中級単語で content (満足する)という形容詞があるのですが、じゃあ satisfied (満足する)とどう違うのかは、単語集には書いていません。なぜならcontent は中級レベル、satisfied は初級レベルの単語なので、本を別冊にまたいでしまうからです。こういう縦割り教育なのが現状です。 辞書で content を調べるような思慮深い人は、他の単語を覚える勉強時間が不足してしまうので入試では不利になってしまうわけです。ひどいもんです。 * 2冊買うべきかどうか 3000語レベルの単語集(桐原『データベース3000』や東京書籍『コーパス3000』)については、2冊そろえるべきか1冊に集中すべきか、判断が分かれるでしょう。実際に各自が単語集を読んでみて判断してください。べつに2冊あっても構いませんし便利ですが、他の教科の勉強などもあるので、難しいところです。 旺文社の『英単語ターゲット1200』も、中級レベルでしょう。 あるいは、2冊そろえれば例文の数が単純計算で2倍になるので、辞書でいちいち高校レベルの例文を探す手間が減りますので、2冊目の単語集にはそういう活用法もあるかもしれません。あるいは、問題練習とかの手間を2冊目の単語集で減らせるかもしれません。 このように2冊目の単語集は便利かもしれませんが、しかし目的が上級レベル(4500~5500語)と中級レベル(3000語)では違います。 まあ各自がどうするか判断してください。 なお、東京書籍『コーパス3000』は、数字だけ見れば桐原『データベース3000』と同じですが、しかし東京書籍のほうで3000語レベルのもの(たとえばinjure)が桐原の4500語レベルに書いてあったり、あるいは別の単語ではその逆で桐原3000レベルの単語が東京書籍4500語に書いてあったりと、あまり分類は明確ではありません。 ===== 3000語の語法は初めは深追いするな ===== 偏差値の低め~平均程度の大学のなかには、4500語レベルの単語をあまり出さない代わりに、3000語レベルの範囲の単語で、やたらと細かい語法を要求する問題もあります。 しかし、4500語レベルや5500語レベルも勉強する一方で、いつまでも3000語の語法ばかりを覚え続けるわけにもいきません。 だから勉強法としては、極端なことを言えば、3000語の語法を熱心に練習するよりも先に、まず4500語レベルの単語集で一通り、単語の訳を暗記したほうがマシです。 実際、入試問題にも、そういう傾向もあります。 文系私大の偏差値50前後の平均的な大学が3000語レベルの細かい語法を4択問題などで聞いてくる一方で、文系私大の偏差値60くらいの大学のある出題が、4500語レベルで単語の和訳の丸暗記だけで4択問題が解けてしまう、といったような出題事例も少なからずあります。 ==== 上級レベル(4500~5500)の単語集について ==== ===== 原則 ===== もし大学受験を目指しているなら、高校3年くらいになったら、4500語+アルファの単語集にステップアップします。ここでいうアルファは、予備校などの出している、補足的な単語集です。 いっぽう、桐原の5500語レベルの単語集は、あれは志望校などの傾向の確認用などで、辞書的に使うものです。 桐原5500をメインにするべきではありません。桐原4500語または東京書籍4500語を一通りクリアしたのなら、メインの単語集としては旺文社1900または予備校系の単語集に入るべきです。 5500語レベルの単語集の使い方なのですが、かなり難しいです。ここでいう5500語レベルとは、桐原『データベース5500』を想定しています。 旺文社の(1200ではなく)『英単語ターゲット1900』は、実はやや高レベルです。東京書籍4500・桐原4500にはない単語でも、旺文社1900には記述されていることもあります。なお、それらの単語の元ネタは、受験過去問もありますが、じつは英検2級~準1級あたりです。 旺文社のは、数字の小ささにダマされてはいけません。桐原や東京書籍の数字とは、旺文社の数字は意味が違います。 桐原4500はその装丁の厳めしさなどに比べて、実はやや単語のレベルは控えめです。東京書籍も桐原のスタイルを踏襲しているような所があり、やや控えめのレベルです。 だから旺文社は、派生語などで、桐原・東京書籍が紹介してない単語をポンポンとたくさん紹介しています。 このため、現代でも勉強法としては、「まずは高校2年の終わりまでに東京書籍または桐原の出している高校用参考集をベースに勉強。高校3年あたりで旺文社のレベル高めの単語集を買い足して勉強する」といった感じになるでしょうか。 4500語レベル単語集では、桐原と東京書籍のどちらの単語集でも不足です。なぜなら、単語集1冊だけでは、例文不足かつ解説不足により、あまり役立ちません。なので少なくとも上級レベルだけ、出版社を変えて2冊、必要でしょう。東京書籍4500+旺文社1900にするか、それとも桐原4500+旺文社1900にするか、判断は読者に任せます。 具体的に単語をあげて説明すると、たとえば「限定する」という意味のrestrict と confine、ともに似たような意味ですが、単語集には意味の細かい違いは書いていないか、書かれていても強調されていません。 桐原の単語集だとこの2つが類義語だという情報はあるのですが、しかしニュアンスの違いが説明不測です。 一方、東京書籍および旺文社だと、restrict を「制限する」の意味で説明しているのでニュアンスの違いは分かりますが、しかしconfineと類義語である情報が欠落していました。 さてconfine のほうが、「地理的に制限する」=「閉じ込める」のような意味合いが強いのですが、旺文社の単語集だと「閉じ込める」の意味もあるのですが、しかし桐原の単語集にはそこまで書いていないのです。 かといって東京書籍のほうには、confine の「限定する」の意味が書かれていません。 また、restrictは(限度内に)「制限する」という意味もあります。むしろ、こっちの意味で紹介している単語集もあります。 どちらの単語集を使うにも、例文が不足しており、ひとつの単語集だけでは意味がまったく分かりません。困った教育状況です。本来なら入試に出題する単語を減らすなどして理解を深めさせるべきでしょうが、しかしそういった教育が出来ていないのが日本の現実です。 それでも、まだしも大学受験用の単語集は、なんとか教育効果を高めようとした形跡も見られるのでマシです。なので、単語集を2つ組み合わせると、なんとか役立ちます。一方、TOEIC 高得点用の教材とか英検の1級あたりの教材の単語集とか、やたらと単語数を多くしているばかりで、ひどいものです。(資格本の活用法については別セクションで述べる。要点:出題傾向を把握する目的だけに英語資格本を使う。) なお、桐原の場合、紹介する単語数そのものは旺文社などと比べて減りますが、その代わり、桐原の密度の高さが長所であり、桐原では他の単語集には無い語法などを紹介しているなど、単語1つあたりの情報量が桐原では増えています。なので、桐原の単語集も油断はできません。 一見すると、桐原の単語の項目のひとつずつの情報量は多くないように見えますが、しかし、桐原では別ページの紹介単語を用いた熟語をまとめたページなどがあるので、それを含めると桐原の単語ひとつあたりの情報量は多くなります。 かといって高校生としては、英単語集ばかりをそう何社も比較して勉強するのは無理でしょうから(数学など他教科の勉強も必要だし、英語の勉強も単語以外にも読解練習やリスニングなど多々あるので)、受験では結局、すべての単語は覚えきれない状態で挑むことになるでしょうか。 大学受験もその後の資格試験も、けっして満点はとる必要は無く、人生の目的に必要な志望校などの合格最低点を上回って合格さえ出来ればいいのです。 別に大学受験の英語に限った話ではないですが、大学受験において、平均以上の大学の入試では満点をとるのは基本的には困難であり、普通は満点は無理です。小中学校の校内テストと事情が異なります。 ===== 4500語以上のスペルは実は覚えなくていい ===== 実を言うと英語のスペルの暗記については、4500語レベルおよびそれ以上のレベルの単語のスペルは、まず覚える必要が低いです。 なぜなら英作文や和文英訳であまり使わないからです。 また、桐原5500や、東京書籍4500の後半部の単語などは、実はもうその1~2回のスペル練習すら、しないでも済むのです。おおよそのスペルと用法のイメージを頭に入れれば十分でしょう。 また、グローバル人材の育成などを目指す大学ならば、英作文などを要求してくると思いますが、だったら英作文で使うようなレベルの中級英語(4500)で十分なのです。むしろ、4500語レベルですらスペルミスなく習得していたら、かなりの勉強家です。 ましてや5500語レベルの単語については、読解問題で出題されたときに意味を把握できればいいのです。 仮に、桐原5500語レベルの単語のスペルを暗記させる問題を出す大学があっても、どうせ他の現役受験生の多くも解けない問題なので、実質的にスペル暗記は5500語レベルでは無視していいでしょう。 一部の浪人生で文系専願の人なら解けるかもしれませんが、難関大を目指して4浪だの8浪だのしている連中と、現役生は張り合ってはなりません。 TOEICなどの国際的な資格試験では普通、書き取りをしません。なぜなら採点の手間の都合で、TOEICでは選択問題ばかりです。大学側が入試で入学後のTOEIC対策などを考えた出題をしたとしても、スペル対策はもはや不要なのです。 英検でスペル暗記を使うかもしれませんが、しかし英検は日本でしか評価されません。 桐原5500は論外として、 正直、時間的に現役高校生が、桐原『データベース4500』と東京書籍『コーパス4500』または旺文社『英単語ターゲット1900』を使いこなすレベルにクリアするのですら、高校3年間では少しキツいと思います。たぶん多くの高校生は予想では3年生のときに「上級レベルの単語集の用法や用例を覚えている最中に、時間切れで、高校3年の卒業式を迎える」という結果になると思います。なぜなら、このレベルで、急に単語を覚えるのが難しくなるからです。かといって中級レベルまでしか勉強しないと、卒業後の実務のリーディングにも不便なので、上級レベルを高校3年で教えるのにも意義のあることなので、教育者には悩みどころなのでしょう。 なので勉強法としては、4500語レベルをクリアできなくてもいいので、ある程度の勉強をしたら、予備校などの出しているレベル高めの単語集をいくつか買います。 諸般の事情で、東京書籍・桐原・旺文社が紹介していないが、高校生に勉強してほしい定番の単語みたいなのがあって、そういうのが予備校系の単語集で紹介されています。 ==== 予備校の単語集は何をしているか ==== 歴史的な事情で、今の4500語レベルの単語集には書かれていないが実は昔の1990年代ごろまでの高レベル単語集には書かれていた単語があります。 そういう単語が、難関大学で狙われるかもしれません。 旺文社1900や桐原・東京書籍4500語にない単語の正体のひとつは、そういう昔の課程の単語です。 で、それが予備校系の単語集の元ネタのひとつでもあります。 東京書籍・桐原の3000語レベルや4500語レベルで旅行会話のような実用英語が増えたりビジネス英単語などが増えたので、昔なら4500語レベルに書いてあった単語のいくつかが今は5500語レベルにハミ出ているのです。 なので、予備校などの出す、受験レベルの単語集が1~2冊は必要です。そういうハミ出た単語だけ、あとは予備校系の単語集で抑えておけば十分なのです。 予備校の単語集を見てみましたが、実はそれほど特別な英単語はないのです。また、じつは、桐原4500などの学校向け単語集の単語すべてを均等に覚える必要はなく、やや傾向があります。 たとえば旅行英語で使う単語など、検定教科書にあるから桐原・東京書籍は紹介しているものの、あまり大学が重視してない項目もあります。 だから、桐原/東京書籍 に加えて、旺文社ターゲット、さらに別の予備校系などの高校3年レベルの単語集を何か1~2冊つかって知識の穴埋めをすれば、もう十分でしょう。 もしかしたら、高校2年からもう、予備校の出版している難関向けの単語集を使ってもいいかもしれません。 市販の予備校の単語集を見ても、けっして、桐原5500語レベルの単語を片っ端からは教えていません。桐原5500のアレは、高校生には習得が無理だと思われているのでしょう。 ==== 受験英語の特殊事情 ==== 大学受験英語の特殊な事情ですが、明らかに高校範囲外で実用的にもメッタに使われていない英単語が難関大学で出されており、当然に読めないのですが、しかしなぜか他の文章の単語から文脈にとって意味をとれるようになっています。 もちろん、現実ではそんな好都合なことは滅多に無いのですが、受験の英文はたいてい都合よくそうなっています。 また、万が一、他の英文の文脈から読めない単語が出ても、どうせ他の多くの受験生も解けないので、そういう問題は解けるようにしておく必要がありません。 ともかく、入試対策としては最低限、東京書籍4500・桐原4500をベースに、さらに旺文社1900で派生語を固める必要があります。 しかし、それとは別に、予備校などの出す、プラス・アルファ的な受験レベルの単語集が1~2冊は必要です。 歴史的な事情で、今の4500語レベルの単語集には書かれていないが実は昔の高レベル単語集には書かれていた単語があって、4500語と旺文社1900をひととおりクリアしたあとは、そういう歴史的経緯のある単語だけ予備校単語集で攻略すればいいのです。 ==== 英単語集の読書計画 ==== 最初から高校在学中の読書計画に、英単語集の読書を想定して組み込んでおくと良いでしょう。また、桐原・東京書籍・旺文社あたりに基本の単語集とは別に、他社の少しだけ発展的な単語集を読書感覚で読むと良いでしょう。 高校必修の範囲を越えた単語や派生語などは、読書感覚でひととおり解説に目を通すだけの単語集の勉強でも十分に対応できる場合も多くあります。 しかし、いちども読んだこともない単語は、さすがに入試で対応できません。だから、一度でも解説に目を通してしまえば、済む単語も多くあるのです。 なので、広く浅くでいいので、読書しておく必要があります。 === 大学受験に必要な単語量について === 一般に、大学受験で、難関な学校の英語を読み解くには4000語程度を知っていることが望ましい。 世間でよくある勘違いとして、「近年はリスニング導入などにより単語数が減ったから、用法を覚えるのを中心にすべきだ」という知ったかぶりの勘違いがありますが、しかしそれは「90年代のような(現代換算で)6000語レベルとか7000語レベルとかやってた受験戦争の時代ほどは、2020年代では多くの単語を覚える必要が無い」という意味です。そんだけ昭和や平成初期の受験戦争は、片寄っていたというだけです。現代だと早稲田や上智の英文あたりしか出さない難しい英単語を、昔はマーチ文系学部や関関同立なども出していた、というだけです。 2020年代の現在での平均的な大学受験レベルである4500語レベルまでは、さっさと目指してドンドンと覚えてください。もちろん用法なども覚えるのは当然です。 「単語数が減った」という意味は、「英検1級にしか出ないような超マニアック単語は出ない」という意味です。(たとえば redemption 「(キリスト教用語)人間の罪のあがない」(なお、おそらく「罪」とは宗教的な原罪)みたいなマニアック単語は大学受験では出ないという意味。) 2001年ころは実際に入試に英検1級の redemption が出たかはともかく、ひょっとしたら英検1級単語もチラホラと出るかもしれないとして、一部の文系受験生はそういう単語も勉強してたわけです(まだ今ほど受験ノウハウが、インターネットで共有されてなかった時代だったので)。 つまり、難解な単語も多い桐原5500は、あれでもマシなほうなのです(なぜなら、実際に入試に出た単語を中心に掲載しているので)。英検1級の単語集は、桐原5500をはるかに超え、もっとマニアックで(高校生にとっては)ひどい教材です。そういうのが英検1級です。 === 学部ごとによる出題傾向の違い === 単語集などで出題校を見ると、学部名が書いてないですが、実際は学部によって出題傾向がけっこう違います。少なくとも1990年代はそうでした。 基本的に、理系の学部では、5500語レベルのような、あまりに難しい単語は出ません。そういうのを出すのは、よほどの難関私大や、それも文系の学科です。少なくとも2001年ごろはそうでした。理系学部が出すのは基本、化学英語を除けば、せいぜい旺文社ターゲット1900のような、どこの書店の参考書コーナーでも入るような単語です。少なくとも2001年ころの私大では、法政大学の理系学部および東京理科大および四工大(芝浦工大や工学院大など)はそうでした。 理系の学部の入試では、英文科ほど難しい単語は出てきません。もし仮に出てきたとしても、相手する価値が無い大学です。それとは別に、理系の大学では、科学英語などが出る場合があります。特に私大は、少なくとも1990年代はそうでした(当時、科学英語の参考書が少ないにも関わらず、マーチでも青学あたりがそういうの出していた)。私立だけでなく国立でも、東工大などの国立の難関理系大学でも、昔は科学英語を出してた時代もありました(今はどうか知りません)。 ほか、最近はどうか知りませんが、桐原5500の単語を見ると「輸血」の英語など、ちょくちょく医学的な英語があったりして、90年代くらいの昔は出たようです。 常識的に、医学部などで、そういう長文でも出したのでしょう。もしかしたら他学部の出題かもしれませんが、志望以外の専攻の専門用語までは付き合いきれません。 もし今の書店の受験参考書コーナーにそういう科学英語の単語集があれば、今でも出るのだろうし、無ければ、出ないと出版社が判断したのでしょうから、書店の状況に従えば安全だと思います。 赤本などの過去問などで、もしかしたらそういう専門的な英単語を勉強できるかもしれません。志望校にも寄るので、念のため、過去問などを確認してください。 もし、普通の書店にある単語集に無い単語ばかり出す国立大学があれば、批判されるべきです。国民の税金で運営されているのですから、どこに住んでる国民でも勉強できる単語でないといけません。 私大の単語はどうか知りません。 === 単語の小テストばかりを受けても、復習しなければ単語力は身に付かない === 学校や塾で、単語の小テストを受けさせられる場合もあるでしょう。「単語集の○○ページから△△ページまでを小テストで出すので、書き取り練習して覚えるように」という小テストです。 たいていの高校生の場合、予習はテスト前にしますが、いっぽうで復習をしているかどうかは、個人任せです。 ですが、小テストをいくら受けても、復習しなければ、単語力は増えません。 もし、単語の小テストを受けたままで、その後は復習せずに、ほったらかしにしてしまったら、何も単語力が伸びません。 単語テストは、テストを受けた後に、自分の未修得の単語を復習するために存在しているので、テスト後に復習をする必要があります。(もちろん、テスト前に予習も必要である。予習をしていれば、未修得の単語が減るので、復習の単語数が減る。) 要するに、小テストの使い方は、全国模試の使い方と同じです。 全国の高校や塾のうちの一部では、どうも、小テストの目的を忘れていて、「とにかく毎週、単語の小テストをすればいい」と安易に考えているような教育も、ある気がします。 ここを読んでいる読者高校生は、小テスト本来の目的を思い出して、小テスト後には復習と予習をしましょう。 さて、たいていの高校や塾では、1週間に1回のペースで、単語20〜50語ほどの記憶をはかる小テストをしていると思います。 1週間ごとに50語ほどのペースで単語小テストをしていれば、充分にハイペースですので、それ以上は週あたりの単語数を増やす必要はありません。(英語が好きなら、さらに勝手に単語数のペースを増やせばいいだろう。) 裏を返せば、復習をしきれない量の単語小テストを毎回受けさせられても、非効率です。例えば、1週間ごとに300語の単語小テストを高校で受けたとしても(ただし高校1年の1学期だと、中学英語の復習で、そういう数百問のテストもありうる。しかしそれは期間限定)、そんなに英単語ばかり復習しきれないでしょう。(数学など他教科の勉強もありますし。) 万が一、そういう高校や塾の場合(1週間に300語の単語小テストの場合)、その高校や塾の小テストは後回しにして、自分で単語を予習・復習しましょう。 ただし、定期試験や期末試験などで、今までの単語小テストの合計の数百語のなかから単語が出題される場合は、多くあるので、その復習はしましょう。つまり、学期内の小テストは、その学期中に復習し始めましょう。(どのみち、テスト後にも補習などがあるだろうが・・・) 夏休み明けや、冬休み明けに、前の学期の小テストの範囲内の単語が出題されたりしますので、休み中にも、復習しましょう。(予習も忘れずに。小テストは最終目的ではなく、入試合格などが、より本質的な目的なので。) 同様に、3学期の年度末の期末テストなら、1年間の小テスト範囲の合計1000語ちかくがテスト範囲に含まれる場合も多いので、その復習はしましょう。つまり、年度内の小テストは、その年度中に復習し始めましょう。(どのみち、テスト後にも補習などがあるが。) == 文法 == === 完璧な文法理解はあきらめる === ==== 背景 ==== 高校では、中学英語の不正確な文法を、修正するような内容も習います。 しかし、だからといって、けっして完全にネイティブ級な英文法を目指してはいけません。高校生には無理です(大学生ですら無理だろう)。それこそ、米英生まれの人以外は、もう専業の英語教師みたいに年以上も勉強しないと到達できない水準の世界です。 なので、大学受験で要求される文法は、せいぜい、大学受験用のどの参考書にも書いてあるレベルの基本的な文法さえ理解できればいいのです。 そういう基本事項さえ押さえていれば、少しくらい文法が不正確でも、たぶん大学受験では多めに見てくれます。仮に多めに見てもらえなくても、もうそこまでの対策の時間は高校生にはありません。 じつは、受験参考書の文法解説すら、本当はまだまだ説明不足です。ですが、大学受験参考書を超える内容はもう、高校生には時間的には無理だし、数学など他の教科の勉強も必要なので、あきらめる必要があります。 これはつまり、大学受験の英作文でも、実は少しくらいマチガイがあっても良いのです。どの参考書にもある基本的な文法事項さえ押さえてあれば、少しくらい文法が間違っていても、大学は許容するでしょう。(許容しない大学があっても、英数学など英語以外の他教科の勉強を無視した大学なので、無視していい。なお、国公立の東京外国語大学では、受験生に数学を要求しています。) 日本人と外国人の立場を変えれば分かります。日本在住の外国人タレントとかで、もう十年以上の長いあいだ日本に住んでいる人ですら、ときどき文法ミスをしますし、日本語の発音も日本人とは少し違います。ですが、それを日本社会は許容します。 英語でも同じことです。向こうの国の人は、少しくらい日本人の英語の単語の並びや発音がヘンでも、話の内容がシッカリしていれば、聞いてくれます。 ==== 対策 ==== 上記のような背景のため、大学受験対策の英文法の勉強としては、せいせい平均レベルの問題集をせいぜい2冊ほどクリアすれば十分です。せいぜい、複合問題とかを解ければ、充分でしょう。 もっと言うなら、'''英作文の入試問題の場合、文法がすこしくらい間違っていてもいい'''のです。どの教科書・参考書にも書いてある基本を学んだ形跡さえある英作文を書ければ、あとは意味が通じれば、たとえば英作文中で冠詞がすこしくらい抜けててもいい、もしくは余計な冠詞があっても良い(本来は冠詞をつけない名詞に a とか the とか書いてもいい)のです。(ただし、あくまで「意味が通じるなら」の条件つきです。冠詞を間違えると意味が通じない英作文の場合は、間違えてはいけません。) 英作文の問題なんて、せいぜい英作文の参考書を数冊と、あとは普通の英文法の参考書の内容を押さえておいて、一通り学んだ形跡さえあれば、あとはもう小さなミスは受け入れるしかありません。仮に入試でその文法ミスが減点されようが、もう対策の時間がありません。 たとえば、日本語訳に引っ張られて、英語では、その単語には使わない冠詞をつけくわえても、そういうミスはもう、受け入れるしかありません。「英語以外にも日本語の知識も多いがゆえに、間違えてしまう」という類のミスは、もう受け入れるしかないのです。 日本語の学力に限らず、数学の学力でも理科でも社会でも、'''他教科の学力が高いがゆえに発生しやすいミスは、受け入れるしかありません'''。仮にこういう知識の多さゆえのミスをひどく減点する採点者のいる大学があっても、そういう大学はあまり教育水準が高くないので、もう相手しないほうが良いです。 また、辞書や一部の参考書のコラムにしか書いてないような細かい文法はもう、いちいち覚えてられないので、間違えてもいいのです。 また、仮に文法にミスが無くても単語にミスがあれば英作文では減点されかねないので、単語を学ぶほうが重要です。 ともかく英作文では、けっして「小さなミスを避ける」という発想ではなく、「'''大きなミスをなくすために、小さなミスを許容する'''」という発想の転換のほうが重要でしょう。 大きなミスにつながりかねない、文型とか過去形・完了形とか仮定法とか関係詞とか、「もし間違えると、意味がまったく変わってしまったり、逆の意味になってしまいかねない」という、そういう単元を重点的に身に着ける必要があります。いっぽう、助動詞などの高校で習うような微妙なニュアンスの違いとかは(たとえば助動詞 will は、「明日は日曜日だ」みたいな確実な未来では使わないというニュアンスがある)、間違えても小さなミスですので、ある程度は小さなミスを英作文では妥協する必要があります。 英作文では、よほど簡単な文でない限り、ミスは無くせません。また、だいたい英作文を要求してくる大学は、そこそこの長さの英作文を要求してきます。よって、ミスをゼロにしようという発想では、ネイティブ以外では対処できません。 たとえば、英作文がまったく逆の意味に受け取られてしまうような大きなミスは、避けなければいけません。また、そもそも米英人に通じないような文章も、避けなければいけません。 しかし裏を返せば、英作文で少しくらいニュアンスが変わってしまっても、教科書レベルの文法をきちんと押さえていて、もとの和文の意味の90%くらいが通じるなら、ミスは受け入れざるを得ません。 ;大学入試も英検・TOEICも単語重視 文法の要求水準がそんなに高くないので、平均的な文法問題集をクリアしたら、そのあとは単語などを勉強したほうが良いと思います。 もし仮に、文法で難問を入試に出してくるブランド大学があったとしても、そういう大学は単語力も多く要求してくるでしょうから、文法の難問よりも単語力の増強に時間を当てたほうが良いでしょう。 英検など検定試験では、単語については大学受験を超える単語も要求されます。しかし文法については上述の通り、大学受験を超えるような文法理解は英検・TOEICですら要求されないです。世間の人は、そもそも受験参考書を超える文法知識の存在そのものを知らない人すらも多くいるくらいです。 === 参考書で勉強する === 高校英語の英文法の勉強は、検定教科書ではなく参考書で勉強するのが定石、基本です。 なので、まずは参考書を買い始めましょう。普通科高校なら、おそらく高校の入学時、検定教科書の購入と一緒に、参考書も買わされると思います。 もし大学受験を考えるなら、英文法の参考書を買わなければなりません。 とりあえず、下記に後述する網羅形式の本を持っていれば、ひとまずは安心でしょう。 === 高校英文法は例外も多い === 中学の英文法の教育では、規則的・論理的な文法事項だけが取り上げられたのですが、高校は違います。 このことからか、高校英語では英文法の参考書のスタンスがいくつか分かれています。 1. 例外的な事例にはあまり深入りせず、基本的な事項を重視したスタンス 2. 辞書的に、英文法のあらゆるパターンを網羅的に掲載したスタンス があります。(実際にはこの中間の編集方針の参考書もあるが、説明の都合上、二極に単純化することにする。) 予備校系の講義形式をうたった参考書のいくつかや、高校英文法の入門書などの参考書のいくつかは、基礎的な重要事項を特に重視したスタンスです。(そのため、例外的な事項の説明は省かれているか、少なめです。) いっぽう、高校にもよりますが、高校で配布されるような昔からの、いかめしい感じのする参考書は、辞書的・網羅的なスタンスの参考書です。 センター試験などを考えるなら、網羅的なスタンスの文法参考書を最終的には読んで覚えざるを得ません。 一応、網羅本だけでも受験対策は可能ですが、塾や予備校などに通ってない人や、高校の授業の質に不安のある人は、さらに基礎的な事項を重視したスタンスの文法参考書もあると良いかもしれません。 例えば理系の中堅私大などで、あまり例外的な文法事項を要求するとは思えません。 ただし、これは私大の場合の話です。国公立の志望の場合は、共通試験を対策せざるを得ず、そのため二次試験がどうなっていようが、その対策のために辞書的・網羅的な参考書を読まざるを得ません。 TOEICなどの資格試験が近年重視されており、大学でも私大などで推薦入試や自己推薦などでTOEICの成績を考慮する大学も多く、企業もTOEICを表向きには重視していますが、TOEICは文法教育における論理性や高校生の論理性の涵養に配慮する義務はありません。なので、この問題の逃げ場は、大学受験にはありません。TOEICが果たして本当に実用英語かどうかはともかく、世間一般で「実用英語」だろうとは言われています。 === 網羅本でも全部の構文は紹介していない === 例えば比較級の構文「A is B no more than C is D」は、ある参考書(網羅本)には紹介されていませんでした。 高校英語で習う構文は多いので、複合的な構文などは、網羅本といえども一冊の参考書では紹介しきれないのです。 もし英語だけしか学習しないので済むのであれば(実際は違いますが)、英文法の網羅本の参考書を2冊や3冊も読み比べることで自分にあった参考書を選べばいいですが、しかし他教科の勉強もあるので、そうはいきません。 悩みどころです。各自、うまく対応してください。 また、大学生・社会人向けの厚めの文法参考書でも、すべての構文が書いてあるわけではないです。例えば『ロイヤル英文法』という大人向けのやや専門的かつ高度な英文法参考書がありますが、「all the +比較級」の構文は書いてありませんでしたし、巻末の索引を調べてもありません。 だから、大人向けの文法参考書を読んだところで、この問題「網羅本でも全部の構文は紹介していない」は解決しないのです。 === 時間配分 === 文法の学習は当然に必要ですし、入試にも良く出ます。しかし、文法の学習にばかり時間を掛けてはなりません。 高校に入学すると、高校の範囲の文法事項を、おそらく学校や塾などで急に教わり始めるでしょう。それらの文法の新知識の学習も大事ですし、当然に学習するべき知識ですが、読者のみなさんは英単語の学習も欠かさないようにしてください。文法なんて覚えることも少ないし、大学受験をするなら最終的には大学受験のころにまで文法を覚えられれば良いのです。なので文法の難問を練習する時間があるなら、それよりも、まず先に単語を優先的に勉強して語彙力を増やしたほうが効率的でしょう。 また、入試の文法問題も、文法の知識だけで解ける問題は少なく、単語の知識や語法の知識などと組み合わせないと解けない問題なども、入試では、よく出題されやすいです。なので、単語の知識が、大学受験対策では優先的に必要なのです。 2010年以降なら、中学校で、すでに大まかな文法の枠組みは習っています。2022年では、仮定法すら中学校で習っているはずです。もはや高校で習うのは、無生物主語など若干の単元と、あとは仮定法過去完了だとか、現在完了進行形とかくらいです。 そういった合わせ技は、それほど熱心に勉強しなくても、入門的な問題集などで問題練習すれば、普通に習得できます。 === 高校英文法は実は少しウソ知識 === 高校生用の文法参考書は、高校標準レベルの参考書は、基本的には、中学英語の復習も兼ねています。 このため、普通なら、高校1年生は復習のためにわざわざ中学参考書を買いなおす必要はないです。 それよりも重要なこととして、実は高校英語の文法参考書には、不正確な知識があるという事です。中学英語が理解重視のため少し不正確でかなりひどいカタコト英語が中学生用の参考書・教科書にあるので、同様に高校の英文法も少しだけ不正確なウソの知識があるのです。 さて、単語集では基礎レベルの単語集の前半が、中学英語の復習を兼ねているように、実は高校英文法の参考書も、少なくない割と多くの部分が中学の復習や、中学で習った分類など理解の再構成を兼ねています。 単語集ほどではありませんが、高校の文法参考書でも、あまり序盤にある中学文法の復習の部分には、高校でも深入りする必要がないことが、上述の考察・市場調査などから分かります。 また、このことに気づけば、つまり単語以外の知識で、一部の参考書にしか紹介されていない細かい文法の理論的な知識は、入試対策としては覚える必要が低いことが導かれます。単語集だと、細かい発展的な単語も入試に出ますが、しかし文法書については事情が違います。高校英文法には、深入りせずに、広く浅く学ぶのが安全でしょう。 文法参考書に書いてある知識がそもそも初学者の理解しやすさを重視したためのウソ知識なのですから、むしろ、けっして鵜吞みにして深入りしてはイケナイのです。 ほか、使用頻度の少ない表現など、参考書によって説明が微妙に食い違っています。たとえば接続詞 lest は、ある参考書では、「文語的であり、あまり使われない」と主張する一方、他社の参考書では「(for fear よりも)頻度は lest のほうが高い」(ジーニアス)と主張していたりします。 こういうふうに、細かい表現の英米での利用状況には諸説あるので、あまり参考書を鵜呑みにしすぎないようにしましょう。 === 大学生向けの参考書は例文不足 === 大学生むけの参考書は高校生向けのものと、用途がやや異なります。 高校生は、高校生向けをターゲット層にした一般の高校生向けの英文法参考書を中心に勉強しましょう。 === 細かなニュアンスの違いは覚えなくて良い === 受験勉強では、細かなニュアンスの暗記よりも、英単語をたくさん覚えなければなりません。また英語以外の国語や数学などの勉強も必要です。 参考書で勉強をする際、あまり細かなニュアンスの違いの暗記に入り込まないように注意してください。 実際、ある検定教科書でも、文法事項の類似表現などは、たとえば Would you ~? と Could you ~? などの依頼表現としてのニュアンスの違いは説明していません。せいぜい、 「Please と比べたらWould You および Could you は丁寧な言い回しである」という程度のニュアンスさえ把握できていれば大学受験レベルでは十分です。 参考書にはもしかしたらもっと細かいニュアンスの違いなどが書いてあるかもしれませんが、そういう詳細な情報はせいぜい参考程度にしましょう。 実は参考書でも、もう細かいニュアンスの違いは教えていない書籍も多くあります。 つまり、大学受験用の英語参考書には2種類あり、 :ひとつは受験用に入試に出る最低限のことだけを教える参考書と、 :もうひとつは細かいニュアンスの違いなども教える参考書と、 そういう2種類があります。 なお、上記とは別に英語研究者用の文法参考書がありますが、大学受験には全く対応していないので間違えて購入しないでください。 最低限のことを教える文法参考書の例として、ジーニアス英和辞典を出している大修館書店は高校生向けの文法参考書(『ジーニアス総合英語』)も出していますが、しかし文法参考書のほうでは辞書ほど細かいニュアンスの違いを説明していないのが現状です。 特に新共通試験(旧制度のセンター試験に相当)などの公共機関の試験や、英検・TOEICなどの資格試験では、細かいニュアンスを問う問題はまず出題が難しいでしょう。西暦2000年以降、国公立人気などでセンター試験や新共通試験の影響がどんどん強まっている影響も考えれば、文法学習であまり深入りニュアンスに深入りするメリットは残念ながら少ないのが現状だろうと思います。 それが英語教育として良いかどうか不明ですが、現在の大学入試の対策として要求される文法教育とはそういうものです。 基本構文などの細かなニュアンスの違いは、英会話などではそれなりに重要ですが、しかし入試や画一的な資格試験では英会話をそこまで細かく採点できないので、したがってニュアンスの違いに基づく使い分けもそれらの試験では出題されづらいことになります。新共通試験にリスニング試験はありますが、しかし実際に会話をさせる試験はありません。 裏を返せば、細かいニュアンスに深入りした文法参考書は、高校卒業後の英会話などの英語学習などのステップアップで使うのが効果的かもしれません。 高校の文法参考書の題名は、「文法」と書いてあるものを選んでもいいですが、2022年の書店で確認したところ『総合英語』と書かれている参考書も文法事項が中心的です。 === 各社ごとの注意 === 参考書えらびの際に、高校1年生がたぶん勘違いしそうなことを、述べておく。 * 大修館「ジーニアス」と数研出版「チャート式」の細かさ 大修館「ジーニアス」ブランドは、辞書では昔から細かい説明で有名であり進学校などではジーニアスの辞書が勧められるとの噂も昔からよくあります。ですが、しかし「ジーニアス」ブランドの文法参考書はあまり細かくありません。注意してください。 別に細かい文法参考書がいいだの悪いだのという話ではなく、ともかく、辞書のような細かさを「ジーニアス」文法参考書に期待してはいけません。用途が違います。 いっぽう、数研出版のチャート式の文法参考書のほうが、多くの構文が細かく網羅的・羅列的には書いてある傾向にあります。このため、1990年代の昔からよくチャート式の一番難しいバージョン(白・黄・青など色々バージョンがある)が進学校などでの参考書として配布されることもありました(かつては赤チャートが難しかったが、現代は赤が廃止され次点だった青チャートが一番難しいバージョンになっている)。 ただし、果たして2020年代の現代の入試にもチャート式が効果的かどうかは分かりません(会話重視・リスニング重視や単語重視など、入試の流行の変化もあるので)。 * 文英堂「インスパイア」と学研の参考書の入門者対応 なお、かつて文英堂『シグマベスト』というシリーズが、1990年代~2001年くらいは高校入門レベルの参考書として定番だったが、現代はそもそも英語のシグマベストが無いのと(英語は『インスパイア』に変更)、しかし同社・文英堂の『インスパイア』は、難しめです。高校生むけの一般的な参考書のなかでは、たぶんインスパイアが一番情報量が多いと思います(青チャートよりもインスパイアのほうが説明が細かいです)。 暗記科目なので、難しくても、とりあえず読めますが、しかし『インスパイア』のレベルはやや受験レベルを少し超えている記述もチラホラあります。 なお、例えば理科など他教科でも『シグマベスト』は実は2010年以降の現代はなかなか発展的であり難しくなってきていて、情報も細かく羅列的である。90年代の当時とは『シグマベスト』の中身の難しさが違うので、参考書選びのさいには、けっして90年代のままの世間の大人たちの評価を鵜吞みにしないように注意。 背景として、90年代の昔は、英数理の参考書選びのパターンとして、「シグマベストで入門レベルをカバーして、チャート式で高度な事項を勉強」という有名パターンがありました(なお、国語と社会科のチャート式は参考書としては無い)。あるいは、「その教科が苦手ならシグマベストを選ぶ。その教科が得意ならチャート式を選ぶ。」のようなパターンが90年代にありました。 しかし、現代では シグマ + チャート のパターンが、もはや上述の出版事情の変化で通用しなくなってるので注意。 2010年台の今だと例えば学研が高校入門レベルの初等的な参考書の立場だが、90年代の昔、学研がまだ高校参考書にあまり参入しておらず(昔の学研は小中学校むけの教材ばかりがメインだった)、当時は文英堂のシグマベストが今の学研の高校参考書に近い立場だったという背景事情がある。 === 文法参考書の選びかた === インターネットで参考書の形式やレベルなどを調べたり、または、教師や塾講師、チューター、同じ学生などからの評判なども参考にしながら、実際に書店で参考書の内容を閲覧するなどして選ぶといいだろう。 また、古本屋などで参考書を購入すると出費を抑えられる可能性がある。 中学英語は昔とカリキュラムが大幅に変わったので古本屋は論外だが、高校英語は昔から到達地点が同じままなので、文法学習はちょっとぐらい古い本でも特に問題ないかもしれないかもしれない。とりあえず、古本屋で英文法書を購入するなら、なるべく最近のものを購入したほうがいいだろう。 「大学英文法」とかそういうのは一般的には無い。文法は高校英語で、とりあえずゴールである。あとは単語や熟語を増やすのが、その後の道である。 英語教師などを目指す人のための細かい英文法理論書はあるが、高校生には必要ない。なお、書店によってはそういう教師向けの英文法理論書が高校英語コーナーに売っていたりするので、間違えて買わないように。わかった上で買うなら自己責任で。 === 高校の文法参考書はどういうものか === 「時事的な文法」とか無いので、もし改訂などあっても、あまり頻繁に買い換える必要は無い。 他のセクションでも言ってるかもしれないが、「大学英文法」と言うのはない。なので、文法において「大学教養レベルの先取り」とかは不要であるし、そもそも存在しないし、そういう教材もまず無い。 このことは、大学受験においては、つまり文法問題は、高校生向けのやや高レベルな参考書を習得できたら、それ以上は英語教師でも目指さないかぎりは、英文科向けのさらに高度な文法書には進む必要は無い、という事である。 英文科の学生などに向けた文法書は、あれは教師向けまたは研究者向けの参考書である。内容も、基本的には高校生向けの文法参考書に書いてある内容を、大学生または教師志望者などの視点やレベルに合わせて書き直した程度のものである。なのでともかく、受験生には不要である。 このことから、ゴールが明確に定まり、受験生向けのやや高度なレベルの参考書がゴールである。 そこから逆算すると、あまり多くの参考書を読み漁る必要はない。せいぜい、2冊読めば十分だろう。 高校1年レベルから分かりそうな易しめのレベルのものと、あとは少し難しめの感じのもう一冊で十分である。もしかしたらどちらか片方だけでも十分かもしれない。 また、説明を省略したが、前提として、高校の参考書は、学年別とかには売ってない(書店で実物を見れば分かると思うが)。 なので参考書での学習の際にも、いちいち学年ごとにペースを3等分とかして「私は1年生なので、参考書の前半の3分の1だけ読む」みたいなことはする必要は無いし、むしろ現代では3等分すべきでもない。 つまり、参考書は高校1年で購入したら、とりあえず、さっさと通読すべきである。現代の中学・高校のカリキュラムなら、文法参考書の通読は中学英文法の復習にもなるので、まずは通読しよう。 そして何回か通読したら、問題集などにチャレンジしたり、あるいは単語なども増やそう。 これがもし英語でなく数学の勉強法だったら、先の学年の内容を通読するよりも学校で習った単元の復習などを重視するのも手かもしれないが、しかし英語はあまりそういう単元ではない。 高校の授業や定期テストなどは、あれはあれで教育ノウハウが詰まっているので活用すればいいが、別にそれを活用したからといって文法参考書を通読できなくなるわけでもない。 それに塾などだと、参考書の後ろのほうにある無生物主語などを高校クラスでは1年で先に教える流儀もある。 参考書の最初のほうにある文型がどうのこうのと言った話は、どうせ塾の中学生クラスや中学参考書などでも既に教えている可能性があるので、塾の高校生クラスではそういうのはもう後回しにして、先に無生物主語や仮定法など参考書の後半の単元を教えるというパターンもある。家庭での自習などの際にはご参考に。 また、そもそも2年の終わりくらいから高校や塾などで全国模試などを次第に受け始めることを考えるなら、けっして高校3年間で学校の授業で文法を習うのを待つのではなく、自習によって高校2年の後半の段階までに一通り、高校生むけの単元である無生物主語やら仮定法過去完了やら分詞構文などを含めて、とりあえず文法参考書は全ページを通読は済ましておいて、加えて問題練習を軽くでいいのでしておくべきだろう。 そして、高校3年では模試なども活用して、問題練習で定着させていく、・・・という段取りである。 == 熟語 == 単語集の前半のほうにも、実務ではあまり使わないだろう熟語、つまり、より平易な表現に言い換えることの多い表現がよくあります(少なくともこのセクションのある編集者が、ネット上の海外英語では見たことない表現がいくつもありました)。 中学1~2年で習うレベルの単語の組み合わせで作れるマニアックな熟語がいくつかあるので、学習時に注意が必要です。単語集では編集の都合上、そういうマニアック熟語が前半のほうに書いてありますが、正直、後回しにすべき熟語です。 一方、 come true (実現する)のような、たとえば構成する単語と意味が近い場合なら、学習効果は高いです。たとえばtrue 「=真実」と「実現する」は比較的に意味が近いです。参考書でも、よくSVC文型の例としてcome true が出てくるので、こっちは重要事項です。 しかし残念ながら、単語集にある出題頻度の情報を見ると、come true は出題頻度が低いようです。 そのほか優先して覚えるべき熟語は、たとえば no longer ~「もはや~ない」のように構文的な熟語や、あるいはget over ~「克服する。回復する」(= overcome)のように中学レベルの単語には言い換えできなくてその熟語表現を使わざるを得ない可能性の高そうな熟語とか、そういうのです。 このような熟語の教育状況になってるのは、つまり残念なことですが、「英語教育での英作文などでは、実務的を想定した教育がされておらず、つまり形骸化している可能性がある」という事です。 「出題頻度順」の掲載をうたった単語集で前半のほうに、不便なマニアック熟語があるので、つまり入試では、実際には仕事などで英語を使うつもりのない人たちを想定した入試が行われているという証拠です。 英作文をする際、getで一語で説明できることを「come by ~」で表現する可能性は実用では低いでしょう。英会話でも、果たして米英人が、日本人相手に come by で説明するでしょうか。はなはだ疑問です。 なぜなら外国人は、もし英語が得意な日本人相手なら躊躇なくobtain のような非熟語を会話で使うだろうし、あるいは「英語が苦手な日本人かな」と思って気を使ってくれるなら get で表現してくれるでしょう。 come の基本的な意味は「来る」ですから、熟語come byの「入手」とは、かけ離れています。おそらく「手元に来る」的なニュアンスなのでしょうが、しかし「by」からそれを想像するのは、かなり前置詞「by」の基本の意味から離れています。そういう、基本単語の意味からの距離の大きい表現は、実務では学習コストが高いので、いろいろと不便なのです。 不便とはいえ、海外での利用の可能性がないとは言えないので日本の受験英語でも教えられていますが、なるべくなら後回しにしたいマニアック熟語表現です。 come true 「実現する」のようなSVC文型の例にもなるような教育的な熟語だと出題頻度が低いようですが、これはつまり、入試出題者が、高校生の学習効果を見る良問よりも「落とすための問題」「ヒッカケ問題」を21世紀の少子化の時代になっても未だに出題し続けているという証拠でしょうか。 == リスニング == まずは、前提となる単語力をつける必要がある。その上で、参考書で、音声CDつきの参考書などで聞き取り練習をするなどすればいいだろう。また、例えばYouTubeやTEDなどで自分の興味のある分野の英語を聞くなどしてもいいだろう。 テレビのNHK教育の英語番組は、学校の授業用に作られており、大学受験対策には作られていないこと、洋画は字幕や吹き替えに尺や字数の都合などで意訳が多いため学習には向いてないとする意見もある。 さて、新共通テストの場合なら、回答の選択肢が4択で与えられるわけですから、その選択肢の中からリスニング内容に一番ちかいのを選べればいいのです。すべての単語を1回で聞き取る必要はありません。それはプロの同時通訳者でも無理です。(なお、試験によっては2回ほど放送される場合もある。) すべての単語を聞き取るような問題は、おそらく共通テスト出題者は、作成しないだろうと思います。仮に作成したとしたら、かなりゆっくりと発音するリスニング問題でしょう。 テレビの生放送で、定型業務ではない政治討論の番組などで音声モードを英語モードに切り替えをして視聴してみると分かるのですが、実は生放送ではプロの同時通訳者ですら完全には流暢(りゅうちょう)には翻訳を出来ないのがプロでも実態です。テレビ生放送の英語は、プロですら、ややカタコト(片言)気味の翻訳になります。しかもテレビ番組などは、実は事前に原稿・台本があり、その原稿が事前にスタッフなどに渡されて読まれており、それをもとに撮影および音声収録をしています。それですら、少しカタコトの同時通訳なのです。 なお、テレビの原稿・台本のようにプロの同時通訳では、話題にある程度の予備知識が必要です。しかし新共通テストでは、そこまで個別のトピックのある話題には踏み込まないでしょう。(ただし、難関私大や国立二次試験はどうか知りません。もっとも受験生には他の勉強もあるので、普通に英文読解などの教科書・参考書によくある話題に触れておけば十分でしょう。) == 読解 == 読解練習をしたい場合は、まずは学校でのリーディングの教科書などをきちんと読むのは当然ですが、そのほかにも参考書があると便利かもしれません。 書店の参考書コーナーに、高校生用の英文読解の参考書などが置いてあるはずですから、それら高校生用の参考書で勉強してください。 大学入試の英文では、平均以上の難度の大学になると、単語の知識がないと、まったく内容が把握できないでしょう。なので、読解練習だけでなく単語の勉強もしてください。とりあえず単語集などで4500語レベルまでの範囲の単語は最低限、ひととおり学習してください。 * 試験での読解問題の時間配分について 出題英文を読むのに時間が掛かりますから、試験中の時間の配分にも気をつけてください。まずは単語力を増やすと読解スピードも上がるので、普段の勉強では単語力を増やしてください。 試験中の配分の対策として、実際の入試では、たとえば、長文読解問題よりも先に、短時間で解けそうな単語問題・文法問題などを先に解くとかして、時間配分の対策をしてください。あるいは、設問の問題文を先に読んでおいて、見当をつけてから長文を読むなどという方法もあります。ここらへんの対策は、じっさいに過去問や想定問題などを解いて練習してください。基本的に、入試国語での現代文などでの読解問題対策などの際の時間配分と似ていると思います。 ただし、時間配分のテクニックばかりを磨いてもダメであり、単語力などを増やさないと、読解スピードも上がりません。 * 学部と出題内容の関係 入試では、ときどき、志望先の学部の内容に関する記述が出る場合もあります。また、高校で習う教科に関する記述が出る場合もあります。もっとも、べつに必ずしも志望先学部と近い内容の英文が出題されるとは限らず、あまり関係のない内容の英文も出題される場合もあります。 どちらにせよ、合格後の人生も考えて、学生は、志望先学部に近い内容の高校教科の勉強もしておいたほうが安全でしょう。たとえば経済学部に進学志望なら高校政治経済などの参考書を読んでおくとか、あるいは理工学部に志望なら理科・数学の参考書を読んでおいたほうが安全でしょう。 == 発音・英会話など == 基本的には、標準的な参考書でカバーでき、あとは単語の記憶量を増やす練習とか、リスニングの練習とかの対策でよいです。あとは参考書などの英会話文例や発音問題を覚えておけば、入試での、だいたいの発音や英会話の試験もカバーできます。 * 入試の発音問題について 発音問題は、入試に英単語と発音記号を照らしあわせる問題は出ます。ですが、自分で発音することは、入試ではない。 * 入試での英会話について 大学入試では文章題などで、英会話の空欄を埋める問題などが出されるかもしれません。いっぽう、大学側が、直接受験生と会話をする試験は、一般入試では出ないでしょう。 ただし、いくら一般入試に会話が出にくいといっても、基本的な会話くらいは、せっかく高校で習うのですから、きちんと練習してください。そもそも建前上は、高校で習うことは、高校生は学習するべきということになっています。そして大学側だってバカじゃないんだから、なるべくきちんと勉強している受験生を優先的に合格させたいのです。 == 英作文 == 英作文の練習よりも、まず先に文法学習や単語の記憶量を増やす勉強を優先したほうが安全でしょう。単語の記憶量が増えて、文法や熟語なども覚えれば、英作文なども、自然と上達します。逆に言うと、英作文だけを勉強しようとしても、難しいです。なお、単に英単語の意味や綴りを覚えているだけでは英作はできない。動詞ならば他動詞(Vt)なのか自動詞(Vi)なのか両方あるのか,他動詞ならば第4文型(SVOO)や第5文型(SVOC)をとれるのか,名詞ならば可算名詞(C)なのか不可算名詞なのかなど(これ以外にもたくさんある),とにかく用法まで正確に知っておく必要がある。従って辞書を引く必要がある。 == 問題集を信じすぎるな == 問題練習をする際には、必ずしも偏差値順にステップアップする必要は無い、という事です。 また、日本人の高校生のレベルを越える難しすぎる問題は、そもそも解けるようになる必要もないでしょう。 選択問題では、高校レベルで習得できるレベルでの、初心者のよくやるミスをしない事のような、明らかに間違った言い回しを排除する事さえできれば、それでいいでしょう。 納得の行かない問題の対策はやりすぎないようにスキップして、他の勉強をすべきです。英語の勉強なら、もっと確実に偏差値アップの出来る勉強、たとえば単語力を増やすなどの勉強をしましょう。 == あきらめるべき事 == === 第二外国語は、あきらめるべき === ==== 入試に第二外国語は出ない ==== 高校によっては、第二外国語の授業を用意している高校もあります。 共通テストや二次試験では英語以外の外国語を使えるところもあるが、特別な理由がないなら英語を選択したほうがいいだろう。 また、中国語を勉強しても、漢文の入試問題を解くのには役立ちません。 帰国子女とか、あるいは進路志望が語学関連の分野で無い限り、あまり第二外国語には手を伸ばさないほうが良いでしょう。 == 一般入試対策ではTOEIC対策などには手を出さないほうが安全 == 英語能力を測る国際的な試験のTOEFLやTOEICなどは、高校生の学習用には作られていません。そもそも日本人に内容を合わせていません。 それにTOEICとTOEFLのどちらとも、試験の目的が、日本の高校英語の教育目的とは違います。 TOEICとTOEFLのどちらも目的は、英米への留学や海外生活のためなどの語学が目的です。日本の大学入試や、日本の大学での英語論文読解などの目的には、TOEIC・TOEFLなどは合わせていません。TOEFLとかTOEICとかで、ハイスコアを目指すのは、大学受験対策とは目的がズレています。 なお、そもそもTOEICをつくったのは日本の通産省(当時)であり、通産省がアメリカの非営利テスト開発機関、ETS(Educational Testing Service)に依頼をして、日本がつくったテストです。 よって、TOEICの出題内容は、アメリカ国内での実用とは若干、ズレていますので、てっきり実用英語だとは勘違いしないようにしましょう。また、てっきりTOEICは(OECDあたりの)「国際機関のつくった試験である」などと勘違いしないようにしましょう。 さらに、TOEICの参考書などにある「高校生レベルは◯◯点」などの数値も、じゃっかん、疑わしいので、あまり鵜呑みにしないようにしましょう。 ;* 平均点 :なお、高校生のTOEICの平均点は、年度にもよりますが、2018年の時点では、高校生の平均点はおおよそ350~400点くらいです。なおTOEICの満点は990点です。 ネット上では「TOEIC 600点が英検2級相当」という言説が出回っており、英検2級が高校英語レベルを出題範囲として想定していることから、あたかも「高校を卒業したら TOEIC 600 点で当然」みたいな言説が出回っていますが、しかし2018年の統計などをもとに考えれば、この言説はデタラメです。 また、「TOEIC 600点が英検2級相当」という言説の根拠も、よくよく調べてみると、2001年くらいに英検2級保持者にTOEICの点数をアンケートしたところ TOEIC 400点~800点あたりに得点がバラついたという統計を、とりあえず平均値をとって600点としただけにすぎないのが実態です。 高校の数学で統計値の「分散」という概念を習います。分散を知らないと、統計詐欺にダマされてしまいます。 ;* TOEICは事実上は文系向けの試験である :世の中には、文系の大人が多く、その影響で、学生でも理系科目をサボってまで英語の勉強をして、英語の成績を上げる人がいます。TOEICの平均点も、そういう文系の人間を基準に算出されてしまいます。 :一般入試や国公立受験、理系の学部などを目指す人は、けっして、そういう文系の大人や、文系しかできない学生を多く含むTOEIC平均点を、参考にしてはいけません。 :* 4択問題と難易度 :TOEICの各問題は基本的に4択問題ですので、デタラメに選択しても、990点満点(約1000点)中のうちの4分の1である約250点を取れます。 : さらに、欧米で英米への留学希望者むけのテストなどとして知られている英語検定試験はTOEFLです。 TOEICは、日本と韓国で流行っている英語検定です。 また、英検は日本人用の試験ですが、しかし高校生用には試験が作られていません。中学生・高校生なども意識して英検は作られているでしょうが、しかし、中高生だけを意識してはいません。 英検を入試対策で使うなら、志望校合格などが保証されないかぎりは、なるべく英検'''準'''1級までに止めるのが無難です。 * 推薦入試などの評価事項になることも ただし、推薦入試ではTOEICやTOEFL、英検などの成績が考慮される場合もあります。 * 難関大学への対策用としての場合 大学によっては、入試で高校レベルを超えた、かなり難しい英語を出す場合もあります。そういう大学に対応する場合、市販の受験参考書では太刀打ちできないかもしれません。このような場合、しかたなくTOEFL対策や英検1級対策などの参考書が必要な場合もあるかもしれません。 * 就職活動でのTOEIC評価について ただし、大学生の就職活動では、企業にTOEICなどの点数を聞かれることもあります。就職活動時のエントリーシートに、最初からTOEICなど成績の記入欄がある場合もあります。また、外国大学への留学の際に、TOEICなどで一定以上の成績を修めることが必須の要件とされる場合も多いです。たとえ英語圏以外の国の大学への留学でも、TOEICやTOEFLなどの成績が必須要件として必要な場合があります。 なので高校生でも、TOEIC受験の機会があれば、受験をするのも良いでしょう。 ただし、TOEICの成績が良いからと言って、けっして、それだけで企業が「即・採用」をするなんて事はありません。 高校生の段階では、TOEICなどの語学検定については、もし受験できるなら、視野を広げるような目的で検定を受けるのが良いでしょう。 == 英語の検定教科書にある時事や古典文学の勉強は不要だし、危険 == 中学高校の英語の検定教科書には、他の教科では説明しづらい時事や古典文学、最近の日本のアニメやマンガの、海外での人気について、英文で紹介されたりするかもしれません。 そもそも、本来の目的は英語を学ぶということなので、これらの題材で得た知識がそのまま大学受験に役に立つということはありません。 [[カテゴリ:英語]] scsz5hnfmsxrfwqxh4n4mwuv2mlew16 246691 246690 2024-04-14T07:58:29Z すじにくシチュー 12058 /* 英単語集のパターン */ 1990年代後半や2010年までは「ゆとり教育」などと教育用語では言われますが、しかし受験英語など、一部の科目の難関大の英語は、今よりも難しい面もあるので、勘違いしないように注意が必要です。 wikitext text/x-wiki == 「高等学校外国語」は実質的に英語 == 文科省の指導要領では、教科名は「外国語」です。 しかし、科目名は「英語コミュニケーション」とか「論理・表現」とか、英語の科目しかありません。「論理・表現」科目の内容も、英語の学習です。 なお、一部の高校で第二外国語を開講していますが、その高校でも英語が必履修です。そもそも高校卒業の要件として、英語の単位を一定以上取得しないと、高校卒業の資格を取得できないはずです。 また、高卒認定試験でも、外国語科目では英語が必修です。 第二外国語を学ぶにせよ英語に専念するにせよ、どちらにせよ、高校生は英語を勉強する必要があります。 ;第二外国語の授業の現状について 大学受験では、いちおうは、文学部の仏文科とか独文科や、語学系の学部のフランス語学科とかの入試で、大学によってはフランス語やドイツ語などの第二外国語も入試も出る大学もあります(高校入試とは違い、大学入試では一部の大学では第二外国語でも受験できます)。しかし第二外国語の学習は検定教科書以外で自習などをする事になります。 フランス語とかドイツ語とかの検定教科書は、存在を聞いたことがありません(つまり、フランス語などの検定教科書は無いはず)。少なくともフランス語の検定教科書は存在しません<ref>pdf [https://konan-wu.repo.nii.ac.jp/?action=repository_uri&item_id=1159&file_id=22&file_no=1 前田美樹 著『高校でのフランス語教育: 現状報告 - 授業の活性化と発展に向けて,2011年3月, P35 ] 2023年10月5日に確認.</ref><ref>[https://www.jactfl.or.jp/wdps/wp-content/uploads/2020/03/JACTFL2_87-100.pdf 長谷川由起子 著『高等学校第二外国語必修化提言実現に伴う課題』,2014 , P92]</ref>。もし高校生向けのフランス語などの教材を教科書会社が出版・販売していたとしても、それは検定教科書ではありません。 なお、第二外国語の授業のある高校でのその授業の教材は、大学生向けの教材を用いたり、あるいはその高校独自の教材を用いたりしています。 ;第二外国語の大学受験について 大学入試共通試験(旧センター試験)の科目に、フランス語とドイツ語と中国語と韓国語もあります。語学系の学部・学科など、ごく一部の学科でなら、共通試験のフランス語なども使える場合もあ、そのような大学の学科なら一般入試でも使える可能性もあります。ですが、その他の多くの大学では、第二外国語ではなく英語を受験科目の外国語としては要求しています。 なお、一部の高校ではスペイン語とロシア語とアラビア語の科目もあり高校卒業のための単位として文科省により認められていますが、しかし大学入試共通試験(センター試験)の科目にはスペイン語などは存在していません。このように、高校の単位として日本国に認められていても大学入試共通試験にない科目もあります。 == IPA(国際音声記号)を学ぼう == IPA(International Phonetic Alphabet, 国際音声記号)とは世界中の言語の発音を表記できるように開発された記号である。これが、英語の単語を発音する際、重要であることは明白であろう。日本には、「英語には日本語にはない音が存在する」「英語は発音が大事」などと声高に叫ぶが、どうやってその音を調音するかという肝要なことは教えていない高校も存在するようだ。しかし、調音方法を知らずに第一言語に存在しない音を発音しろというのは不可能と言っていい。IPAを学ぶ際には必然的に音声の調音方法を体系的に学ぶことになる。したがって、フィーリングではなく理論に基づいた音声の発音が可能となる。 * [http://www.coelang.tufs.ac.jp/ipa/index.php IPAモジュール] * [[w:子音|子音]] * [[w:調音部位|調音部位]] * [[w:調音方法|調音方法]] * [[w:母音|母音]] * [[w:国際音声記号|国際音声記号]] * [[wikipedia:IPA_vowel_chart_with_audio|母音のIPAとその発音]] * [[wikipedia:IPA_pulmonic_consonant_chart_with_audio|子音のIPAとその発音]] * [[w:英語学#%E9%9F%B3%E5%A3%B0%E3%83%BB%E9%9F%B3%E9%9F%BB%E5%AD%A6|英語の音素]] == 参考書と辞書と単語集が基本 == 高校英語の検定教科書は授業で教師が解説するのを前提にしているため独学用には作られていなません。 なので、予習復習や独学や受験準備などは教科書では無理です。なので、受験準備などのために教科書とは別に高校レベルの参考書や単語集が必要ですので、早めに購入しておきましょう。 たぶん、普通の高校なら、単語集なども購入させられると思います。もし学校で購入を指定されていなくても、まずは高校基礎と高校中級レベルの単語集を購入しましょう。 実際の検定教科書を見てみると、高校1年向けの検定教科書で、もう高校3年向けの4500語レベルの単語集にある単語が紹介されていることもあります。 とはいえ、さすがに高校1年で4500語レベルまで習得するのは困難です。 そこで普段の家庭などでの勉強では3000語レベルまでを勉強しておいて、検定教科書を読んでて単語集で見当たらない語があれば、そこだけ辞書に頼るのがラクでしょう。ただし既に単語帳で覚えた単語も用法が不明瞭ならば辞書を引くと良いであろう。単語帳は意味は載っているものの、用法は詳しく載っていないことが多いからである。また、少しは辞書の使い方も練習すべきです。 ともかく、高校では単語集がないと、まともに英語を勉強できないだろうと思います 検定教科書は入試対策本ではないので、大学受験を考えている人は、英語の勉強では検定教科書ばかりに深入りしすぎてはいけません。 ともかく、大学受験対策は、あくまで市販の参考書と辞書と単語集などで行います。 == 大学入試に出づらい分野など == === 教科書の学習目標を真に受けないように === 高校英語の学習指導要領などが掲げている目標の中には、高校生には荷が重い目標もあります。 検定教科書の英語表現IIの実物を見比べると、どうも英語でのプレゼンテーションなどが指導要領などで目標に掲げられているようですが、しかし正直、高校生には英語プレゼンテーションは荷が重いでしょう。英語以外の教科の学習を考えると、高校段階では外国語でのプレゼンテーションの習得は非現実的です。 高校英語のプレゼンテーション単元も、中学英語の留学生との会話の単元などと同じで、実際の多くの高校の教育現場ではそれを実行できる場面はまずないかと思います。 2022年の時点では、文科省の英語教育の目標が、かなり高負担な内容ですので、大学入試の傾向とは検定教科書の傾向は、差が大きいかと思います。 昔から教科書と受験英語との間には差がありましたが、とくに近年、上述のように教育目標の負担増の理由で、入試との差異が大きくなっているだろうと思います。なので大学受験を考える人は、教科書の勉強だけでなく、うまく学習スケジュールを自己管理する必要があるでしょう。 === 自己意見の英作文は入試に出ないところもある === 足きりのある大学(たとえば国立大や医学部など)でないかぎり、採点の手間があるので一般入試では数十語もある英作文は出されない可能性が高い、実態があります。 さて、昨今の教科書では、日本のことを英語で説明する課題がよくあります。検定教科書にあるので、いちおうは新共通試験などの出題範囲ではあるわけですが、やはりこれも大学入試の出題傾向の兼ね合いを考える必要があります。 難関大学の入試で要求される単語は、抽象性の高い単語、または学術的な単語などです。 === スピーキング === 英語スピーキングは、大学入試では採点の手間があるので、一般入試ではスピーチの実施はされない。もし入試でスピーチングをやるとしたら、せいぜい、受験者数が比較的に少人数に限られる推薦入試でしょう。 また、英検3級以上ではスピーングの試験がある。英検などの英語系資格を取っておくと入試でいくらか優遇される場合があるので、そういったものを使いたい人にはスピーキングの勉強をする必要がある。 == 教科書ガイドを購入するほうがいい場合 == 教科書ガイドを買わなくても高校英語は勉強できるのですが、色々な理由により、教科書ガイドがあると効率的です。 英語教師のなかには低能な教員もいて、宿題などで、数学など他教科の予習復習の時間を無視して、毎週のように「辞書で教科書の英文の意味を調べてこい」などと、英語科目の事しか考えずに宿題を出す人がいます。 特に英語は、文系大学の志望でも理系大学の志望でも活用するため、教師がうぬぼれていて傲慢な場合があります。 このような英語教師の場合、もし教科書ガイドがあれば、辞書で調べる時間を、大幅に減らせることができます。教科書ガイドによって、空いた時間を活用することができ、単語の練習など、より本質的な勉強ができるようになります。 ただし、ガイドには、あまり細かい答えまで書いてありません。中学までの教科書ガイドとは違います。 == 英語勉強法マニアにならないように == ここに描かれた勉強法を覚えるよりも、まずは、とにかく、3000語レベルまでは英単語の習得のほうが重要です。勉強法マニアになっても、語学では価値がありません。勉強法を調べるよりも、実際に勉強してください。 とくに英語教育についての評論では、多くの評論家が英語教育を評論したがるし、また市販の英語教材などでも英語教育のノウハウをうたっている商品も多いですし、中には英語が苦手なのにウサンくさい勉強法(自称)を掲げる人も多くいるので、あまり勉強法そのものに深入りしないようにしてください。 勉強法に迷ったときにだけ、市販の参考書などに書かれた信頼できる勉強法などを参考にしてください。 == 単語 == まず、単語数3000語あたりの中級レベルを謡っている英単語集を1冊買いましょう。 初級レベル 1700~1800あたりのものは、これは一応高校レベルの単語も紹介していますが、ほとんどの単語が中学レベルなので、当面は読む必要がありません。 また、初級レベルの単語集のうち、中学で習わない可能性の高い単語は、中級レベルの単語集にも書いてあるので、わざわざ初級レベルを買う必要がありません。 さて、単語集の使い方は、赤シートを使って英単語の和訳を隠して、英単語のイメージを思い浮かべてから、その英単語の和訳を見て自分が思い浮かべたイメージと合致するか確認してみたりして、もし合致していたら次の単語へ、一方もし合致していなかったらチェックをして次の単語のテストを行う。これを1~2回もすれば英単語を覚えています。 中学単語については、意味のほうで中学では習わなかった意味がある可能性があるかもしれないので、そちらに注目してください。参考書をつくっている会社は、そうなるように工夫して参考書を編集しています。 === 学習の優先順位 === もしかしたら、英語の単語を覚える作業は文法等の勉強をすることよりも大切なことかもしれません。 市販の学習ノウハウ本でも、高校英語および大学受験英語では、英単語力が決め手になると主張されています<ref>船登惟希 『改訂版 高校一冊目の参考書』、KADOKAWA、2019年3月18日120ページ</ref>。 英文読解で、もし単語の意味が分からないと、せっかく文法の知識があっても、理解できない文も大学入試では多くあります。また大学入試では、暗記を要求される単語数が、ずいぶんと多くなります。 もっと言えば、単語という基礎があってこそ覚えた文の組み立て方が生きてくるのです 大学受験の標準(おおむね4500語レベル)~やや発展レベルまでの単語であれば、単語はいくら覚えても損はありません。学校で教えてもらう英単語だけで満足しないでください。近年では様々な出版社から英単語帳が出ています。 === 英単語集の選び方 === ==== 基本の要求事項 ==== ===== セットになる別単語も必要 ===== 高校レベルでは、新しい単語の意味を覚えるときは、単語の日本語の訳の字面だけを覚えても不十分です。 いくつかの予備校の単語集には英単語の勉強法も書かれており、どれを見ても大抵、「新しい単語の学習では、一緒につかう単語とセットで覚えろ」といった内容が書かれています。 動詞も同様、セットになる名詞と一緒に練習するべきです。もっとも、普通の市販の単語集なら、そういうセットになる単語も書かれているので、市販の単語集で勉強すれば問題ありません。 進出単語がセットでなくても覚えられるのは、せいぜい中学の前半までです。高校ではもう、単語を1語ずつ単独でバラバラに勉強するのは、やめましょう。 しかし、ネット上の英語勉強サイトには、サイト作者・企業の手抜きからか、日本語の訳だけを羅列したような低品質なサイトもあります。まったくネットは参考になりません。きちんと市販の単語集を買いましょう。 ===== 類義語や対義語、例文など必須 ===== まず、単語の学習では、けっしてヤミクモに多くの単語を覚えるのではなく、類義語や対義語との違いなども把握しなければなりません。そのため、例文なども交えつつ把握しながら勉強する必要があります。 なので、例文などの少ない単語集は、少なくとも高校基礎レベルとしてはアウトです。 ==== 結局どうすればいいか ==== 高校生向けの参考書は、セット語彙や類義語・対義語の紹介の必要性など、そういう事をきちんと理解しているので、とりあえず高校生むけの単語集を買えばとくに問題はないのです。 しかし、高校生向けではない市販の英検対策やTOEFL対策本などの資格本の中には、単語を多く掲載したいあまりに、例文や類義語などを省略ぎみの単語集も(英検対策本などでは)多くあります。 なので高校生は、英検対策ではなく、まずは高校生向けの単語集を買いましょう。1社の単語集しか使わないと例文がどうしても不足するので、少なくとも4500語レベル付近では1社だけでなく2社以上が必要です。 ==== 英検などは後回し ==== 現代では、高校の教科書レベル自体、上がっています。昭和の後半や平成の初期は、今で言う3000語レベルが、高校卒業レベルでした。 しかし、令和の今では、4500語レベルが、高校卒業レベルです。 なので本来なら、時代が大きく違えば、英検の級の数値は比較の参考になりません。つまり、年月とともに資格試験で保証された知識は、少しずつ錆びていくのです。 英検などを受けたいなら、高校生向けの単語集を買って習得したあとなら、必要に応じて英検対策本などを買うのは構いませんが、しかしいきなり最初から英検対策本などを買うのは失敗の道です。 なお、もし英検を参考にするなら、準1級までを買えば十分でしょう。 なぜなら、難関大の過去問から構成される桐原5500と英検1級の単語集とを比べてみましたが、傾向がだいぶ違っています。 ==== 英単語集のパターン ==== 英単語集には、主に2パターンあって、 :・ パターン1: 単語を分野別にまとめているパターン(たとえば「旅行」の意味の単語なら、trip と tour と travel をひとつのページにまとめていたりする)の英単語集 と、 :・ パターン2: もうひとつのパターンとして、入試出題の頻度順に統計的に並べた英単語集 があります。 初めて高校英語を勉強する場合は、とりあえず、'''分野別に単語をまとめたパターンの参考書のほうが、使いやすい'''と思います。 なぜなら、分野別の単語集のほうが、類義語や対義語なども、まとめて勉強できるからです。 いっぽう、入試出題の頻度順に統計的に並べた単語集は、高校後半~高校3年からの仕上げなどで用いるのが効果的でしょう。 さて、分野別に単語をまとめたパターンの英単語集で勉強する場合は、レベルが「中学3年〜高校初期」「高校必修」「共通テスト」「二次試験」と何段階に分かれていたりしますが、とりあえず、高校1年の時点で、「高校必修」レベル(3000語レベル)と「共通テスト」レベル(4500語レベル付近)の2冊を買ってしまってください。 高校必修レベルの単語集を買えば、その単語集で中学レベルの復習もしますので、わざわざ中学レベルの復習をふくむ単語集を買う必要はないのです。 自分で単語集を予習する際は、次のペースで予習します。「全部覚える」ではなく「全部勉強する」がポイントです。 :・ 高校1年: 「高校必修」レベル(3000語レベル)〜「センター試験」レベル(4500語レベル付近)の単語を高校1年の終わりまでに全部勉強する。 :・ 高校2年: 「センター試験」レベル(4500語レベル)の単語を高校2年の終わりまでに全部勉強する。 :・ 高校3年: 「二次試験」レベル(4500語レベル+アルファ)の単語を高校3年の2学期の終わりくらいまでに全部勉強する。 これとは別に単語集がもう少し必要ですが(入試用単語集を1~2冊)、まずは上記を出来るようになってください。 注意点として、学校から配布されるような東京書籍や桐原の基本的な単語集は(ただし桐原の灰色のヤツは難関大用なのでのぞく)、高校2年のうちに終わらせる必要があります。 つまり、高校1年のあいだに、予習をして、「高校必修」(3000語レベル)およびレベルの単語集を、ひととおり書き写して、勉強してしまう必要があります。(覚えられるかどうかは別として。) 4500レベルまでいければ理想ですが、それが無理でも必ず高校1年のあいだに3000レベルを終わらせてください。「終わらせる」とは「7割ほど覚える」という意味です(英語以外の教科も考えて、この数字)。これが終わらせられないと、大学受験の現役合格は難しいでしょう。一見するとハイペースですが、実は後述のように中学で習う単語が3000レベルには多いので、意外とラクです。 また、「全部覚える」ではなく「全部勉強する」とありますが、その単語の100%の単語を覚えられなくても70%を覚えたら、次学年の単語集を1回だけ全単語を学び始めてください(たとえ新単語を1回の書き取りで1周しただけでは30%しか覚えられなくても、もし新単語に1000語も触れたら合計300語を覚えられるから、そっちのほうが最初は効率的だからです)。 この、最初に1冊の書き取りをさらっとする勉強法は、他教科たとえば数学では通じない勉強法かもしれません。数学では公式だけでなく応用力なども問われるからです。しかし英単語はそういうのではなく、ほぼ単なる暗記なので(米英なら幼児・児童でも分かる程度の理解力で十分)、なので単語集をさっさと1冊、一周したほうが効率的に覚えられるのです。 さて、いまの単語集を7割ほど習得したら、次学年用の新単語集を購入して1回書き取りだけで一周しつつ、並行(へいこう)して、現学年用の単語集の完成度を上げていき100%に近づけていきます。 特に、高校2年用の単語集は、入試でも基本的な運用力を問う問題として狙われやすいので、それも押さえておきましょう。裏を返すと高校1年用の単語集は、これは例外的に高校受験で狙われやすいもの以外は深入りしなくても良いでしょう。 高校必修レベル(高校1年レベル)には、中学校できちんと5教科を勉強していれば、読みがある程度は身についているハズの単語が、多いのです。 なので、さっさと高校必修レベルをひととおり練習して終わらせてしまい、次ステップの「センター試験」レベルに時間を掛けたほうが得です。 なお、高校によっては、高校3年になっても「センター試験」レベルの単語集までしか、高校3年の英語の授業では扱わない場合があります。 なので、'''授業とは別に、自分で単語集を予習する必要があります'''。 では、なぜ、上記のスケジュール(「高校必修」レベルの単語を高校1年の終わりまでに全部勉強するスケジュール)のようにするのが合理的かいうと、最終的に高校卒業までに(つまり高校3年の終わりまでに)、「二次試験」レベルの単語集(4,500語+アルファ)を終わらせる必要があるので、そこから逆算して、高校2年の終わりまでに「センター試験」レベルの単語集を終わらせる必要があります。 なお、新共通テスト・旧センター単語とは別の大学受験単語の傾向では、早稲田大など一部の難関大と、国公立との傾向が違います。(wiki追記: 例外として東京外語大(国立)や英文科などを除けば、)平均的な地方国立大よりも早稲田大のほうが英単語が難しいです<ref>[https://www.youtube.com/watch?v=E-U8m3en_E0 『英単語暗記必勝法!今こそ苦手を克服せよ!』 2022/12/13 ]</ref>。理系の人は、そういう早稲田みたいな難関大の英単語を相手にしてはいけないというか、仮に購入したとしても、けっしてその難関大用の単語集の全単語を覚えようとしてはいけません。 {{コラム|5000語レベル以上の単語集は真に受けないように| 難関私大の6000語レベル以上ありそうな英語は、そもそも正しい英語なのか、疑問もあります。20世紀の話ですが、1990年代に売れた書籍『超勉強法』によると、英文科のある大学教授が欧米に留学したら、自身の英語が欧米人には通じなかった、というエピソードが紹介されています。(『超勉強法』著者の野口悠紀雄(のぐち ゆきお)のことではない。野口が聞いた、ほかの大学教授の話。)そもそも1990年代以前の昭和の英文科の大学教授がこのような惨状なので、あまり古い1990年代~2001年ごろを初版とする単語集にある難しすぎる単語は、たとえ有名大学で出題された過去がある単語および例文でも、あまり真に受けてはいけません。 英語の教科の場合、入試問題は、たとえ大学教授が作成しているからって、それだけでは問題の質を信用してはいけません。おそらく、20世紀の大学受験英語では、実用例を無視した、あまりに難しい言い回しの英文が出題されていた時代も過去にはあったのでしょう(あくまで難関私大の話です。平均的な偏差値の私大の話ではありません)。 難単語は、複数の大学で出題されるなどして、ようやく、まあ勉強する価値のありそうな単語です。とはいえ、いくつも各大学の過去問集を見ることは無理なので、そこで難関大むけの単語集で、近年に改訂・出版された5000語レベル以上ありそうな単語集を複数社、読むことになるでしょうか。 このように、4500語レベルの終盤までと、それ以降の5000語レベル以上とでは、単語の勉強法を微妙に変える必要があります。 1990年代後半や2010年までは「ゆとり教育」などと教育用語では言われますが、しかし受験英語など、一部の科目の難関大の英語は、今よりも難しい面もあるので、勘違いしないように注意が必要です。 }} さて、高校2年の終わりまでに、4500レベルつまり「センター試験」レベルの単語集を終わらせるためには、逆算すれば、高校1年の終わりまでに3000レベルの「高校必修」レベルの単語集を、勉強してしまう必要があることが分かります。 そうするためには、普段からの予習も必要です。 また、もし「今読んでいる章を完全に覚えてから、次の章に進む」などというふうに勉強していると、特定の分野の単語ばかりを覚えることになってしまい、入試に対応できません。特に、学校で、このような分野別にまとめられた英単語を用いている場合に、気をつけましょう。 また、現代の高校英語の単語の紹介順序は、もはや学年別になっていません。高校1年の検定教科書でも、すでに3000語レベルの単語や4500語レベルの単語も平気で紹介したりしています。 現代の検定教科書がそうだということは、現代の入試もそうだという可能性があるということです。なので、あまり単語集の最初のほうばかりに詳しくなっても、現代ではあまりメリットがありません。 また、予習をしないと、たとえば学習ペースの配分ミスを起かしやすく、たとえば高校3年の終わりごろになって、やっと桐原4500語・東京書籍4500語レベルにしか到達できずに、そのため高校3年終わりの時点では「二次試験」レベルに対応したプラスアルファの単語集(旺文社や、予備校系の単語集)に到達できずに、志望校に不合格になってしまうような、ペース配分の失敗を起こしやすい原因にも、なります。 なので、とにかく、予習をして、単語集の先のほうへと進んでいくのが、合理的な勉強法なのです。 ==== 予備校系パターン ==== 単語集にはさらに、「論理性重視で解説が多めの単語集」と「単語が多めの単語集」があります。 で、桐原・東京書籍・旺文社は、実は単語が多めの単語集です。 高校単語の範囲は広いので、少なくとも4500語レベルについては、まずこの3冊のうちの2冊が、受験までに、ほぼ必須で必要です。 しかしこれだけだと、論理的な知識が不足します。桐原などの単語数が多めの単語集などでは、スペース不足などの都合で解説できない知識が、いくつもあるのです。 そういうのを、予備校などの補足的な単語集で補う必要があるのです。だからもう高校2年の半ばあたりから、予備校系の単語集も読み始めてしまうのも、良いかもしれません。 ですが、あくまで予備校単語集「も」です。基本はまず、桐原・東京書籍・旺文社のような、高校英語を一通りカバーしている単語集をベースにするべきでしょう。 ==== 2社目の単語集が必要 ==== 単語集は、1社だけでは対応できません。たとえば東京書籍を使っている場合、東京書籍の単語集には例文が書いてある用法でも、桐原の単語集には例文が書いてない用法もあります(例文なしで意味紹介のみ、という場合がよくある)。同様、桐原の単語集にはあるのに東京書籍にない用法もあります。 この問題に対応するため、高校2年になってからは、たとえば東京書籍を使っているなら、もう一つ別の会社の単語集'''も'''使いましょう。何を使うかは、個人の判断に任せます。しかし、何を使おうが、1社だけでは太刀打ちできません。(昭和の昔なら、ここまで考えなくても大丈夫でした。まだ高校2年生は、昭和なら単語集は1社だけでオッケーだった。しかし令和だと事情が違います。) 実際、塾・予備校などでも、高校で良く買わされる単語集(東京書籍や桐原)とは別の単語集・熟語集をもう1社ぶん買い与えるのが基本であり、受験生は結局、2社の単語集・熟語集を使うことになります。別に東京書籍・桐原のもう一方でなくとも、予備校系の単語集でも良いし、あるいは旺文社ターゲットなどでも構いません。とにかくもう1社ぶん、必要です。 別に2社の単語集を読み比べる必要はありません。新聞のメディアリテラシーの練習とかじゃないので。、 また、一応、単語集のレベルに応じて、上級レベルの単語帳で、過去に下級レベル単語集で習った単語の新しい別用法を教えることもよくあります。なので、東京書籍でも桐原でも、まずは1社ぶんを全部やるのも必要です。どちらかをメインにすると決めたほうが良いでしょう。 高校1年レベルの単語集(3000語以下)はもう1社目では仮に省くとしても(なお、省かずに1周しても構いません)、それでも高校2年次以降の単語集で、もう1社ぶんが必要になってしまいます。このため、どうあがいても単語集だけで最低もう2冊は(2年生の4500語レベル単語集と、やや難関大用の単語集で、合計2冊)、これが平均的な私大に一般受験するのでも必要です。 昭和の昔なら1冊だけで十分だったかもしれませんが、しかし令和は入試の単語が増えたので、そういうわけにも行かなくなりました。 また、上記と関連して、新共通テストも3000語レベルとされていますが、実際には4500語レベルの単語も新共通テストに出てくると思われます。なぜなら上述のように、3000語レベルと4500語レベルの単語に明瞭な境界線は無いからです(さすがに5500語レベルとか7000語レベルとかを要求する事は新共通テストでは出題が無いというだけです)。少なくとも20001年ごろの旧センター試験の時代、学校で渡された3000語レベルの単語集をこなしていてもセンター対応できない受験失敗例もよく聞かれました。(当時、センター試験の出題傾向について上述のような問題が知られていなかったので、進学校でも今でいう3000語レベルしか対応しない高校もよくあった。) :※ なお、説明の都合上、2001年ごろについても「3000語」レベルとか言いましたが、実際には単語数の算出基準が変わっており、現在の単語数の数え方には一致しません。 === 単語の練習法 === かといって、いきなり高校1年で入試対策レベルの単語集を使っても効率が悪いので、まずは基礎レベルの単語から始めるのが良いでしょう。 読解練習や文法練習よりも先に、単語力を増やす練習が大事です。熟語集の暗記よりも先に単語集あるいは単語・熟語集の暗記を優先してください。 英単語を勉強する際、まず最初は、なるべく早く、その単語集の全体の単語と例文を書き終えます。もちろん、それだけでは全部の単語は覚えられませんが、そのほうが次の理屈で効率が良いです<ref>[https://www.youtube.com/watch?v=E-U8m3en_E0 『英単語暗記必勝法!今こそ苦手を克服せよ!』 2022/12/13 ]</ref>。 たとえば1000語ある単語帳を2週間ですべて単語と例文をそれぞれ1回だけ書き写したとしましょう(実際は他教科もあるので無理かもしれないが置いとく)。 たとえ3割しか覚えられなくても、なんと計算上、300語もの単語(=1000×0.3)をたった2週間で覚えられます。たった1周するだけで良いのです。というか、むしろ、けっして3回や5回も書き写すのではなく、最初はたった1回のほうが良いのです。 もしこれを同じ期間に100個だけ限定して熱心に難度も読み書きして覚える方法をすると、たとえ仮に100%覚えたと仮定しても、計算上は100語までしか覚えられません。まして実際には100%は無理でしょうから、よくて80%を覚えて、80語ていどでしょうか。 よって、先に単語集の単語を、たとえ覚えられなくても良いので、全部の単語を書き写すほうが効率が良いのです。 じっくりと何度も読み書きをして確実に覚えるのは、そのあとからです。 入試の現状で、どの教科も覚えることが増えて時間が無いのに、英語では多くの単語を覚えないといけないので、こういう工夫が必要です<ref>[https://www.youtube.com/watch?v=E-U8m3en_E0 『英単語暗記必勝法!今こそ苦手を克服せよ!』 2022/12/13 ]</ref>。 また、参考サイトには書いてないですが、とにかく早めに単語を学ばないと、いつまで経っても英文読解の勉強を始められません。よって、高校入学後の割と早い時期や、および高校2年の初めごろに、まずは、それぞれの学年にあった単語集の単語を一通り通読する必要があります。 高校や塾などの小テストで週に50語~100語とか覚えるのは、それはそれでヤレバいいのですが、それとは別に、単語帳を1周、ぜんぶ早めに書き写すのです。 大学入試では、高校入試と違って、国公立の大学ですら、理系の高校生などを無視した、教科書レベルをやや超えた難単語を平気で入試に出してきます。このため、とにかく上記のような工夫が必要です。 標準レベルの3000語レベルの単語が高校2年あたりでひととおり終わったあたりから、桐原・東京書籍の4,500語に加えて予備校など受験対応の単語集も買って練習します。まだ、平均レベルの単語集を覚え切れて無くても構わないので、受験レベル(4500~5500)の単語集を勉強します。 学生・受験生の勉強科目は、数学など、英語科目以外にもあるので、大変でしょう。ですが、うまくスケジュールを工夫して時間を作ってください。 さらに単語を定着させるためには、英文読解やリスニングなどの単語以外の他の練習もします。 === 単語集のレベル別の利用法 === ==== 初級レベル(1700~1800語)はまず不要 ==== 中学できちんと勉強してきた人なら、初級レベル(1800語)レベルの 単語集には、高校生には不要です。これは、どちらかというと中学3年~高校受験用のものです。 普通に受験勉強をしてきて偏差値48以上ぐらいの人なら、1800語レベルは買う必要はありません、。 本屋で表紙を見ると「高校基礎レベル」とか書いてあるかもしれませんが、ウソではないですが誤解を招く表現です。表紙の宣伝文句は信用しないでおくのが安全です。 この1700~1800語レベルは、おおむね英検3級レベルか、それに毛の生えた程度です。英検3級と英検準2級との間には、かなり難度の開きがあるので、このレベルの教材は英検教材コーナーにはないので、これはこれで1700~1800語レベルは出版・販売されてると便利です。 この1700~1800レベルの後半を見ると、中学で習わない単語も書いてありますが、しかしそれを買わなくても3000語レベルにも同様の単語が書いてあります。 たとえばある1700レベルの単語集で injure (けがをする)という単語を見つけましたが、同じ出版社の 3000語レベルでも同じ単語がありました。 わざわざ初級レベルの単語集で練習しなくても、中級(3000語レベル)の練習での例文の書き取りなどのついでに、自然と初級レベルの単語のスペルも身についていきます なお、初級レベル(1700~1800)の単語集の中に書いてある「高校1年 基礎レベル」みたいな難度の情報は、あまり信用してはいけません。(実際に買ってみて読んで確認しました。)ある単語集でそのレベルの単語を確認したら、いくつも中学レベルの単語がありました。 year (年)とか month (月)とかの中学で習ったはずの単語が、「高校1年 基礎レベル」になっていました。 どうしても1700~1800語レベルを活用するなら、どっちかというと単語練習よりも、高校受験のレベル確認用と言うか、「高校受験の終わり~遅くとも高校1年の1学期の終わりまでには、大体この程度の単語は出来るようになって欲しい」といった確認のためのツールでしょうか。 ==== 3000語レベル ==== ===== 基本 ===== 特別な事情がないかぎり、高校生は3000語レベルから単語集を勉強すると良いでしょう。 いきなり3000語を使うのは中学と高校の橋渡しに不安かもしれませんが、しかし出版社側が3000語レベル本の冒頭の第1章で、中学単語の復習およびそれを高校の視点で理解しなおす勉強をしてあります。桐原と東京書籍のどちらとも3000語レベルの本の第1章は、そういう中高の橋渡しのための単語の紹介です。 逆に、4500語レベルの本には、そういう橋渡しが書いてないので、高校1年では4500語レベルは不適切です。 * スペル暗記の対象について スペルの暗記について、実は中級の単語であっても、すべてを暗記する必要はないし、すべてのスペル暗記は面倒です。優先して覚えるべき単語は、知的レベルの高い単語です。 また、東京書籍『コーパス』シリーズの単語集の前書きを見てみると、実は3000語レベルは「受信語彙」としており、つまりリーディング用の語彙にすぎず、受験の英作文などでは高校新出単語の多くは基本的に用いないことを想定しています。 受験では短時間に英文を書かないといけないので、中学レベルに毛の生えた単語力に、若干の高校中級レベルの単語を加えて、それで英作文を完成させれば十分なのです。もちろんビジネスの仕事の英文とは違いますが、そういう実務の英作文はそういう専門家の大人にまかせればいいのであり、高校生には関係ないです。 東京書籍の意見ではないですが、具体的に単語例を挙げて説明するなら、たとえば respond「応答する」 と nod 「うなづく」だったら、respondのほうを優先してスペルを覚えなければなりません。 なぜなら、respond のほうが名詞形の response などもあり、応用が多く、意味も広範であり英作文などで使わざるを得ない可能性が高いからです。一方で nod のほうの用途は、誰かがうなづく場面どまりです。また、ノッドの名詞形や形容詞形はないと思います。 また、nod はビジネス英語などでも agree 「賛成する」で言い換え可能です。入試の英作文ですら、ほとんどの場合は agree で十分でしょう。 この nod のように、利用価値の低い単語は、スペル暗記は後回しです。せいぜいリーディング用に「そういう単語もあるんだなあ・・・」と知っていれば十分です。 実は中堅私大や地方国立の英文の単語は、学科によっては案外センター試験ほど難しくない場合もあります。 さて、残念なことに、高校の単語集あたりから、だんだんと英語教育の質が形骸化しており、単語集がやみくもに単語数を多く紹介したいあまりに説明不足になってきています。 たとえば中級単語で content (満足する)という形容詞があるのですが、じゃあ satisfied (満足する)とどう違うのかは、単語集には書いていません。なぜならcontent は中級レベル、satisfied は初級レベルの単語なので、本を別冊にまたいでしまうからです。こういう縦割り教育なのが現状です。 辞書で content を調べるような思慮深い人は、他の単語を覚える勉強時間が不足してしまうので入試では不利になってしまうわけです。ひどいもんです。 * 2冊買うべきかどうか 3000語レベルの単語集(桐原『データベース3000』や東京書籍『コーパス3000』)については、2冊そろえるべきか1冊に集中すべきか、判断が分かれるでしょう。実際に各自が単語集を読んでみて判断してください。べつに2冊あっても構いませんし便利ですが、他の教科の勉強などもあるので、難しいところです。 旺文社の『英単語ターゲット1200』も、中級レベルでしょう。 あるいは、2冊そろえれば例文の数が単純計算で2倍になるので、辞書でいちいち高校レベルの例文を探す手間が減りますので、2冊目の単語集にはそういう活用法もあるかもしれません。あるいは、問題練習とかの手間を2冊目の単語集で減らせるかもしれません。 このように2冊目の単語集は便利かもしれませんが、しかし目的が上級レベル(4500~5500語)と中級レベル(3000語)では違います。 まあ各自がどうするか判断してください。 なお、東京書籍『コーパス3000』は、数字だけ見れば桐原『データベース3000』と同じですが、しかし東京書籍のほうで3000語レベルのもの(たとえばinjure)が桐原の4500語レベルに書いてあったり、あるいは別の単語ではその逆で桐原3000レベルの単語が東京書籍4500語に書いてあったりと、あまり分類は明確ではありません。 ===== 3000語の語法は初めは深追いするな ===== 偏差値の低め~平均程度の大学のなかには、4500語レベルの単語をあまり出さない代わりに、3000語レベルの範囲の単語で、やたらと細かい語法を要求する問題もあります。 しかし、4500語レベルや5500語レベルも勉強する一方で、いつまでも3000語の語法ばかりを覚え続けるわけにもいきません。 だから勉強法としては、極端なことを言えば、3000語の語法を熱心に練習するよりも先に、まず4500語レベルの単語集で一通り、単語の訳を暗記したほうがマシです。 実際、入試問題にも、そういう傾向もあります。 文系私大の偏差値50前後の平均的な大学が3000語レベルの細かい語法を4択問題などで聞いてくる一方で、文系私大の偏差値60くらいの大学のある出題が、4500語レベルで単語の和訳の丸暗記だけで4択問題が解けてしまう、といったような出題事例も少なからずあります。 ==== 上級レベル(4500~5500)の単語集について ==== ===== 原則 ===== もし大学受験を目指しているなら、高校3年くらいになったら、4500語+アルファの単語集にステップアップします。ここでいうアルファは、予備校などの出している、補足的な単語集です。 いっぽう、桐原の5500語レベルの単語集は、あれは志望校などの傾向の確認用などで、辞書的に使うものです。 桐原5500をメインにするべきではありません。桐原4500語または東京書籍4500語を一通りクリアしたのなら、メインの単語集としては旺文社1900または予備校系の単語集に入るべきです。 5500語レベルの単語集の使い方なのですが、かなり難しいです。ここでいう5500語レベルとは、桐原『データベース5500』を想定しています。 旺文社の(1200ではなく)『英単語ターゲット1900』は、実はやや高レベルです。東京書籍4500・桐原4500にはない単語でも、旺文社1900には記述されていることもあります。なお、それらの単語の元ネタは、受験過去問もありますが、じつは英検2級~準1級あたりです。 旺文社のは、数字の小ささにダマされてはいけません。桐原や東京書籍の数字とは、旺文社の数字は意味が違います。 桐原4500はその装丁の厳めしさなどに比べて、実はやや単語のレベルは控えめです。東京書籍も桐原のスタイルを踏襲しているような所があり、やや控えめのレベルです。 だから旺文社は、派生語などで、桐原・東京書籍が紹介してない単語をポンポンとたくさん紹介しています。 このため、現代でも勉強法としては、「まずは高校2年の終わりまでに東京書籍または桐原の出している高校用参考集をベースに勉強。高校3年あたりで旺文社のレベル高めの単語集を買い足して勉強する」といった感じになるでしょうか。 4500語レベル単語集では、桐原と東京書籍のどちらの単語集でも不足です。なぜなら、単語集1冊だけでは、例文不足かつ解説不足により、あまり役立ちません。なので少なくとも上級レベルだけ、出版社を変えて2冊、必要でしょう。東京書籍4500+旺文社1900にするか、それとも桐原4500+旺文社1900にするか、判断は読者に任せます。 具体的に単語をあげて説明すると、たとえば「限定する」という意味のrestrict と confine、ともに似たような意味ですが、単語集には意味の細かい違いは書いていないか、書かれていても強調されていません。 桐原の単語集だとこの2つが類義語だという情報はあるのですが、しかしニュアンスの違いが説明不測です。 一方、東京書籍および旺文社だと、restrict を「制限する」の意味で説明しているのでニュアンスの違いは分かりますが、しかしconfineと類義語である情報が欠落していました。 さてconfine のほうが、「地理的に制限する」=「閉じ込める」のような意味合いが強いのですが、旺文社の単語集だと「閉じ込める」の意味もあるのですが、しかし桐原の単語集にはそこまで書いていないのです。 かといって東京書籍のほうには、confine の「限定する」の意味が書かれていません。 また、restrictは(限度内に)「制限する」という意味もあります。むしろ、こっちの意味で紹介している単語集もあります。 どちらの単語集を使うにも、例文が不足しており、ひとつの単語集だけでは意味がまったく分かりません。困った教育状況です。本来なら入試に出題する単語を減らすなどして理解を深めさせるべきでしょうが、しかしそういった教育が出来ていないのが日本の現実です。 それでも、まだしも大学受験用の単語集は、なんとか教育効果を高めようとした形跡も見られるのでマシです。なので、単語集を2つ組み合わせると、なんとか役立ちます。一方、TOEIC 高得点用の教材とか英検の1級あたりの教材の単語集とか、やたらと単語数を多くしているばかりで、ひどいものです。(資格本の活用法については別セクションで述べる。要点:出題傾向を把握する目的だけに英語資格本を使う。) なお、桐原の場合、紹介する単語数そのものは旺文社などと比べて減りますが、その代わり、桐原の密度の高さが長所であり、桐原では他の単語集には無い語法などを紹介しているなど、単語1つあたりの情報量が桐原では増えています。なので、桐原の単語集も油断はできません。 一見すると、桐原の単語の項目のひとつずつの情報量は多くないように見えますが、しかし、桐原では別ページの紹介単語を用いた熟語をまとめたページなどがあるので、それを含めると桐原の単語ひとつあたりの情報量は多くなります。 かといって高校生としては、英単語集ばかりをそう何社も比較して勉強するのは無理でしょうから(数学など他教科の勉強も必要だし、英語の勉強も単語以外にも読解練習やリスニングなど多々あるので)、受験では結局、すべての単語は覚えきれない状態で挑むことになるでしょうか。 大学受験もその後の資格試験も、けっして満点はとる必要は無く、人生の目的に必要な志望校などの合格最低点を上回って合格さえ出来ればいいのです。 別に大学受験の英語に限った話ではないですが、大学受験において、平均以上の大学の入試では満点をとるのは基本的には困難であり、普通は満点は無理です。小中学校の校内テストと事情が異なります。 ===== 4500語以上のスペルは実は覚えなくていい ===== 実を言うと英語のスペルの暗記については、4500語レベルおよびそれ以上のレベルの単語のスペルは、まず覚える必要が低いです。 なぜなら英作文や和文英訳であまり使わないからです。 また、桐原5500や、東京書籍4500の後半部の単語などは、実はもうその1~2回のスペル練習すら、しないでも済むのです。おおよそのスペルと用法のイメージを頭に入れれば十分でしょう。 また、グローバル人材の育成などを目指す大学ならば、英作文などを要求してくると思いますが、だったら英作文で使うようなレベルの中級英語(4500)で十分なのです。むしろ、4500語レベルですらスペルミスなく習得していたら、かなりの勉強家です。 ましてや5500語レベルの単語については、読解問題で出題されたときに意味を把握できればいいのです。 仮に、桐原5500語レベルの単語のスペルを暗記させる問題を出す大学があっても、どうせ他の現役受験生の多くも解けない問題なので、実質的にスペル暗記は5500語レベルでは無視していいでしょう。 一部の浪人生で文系専願の人なら解けるかもしれませんが、難関大を目指して4浪だの8浪だのしている連中と、現役生は張り合ってはなりません。 TOEICなどの国際的な資格試験では普通、書き取りをしません。なぜなら採点の手間の都合で、TOEICでは選択問題ばかりです。大学側が入試で入学後のTOEIC対策などを考えた出題をしたとしても、スペル対策はもはや不要なのです。 英検でスペル暗記を使うかもしれませんが、しかし英検は日本でしか評価されません。 桐原5500は論外として、 正直、時間的に現役高校生が、桐原『データベース4500』と東京書籍『コーパス4500』または旺文社『英単語ターゲット1900』を使いこなすレベルにクリアするのですら、高校3年間では少しキツいと思います。たぶん多くの高校生は予想では3年生のときに「上級レベルの単語集の用法や用例を覚えている最中に、時間切れで、高校3年の卒業式を迎える」という結果になると思います。なぜなら、このレベルで、急に単語を覚えるのが難しくなるからです。かといって中級レベルまでしか勉強しないと、卒業後の実務のリーディングにも不便なので、上級レベルを高校3年で教えるのにも意義のあることなので、教育者には悩みどころなのでしょう。 なので勉強法としては、4500語レベルをクリアできなくてもいいので、ある程度の勉強をしたら、予備校などの出しているレベル高めの単語集をいくつか買います。 諸般の事情で、東京書籍・桐原・旺文社が紹介していないが、高校生に勉強してほしい定番の単語みたいなのがあって、そういうのが予備校系の単語集で紹介されています。 ==== 予備校の単語集は何をしているか ==== 歴史的な事情で、今の4500語レベルの単語集には書かれていないが実は昔の1990年代ごろまでの高レベル単語集には書かれていた単語があります。 そういう単語が、難関大学で狙われるかもしれません。 旺文社1900や桐原・東京書籍4500語にない単語の正体のひとつは、そういう昔の課程の単語です。 で、それが予備校系の単語集の元ネタのひとつでもあります。 東京書籍・桐原の3000語レベルや4500語レベルで旅行会話のような実用英語が増えたりビジネス英単語などが増えたので、昔なら4500語レベルに書いてあった単語のいくつかが今は5500語レベルにハミ出ているのです。 なので、予備校などの出す、受験レベルの単語集が1~2冊は必要です。そういうハミ出た単語だけ、あとは予備校系の単語集で抑えておけば十分なのです。 予備校の単語集を見てみましたが、実はそれほど特別な英単語はないのです。また、じつは、桐原4500などの学校向け単語集の単語すべてを均等に覚える必要はなく、やや傾向があります。 たとえば旅行英語で使う単語など、検定教科書にあるから桐原・東京書籍は紹介しているものの、あまり大学が重視してない項目もあります。 だから、桐原/東京書籍 に加えて、旺文社ターゲット、さらに別の予備校系などの高校3年レベルの単語集を何か1~2冊つかって知識の穴埋めをすれば、もう十分でしょう。 もしかしたら、高校2年からもう、予備校の出版している難関向けの単語集を使ってもいいかもしれません。 市販の予備校の単語集を見ても、けっして、桐原5500語レベルの単語を片っ端からは教えていません。桐原5500のアレは、高校生には習得が無理だと思われているのでしょう。 ==== 受験英語の特殊事情 ==== 大学受験英語の特殊な事情ですが、明らかに高校範囲外で実用的にもメッタに使われていない英単語が難関大学で出されており、当然に読めないのですが、しかしなぜか他の文章の単語から文脈にとって意味をとれるようになっています。 もちろん、現実ではそんな好都合なことは滅多に無いのですが、受験の英文はたいてい都合よくそうなっています。 また、万が一、他の英文の文脈から読めない単語が出ても、どうせ他の多くの受験生も解けないので、そういう問題は解けるようにしておく必要がありません。 ともかく、入試対策としては最低限、東京書籍4500・桐原4500をベースに、さらに旺文社1900で派生語を固める必要があります。 しかし、それとは別に、予備校などの出す、プラス・アルファ的な受験レベルの単語集が1~2冊は必要です。 歴史的な事情で、今の4500語レベルの単語集には書かれていないが実は昔の高レベル単語集には書かれていた単語があって、4500語と旺文社1900をひととおりクリアしたあとは、そういう歴史的経緯のある単語だけ予備校単語集で攻略すればいいのです。 ==== 英単語集の読書計画 ==== 最初から高校在学中の読書計画に、英単語集の読書を想定して組み込んでおくと良いでしょう。また、桐原・東京書籍・旺文社あたりに基本の単語集とは別に、他社の少しだけ発展的な単語集を読書感覚で読むと良いでしょう。 高校必修の範囲を越えた単語や派生語などは、読書感覚でひととおり解説に目を通すだけの単語集の勉強でも十分に対応できる場合も多くあります。 しかし、いちども読んだこともない単語は、さすがに入試で対応できません。だから、一度でも解説に目を通してしまえば、済む単語も多くあるのです。 なので、広く浅くでいいので、読書しておく必要があります。 === 大学受験に必要な単語量について === 一般に、大学受験で、難関な学校の英語を読み解くには4000語程度を知っていることが望ましい。 世間でよくある勘違いとして、「近年はリスニング導入などにより単語数が減ったから、用法を覚えるのを中心にすべきだ」という知ったかぶりの勘違いがありますが、しかしそれは「90年代のような(現代換算で)6000語レベルとか7000語レベルとかやってた受験戦争の時代ほどは、2020年代では多くの単語を覚える必要が無い」という意味です。そんだけ昭和や平成初期の受験戦争は、片寄っていたというだけです。現代だと早稲田や上智の英文あたりしか出さない難しい英単語を、昔はマーチ文系学部や関関同立なども出していた、というだけです。 2020年代の現在での平均的な大学受験レベルである4500語レベルまでは、さっさと目指してドンドンと覚えてください。もちろん用法なども覚えるのは当然です。 「単語数が減った」という意味は、「英検1級にしか出ないような超マニアック単語は出ない」という意味です。(たとえば redemption 「(キリスト教用語)人間の罪のあがない」(なお、おそらく「罪」とは宗教的な原罪)みたいなマニアック単語は大学受験では出ないという意味。) 2001年ころは実際に入試に英検1級の redemption が出たかはともかく、ひょっとしたら英検1級単語もチラホラと出るかもしれないとして、一部の文系受験生はそういう単語も勉強してたわけです(まだ今ほど受験ノウハウが、インターネットで共有されてなかった時代だったので)。 つまり、難解な単語も多い桐原5500は、あれでもマシなほうなのです(なぜなら、実際に入試に出た単語を中心に掲載しているので)。英検1級の単語集は、桐原5500をはるかに超え、もっとマニアックで(高校生にとっては)ひどい教材です。そういうのが英検1級です。 === 学部ごとによる出題傾向の違い === 単語集などで出題校を見ると、学部名が書いてないですが、実際は学部によって出題傾向がけっこう違います。少なくとも1990年代はそうでした。 基本的に、理系の学部では、5500語レベルのような、あまりに難しい単語は出ません。そういうのを出すのは、よほどの難関私大や、それも文系の学科です。少なくとも2001年ごろはそうでした。理系学部が出すのは基本、化学英語を除けば、せいぜい旺文社ターゲット1900のような、どこの書店の参考書コーナーでも入るような単語です。少なくとも2001年ころの私大では、法政大学の理系学部および東京理科大および四工大(芝浦工大や工学院大など)はそうでした。 理系の学部の入試では、英文科ほど難しい単語は出てきません。もし仮に出てきたとしても、相手する価値が無い大学です。それとは別に、理系の大学では、科学英語などが出る場合があります。特に私大は、少なくとも1990年代はそうでした(当時、科学英語の参考書が少ないにも関わらず、マーチでも青学あたりがそういうの出していた)。私立だけでなく国立でも、東工大などの国立の難関理系大学でも、昔は科学英語を出してた時代もありました(今はどうか知りません)。 ほか、最近はどうか知りませんが、桐原5500の単語を見ると「輸血」の英語など、ちょくちょく医学的な英語があったりして、90年代くらいの昔は出たようです。 常識的に、医学部などで、そういう長文でも出したのでしょう。もしかしたら他学部の出題かもしれませんが、志望以外の専攻の専門用語までは付き合いきれません。 もし今の書店の受験参考書コーナーにそういう科学英語の単語集があれば、今でも出るのだろうし、無ければ、出ないと出版社が判断したのでしょうから、書店の状況に従えば安全だと思います。 赤本などの過去問などで、もしかしたらそういう専門的な英単語を勉強できるかもしれません。志望校にも寄るので、念のため、過去問などを確認してください。 もし、普通の書店にある単語集に無い単語ばかり出す国立大学があれば、批判されるべきです。国民の税金で運営されているのですから、どこに住んでる国民でも勉強できる単語でないといけません。 私大の単語はどうか知りません。 === 単語の小テストばかりを受けても、復習しなければ単語力は身に付かない === 学校や塾で、単語の小テストを受けさせられる場合もあるでしょう。「単語集の○○ページから△△ページまでを小テストで出すので、書き取り練習して覚えるように」という小テストです。 たいていの高校生の場合、予習はテスト前にしますが、いっぽうで復習をしているかどうかは、個人任せです。 ですが、小テストをいくら受けても、復習しなければ、単語力は増えません。 もし、単語の小テストを受けたままで、その後は復習せずに、ほったらかしにしてしまったら、何も単語力が伸びません。 単語テストは、テストを受けた後に、自分の未修得の単語を復習するために存在しているので、テスト後に復習をする必要があります。(もちろん、テスト前に予習も必要である。予習をしていれば、未修得の単語が減るので、復習の単語数が減る。) 要するに、小テストの使い方は、全国模試の使い方と同じです。 全国の高校や塾のうちの一部では、どうも、小テストの目的を忘れていて、「とにかく毎週、単語の小テストをすればいい」と安易に考えているような教育も、ある気がします。 ここを読んでいる読者高校生は、小テスト本来の目的を思い出して、小テスト後には復習と予習をしましょう。 さて、たいていの高校や塾では、1週間に1回のペースで、単語20〜50語ほどの記憶をはかる小テストをしていると思います。 1週間ごとに50語ほどのペースで単語小テストをしていれば、充分にハイペースですので、それ以上は週あたりの単語数を増やす必要はありません。(英語が好きなら、さらに勝手に単語数のペースを増やせばいいだろう。) 裏を返せば、復習をしきれない量の単語小テストを毎回受けさせられても、非効率です。例えば、1週間ごとに300語の単語小テストを高校で受けたとしても(ただし高校1年の1学期だと、中学英語の復習で、そういう数百問のテストもありうる。しかしそれは期間限定)、そんなに英単語ばかり復習しきれないでしょう。(数学など他教科の勉強もありますし。) 万が一、そういう高校や塾の場合(1週間に300語の単語小テストの場合)、その高校や塾の小テストは後回しにして、自分で単語を予習・復習しましょう。 ただし、定期試験や期末試験などで、今までの単語小テストの合計の数百語のなかから単語が出題される場合は、多くあるので、その復習はしましょう。つまり、学期内の小テストは、その学期中に復習し始めましょう。(どのみち、テスト後にも補習などがあるだろうが・・・) 夏休み明けや、冬休み明けに、前の学期の小テストの範囲内の単語が出題されたりしますので、休み中にも、復習しましょう。(予習も忘れずに。小テストは最終目的ではなく、入試合格などが、より本質的な目的なので。) 同様に、3学期の年度末の期末テストなら、1年間の小テスト範囲の合計1000語ちかくがテスト範囲に含まれる場合も多いので、その復習はしましょう。つまり、年度内の小テストは、その年度中に復習し始めましょう。(どのみち、テスト後にも補習などがあるが。) == 文法 == === 完璧な文法理解はあきらめる === ==== 背景 ==== 高校では、中学英語の不正確な文法を、修正するような内容も習います。 しかし、だからといって、けっして完全にネイティブ級な英文法を目指してはいけません。高校生には無理です(大学生ですら無理だろう)。それこそ、米英生まれの人以外は、もう専業の英語教師みたいに年以上も勉強しないと到達できない水準の世界です。 なので、大学受験で要求される文法は、せいぜい、大学受験用のどの参考書にも書いてあるレベルの基本的な文法さえ理解できればいいのです。 そういう基本事項さえ押さえていれば、少しくらい文法が不正確でも、たぶん大学受験では多めに見てくれます。仮に多めに見てもらえなくても、もうそこまでの対策の時間は高校生にはありません。 じつは、受験参考書の文法解説すら、本当はまだまだ説明不足です。ですが、大学受験参考書を超える内容はもう、高校生には時間的には無理だし、数学など他の教科の勉強も必要なので、あきらめる必要があります。 これはつまり、大学受験の英作文でも、実は少しくらいマチガイがあっても良いのです。どの参考書にもある基本的な文法事項さえ押さえてあれば、少しくらい文法が間違っていても、大学は許容するでしょう。(許容しない大学があっても、英数学など英語以外の他教科の勉強を無視した大学なので、無視していい。なお、国公立の東京外国語大学では、受験生に数学を要求しています。) 日本人と外国人の立場を変えれば分かります。日本在住の外国人タレントとかで、もう十年以上の長いあいだ日本に住んでいる人ですら、ときどき文法ミスをしますし、日本語の発音も日本人とは少し違います。ですが、それを日本社会は許容します。 英語でも同じことです。向こうの国の人は、少しくらい日本人の英語の単語の並びや発音がヘンでも、話の内容がシッカリしていれば、聞いてくれます。 ==== 対策 ==== 上記のような背景のため、大学受験対策の英文法の勉強としては、せいせい平均レベルの問題集をせいぜい2冊ほどクリアすれば十分です。せいぜい、複合問題とかを解ければ、充分でしょう。 もっと言うなら、'''英作文の入試問題の場合、文法がすこしくらい間違っていてもいい'''のです。どの教科書・参考書にも書いてある基本を学んだ形跡さえある英作文を書ければ、あとは意味が通じれば、たとえば英作文中で冠詞がすこしくらい抜けててもいい、もしくは余計な冠詞があっても良い(本来は冠詞をつけない名詞に a とか the とか書いてもいい)のです。(ただし、あくまで「意味が通じるなら」の条件つきです。冠詞を間違えると意味が通じない英作文の場合は、間違えてはいけません。) 英作文の問題なんて、せいぜい英作文の参考書を数冊と、あとは普通の英文法の参考書の内容を押さえておいて、一通り学んだ形跡さえあれば、あとはもう小さなミスは受け入れるしかありません。仮に入試でその文法ミスが減点されようが、もう対策の時間がありません。 たとえば、日本語訳に引っ張られて、英語では、その単語には使わない冠詞をつけくわえても、そういうミスはもう、受け入れるしかありません。「英語以外にも日本語の知識も多いがゆえに、間違えてしまう」という類のミスは、もう受け入れるしかないのです。 日本語の学力に限らず、数学の学力でも理科でも社会でも、'''他教科の学力が高いがゆえに発生しやすいミスは、受け入れるしかありません'''。仮にこういう知識の多さゆえのミスをひどく減点する採点者のいる大学があっても、そういう大学はあまり教育水準が高くないので、もう相手しないほうが良いです。 また、辞書や一部の参考書のコラムにしか書いてないような細かい文法はもう、いちいち覚えてられないので、間違えてもいいのです。 また、仮に文法にミスが無くても単語にミスがあれば英作文では減点されかねないので、単語を学ぶほうが重要です。 ともかく英作文では、けっして「小さなミスを避ける」という発想ではなく、「'''大きなミスをなくすために、小さなミスを許容する'''」という発想の転換のほうが重要でしょう。 大きなミスにつながりかねない、文型とか過去形・完了形とか仮定法とか関係詞とか、「もし間違えると、意味がまったく変わってしまったり、逆の意味になってしまいかねない」という、そういう単元を重点的に身に着ける必要があります。いっぽう、助動詞などの高校で習うような微妙なニュアンスの違いとかは(たとえば助動詞 will は、「明日は日曜日だ」みたいな確実な未来では使わないというニュアンスがある)、間違えても小さなミスですので、ある程度は小さなミスを英作文では妥協する必要があります。 英作文では、よほど簡単な文でない限り、ミスは無くせません。また、だいたい英作文を要求してくる大学は、そこそこの長さの英作文を要求してきます。よって、ミスをゼロにしようという発想では、ネイティブ以外では対処できません。 たとえば、英作文がまったく逆の意味に受け取られてしまうような大きなミスは、避けなければいけません。また、そもそも米英人に通じないような文章も、避けなければいけません。 しかし裏を返せば、英作文で少しくらいニュアンスが変わってしまっても、教科書レベルの文法をきちんと押さえていて、もとの和文の意味の90%くらいが通じるなら、ミスは受け入れざるを得ません。 ;大学入試も英検・TOEICも単語重視 文法の要求水準がそんなに高くないので、平均的な文法問題集をクリアしたら、そのあとは単語などを勉強したほうが良いと思います。 もし仮に、文法で難問を入試に出してくるブランド大学があったとしても、そういう大学は単語力も多く要求してくるでしょうから、文法の難問よりも単語力の増強に時間を当てたほうが良いでしょう。 英検など検定試験では、単語については大学受験を超える単語も要求されます。しかし文法については上述の通り、大学受験を超えるような文法理解は英検・TOEICですら要求されないです。世間の人は、そもそも受験参考書を超える文法知識の存在そのものを知らない人すらも多くいるくらいです。 === 参考書で勉強する === 高校英語の英文法の勉強は、検定教科書ではなく参考書で勉強するのが定石、基本です。 なので、まずは参考書を買い始めましょう。普通科高校なら、おそらく高校の入学時、検定教科書の購入と一緒に、参考書も買わされると思います。 もし大学受験を考えるなら、英文法の参考書を買わなければなりません。 とりあえず、下記に後述する網羅形式の本を持っていれば、ひとまずは安心でしょう。 === 高校英文法は例外も多い === 中学の英文法の教育では、規則的・論理的な文法事項だけが取り上げられたのですが、高校は違います。 このことからか、高校英語では英文法の参考書のスタンスがいくつか分かれています。 1. 例外的な事例にはあまり深入りせず、基本的な事項を重視したスタンス 2. 辞書的に、英文法のあらゆるパターンを網羅的に掲載したスタンス があります。(実際にはこの中間の編集方針の参考書もあるが、説明の都合上、二極に単純化することにする。) 予備校系の講義形式をうたった参考書のいくつかや、高校英文法の入門書などの参考書のいくつかは、基礎的な重要事項を特に重視したスタンスです。(そのため、例外的な事項の説明は省かれているか、少なめです。) いっぽう、高校にもよりますが、高校で配布されるような昔からの、いかめしい感じのする参考書は、辞書的・網羅的なスタンスの参考書です。 センター試験などを考えるなら、網羅的なスタンスの文法参考書を最終的には読んで覚えざるを得ません。 一応、網羅本だけでも受験対策は可能ですが、塾や予備校などに通ってない人や、高校の授業の質に不安のある人は、さらに基礎的な事項を重視したスタンスの文法参考書もあると良いかもしれません。 例えば理系の中堅私大などで、あまり例外的な文法事項を要求するとは思えません。 ただし、これは私大の場合の話です。国公立の志望の場合は、共通試験を対策せざるを得ず、そのため二次試験がどうなっていようが、その対策のために辞書的・網羅的な参考書を読まざるを得ません。 TOEICなどの資格試験が近年重視されており、大学でも私大などで推薦入試や自己推薦などでTOEICの成績を考慮する大学も多く、企業もTOEICを表向きには重視していますが、TOEICは文法教育における論理性や高校生の論理性の涵養に配慮する義務はありません。なので、この問題の逃げ場は、大学受験にはありません。TOEICが果たして本当に実用英語かどうかはともかく、世間一般で「実用英語」だろうとは言われています。 === 網羅本でも全部の構文は紹介していない === 例えば比較級の構文「A is B no more than C is D」は、ある参考書(網羅本)には紹介されていませんでした。 高校英語で習う構文は多いので、複合的な構文などは、網羅本といえども一冊の参考書では紹介しきれないのです。 もし英語だけしか学習しないので済むのであれば(実際は違いますが)、英文法の網羅本の参考書を2冊や3冊も読み比べることで自分にあった参考書を選べばいいですが、しかし他教科の勉強もあるので、そうはいきません。 悩みどころです。各自、うまく対応してください。 また、大学生・社会人向けの厚めの文法参考書でも、すべての構文が書いてあるわけではないです。例えば『ロイヤル英文法』という大人向けのやや専門的かつ高度な英文法参考書がありますが、「all the +比較級」の構文は書いてありませんでしたし、巻末の索引を調べてもありません。 だから、大人向けの文法参考書を読んだところで、この問題「網羅本でも全部の構文は紹介していない」は解決しないのです。 === 時間配分 === 文法の学習は当然に必要ですし、入試にも良く出ます。しかし、文法の学習にばかり時間を掛けてはなりません。 高校に入学すると、高校の範囲の文法事項を、おそらく学校や塾などで急に教わり始めるでしょう。それらの文法の新知識の学習も大事ですし、当然に学習するべき知識ですが、読者のみなさんは英単語の学習も欠かさないようにしてください。文法なんて覚えることも少ないし、大学受験をするなら最終的には大学受験のころにまで文法を覚えられれば良いのです。なので文法の難問を練習する時間があるなら、それよりも、まず先に単語を優先的に勉強して語彙力を増やしたほうが効率的でしょう。 また、入試の文法問題も、文法の知識だけで解ける問題は少なく、単語の知識や語法の知識などと組み合わせないと解けない問題なども、入試では、よく出題されやすいです。なので、単語の知識が、大学受験対策では優先的に必要なのです。 2010年以降なら、中学校で、すでに大まかな文法の枠組みは習っています。2022年では、仮定法すら中学校で習っているはずです。もはや高校で習うのは、無生物主語など若干の単元と、あとは仮定法過去完了だとか、現在完了進行形とかくらいです。 そういった合わせ技は、それほど熱心に勉強しなくても、入門的な問題集などで問題練習すれば、普通に習得できます。 === 高校英文法は実は少しウソ知識 === 高校生用の文法参考書は、高校標準レベルの参考書は、基本的には、中学英語の復習も兼ねています。 このため、普通なら、高校1年生は復習のためにわざわざ中学参考書を買いなおす必要はないです。 それよりも重要なこととして、実は高校英語の文法参考書には、不正確な知識があるという事です。中学英語が理解重視のため少し不正確でかなりひどいカタコト英語が中学生用の参考書・教科書にあるので、同様に高校の英文法も少しだけ不正確なウソの知識があるのです。 さて、単語集では基礎レベルの単語集の前半が、中学英語の復習を兼ねているように、実は高校英文法の参考書も、少なくない割と多くの部分が中学の復習や、中学で習った分類など理解の再構成を兼ねています。 単語集ほどではありませんが、高校の文法参考書でも、あまり序盤にある中学文法の復習の部分には、高校でも深入りする必要がないことが、上述の考察・市場調査などから分かります。 また、このことに気づけば、つまり単語以外の知識で、一部の参考書にしか紹介されていない細かい文法の理論的な知識は、入試対策としては覚える必要が低いことが導かれます。単語集だと、細かい発展的な単語も入試に出ますが、しかし文法書については事情が違います。高校英文法には、深入りせずに、広く浅く学ぶのが安全でしょう。 文法参考書に書いてある知識がそもそも初学者の理解しやすさを重視したためのウソ知識なのですから、むしろ、けっして鵜吞みにして深入りしてはイケナイのです。 ほか、使用頻度の少ない表現など、参考書によって説明が微妙に食い違っています。たとえば接続詞 lest は、ある参考書では、「文語的であり、あまり使われない」と主張する一方、他社の参考書では「(for fear よりも)頻度は lest のほうが高い」(ジーニアス)と主張していたりします。 こういうふうに、細かい表現の英米での利用状況には諸説あるので、あまり参考書を鵜呑みにしすぎないようにしましょう。 === 大学生向けの参考書は例文不足 === 大学生むけの参考書は高校生向けのものと、用途がやや異なります。 高校生は、高校生向けをターゲット層にした一般の高校生向けの英文法参考書を中心に勉強しましょう。 === 細かなニュアンスの違いは覚えなくて良い === 受験勉強では、細かなニュアンスの暗記よりも、英単語をたくさん覚えなければなりません。また英語以外の国語や数学などの勉強も必要です。 参考書で勉強をする際、あまり細かなニュアンスの違いの暗記に入り込まないように注意してください。 実際、ある検定教科書でも、文法事項の類似表現などは、たとえば Would you ~? と Could you ~? などの依頼表現としてのニュアンスの違いは説明していません。せいぜい、 「Please と比べたらWould You および Could you は丁寧な言い回しである」という程度のニュアンスさえ把握できていれば大学受験レベルでは十分です。 参考書にはもしかしたらもっと細かいニュアンスの違いなどが書いてあるかもしれませんが、そういう詳細な情報はせいぜい参考程度にしましょう。 実は参考書でも、もう細かいニュアンスの違いは教えていない書籍も多くあります。 つまり、大学受験用の英語参考書には2種類あり、 :ひとつは受験用に入試に出る最低限のことだけを教える参考書と、 :もうひとつは細かいニュアンスの違いなども教える参考書と、 そういう2種類があります。 なお、上記とは別に英語研究者用の文法参考書がありますが、大学受験には全く対応していないので間違えて購入しないでください。 最低限のことを教える文法参考書の例として、ジーニアス英和辞典を出している大修館書店は高校生向けの文法参考書(『ジーニアス総合英語』)も出していますが、しかし文法参考書のほうでは辞書ほど細かいニュアンスの違いを説明していないのが現状です。 特に新共通試験(旧制度のセンター試験に相当)などの公共機関の試験や、英検・TOEICなどの資格試験では、細かいニュアンスを問う問題はまず出題が難しいでしょう。西暦2000年以降、国公立人気などでセンター試験や新共通試験の影響がどんどん強まっている影響も考えれば、文法学習であまり深入りニュアンスに深入りするメリットは残念ながら少ないのが現状だろうと思います。 それが英語教育として良いかどうか不明ですが、現在の大学入試の対策として要求される文法教育とはそういうものです。 基本構文などの細かなニュアンスの違いは、英会話などではそれなりに重要ですが、しかし入試や画一的な資格試験では英会話をそこまで細かく採点できないので、したがってニュアンスの違いに基づく使い分けもそれらの試験では出題されづらいことになります。新共通試験にリスニング試験はありますが、しかし実際に会話をさせる試験はありません。 裏を返せば、細かいニュアンスに深入りした文法参考書は、高校卒業後の英会話などの英語学習などのステップアップで使うのが効果的かもしれません。 高校の文法参考書の題名は、「文法」と書いてあるものを選んでもいいですが、2022年の書店で確認したところ『総合英語』と書かれている参考書も文法事項が中心的です。 === 各社ごとの注意 === 参考書えらびの際に、高校1年生がたぶん勘違いしそうなことを、述べておく。 * 大修館「ジーニアス」と数研出版「チャート式」の細かさ 大修館「ジーニアス」ブランドは、辞書では昔から細かい説明で有名であり進学校などではジーニアスの辞書が勧められるとの噂も昔からよくあります。ですが、しかし「ジーニアス」ブランドの文法参考書はあまり細かくありません。注意してください。 別に細かい文法参考書がいいだの悪いだのという話ではなく、ともかく、辞書のような細かさを「ジーニアス」文法参考書に期待してはいけません。用途が違います。 いっぽう、数研出版のチャート式の文法参考書のほうが、多くの構文が細かく網羅的・羅列的には書いてある傾向にあります。このため、1990年代の昔からよくチャート式の一番難しいバージョン(白・黄・青など色々バージョンがある)が進学校などでの参考書として配布されることもありました(かつては赤チャートが難しかったが、現代は赤が廃止され次点だった青チャートが一番難しいバージョンになっている)。 ただし、果たして2020年代の現代の入試にもチャート式が効果的かどうかは分かりません(会話重視・リスニング重視や単語重視など、入試の流行の変化もあるので)。 * 文英堂「インスパイア」と学研の参考書の入門者対応 なお、かつて文英堂『シグマベスト』というシリーズが、1990年代~2001年くらいは高校入門レベルの参考書として定番だったが、現代はそもそも英語のシグマベストが無いのと(英語は『インスパイア』に変更)、しかし同社・文英堂の『インスパイア』は、難しめです。高校生むけの一般的な参考書のなかでは、たぶんインスパイアが一番情報量が多いと思います(青チャートよりもインスパイアのほうが説明が細かいです)。 暗記科目なので、難しくても、とりあえず読めますが、しかし『インスパイア』のレベルはやや受験レベルを少し超えている記述もチラホラあります。 なお、例えば理科など他教科でも『シグマベスト』は実は2010年以降の現代はなかなか発展的であり難しくなってきていて、情報も細かく羅列的である。90年代の当時とは『シグマベスト』の中身の難しさが違うので、参考書選びのさいには、けっして90年代のままの世間の大人たちの評価を鵜吞みにしないように注意。 背景として、90年代の昔は、英数理の参考書選びのパターンとして、「シグマベストで入門レベルをカバーして、チャート式で高度な事項を勉強」という有名パターンがありました(なお、国語と社会科のチャート式は参考書としては無い)。あるいは、「その教科が苦手ならシグマベストを選ぶ。その教科が得意ならチャート式を選ぶ。」のようなパターンが90年代にありました。 しかし、現代では シグマ + チャート のパターンが、もはや上述の出版事情の変化で通用しなくなってるので注意。 2010年台の今だと例えば学研が高校入門レベルの初等的な参考書の立場だが、90年代の昔、学研がまだ高校参考書にあまり参入しておらず(昔の学研は小中学校むけの教材ばかりがメインだった)、当時は文英堂のシグマベストが今の学研の高校参考書に近い立場だったという背景事情がある。 === 文法参考書の選びかた === インターネットで参考書の形式やレベルなどを調べたり、または、教師や塾講師、チューター、同じ学生などからの評判なども参考にしながら、実際に書店で参考書の内容を閲覧するなどして選ぶといいだろう。 また、古本屋などで参考書を購入すると出費を抑えられる可能性がある。 中学英語は昔とカリキュラムが大幅に変わったので古本屋は論外だが、高校英語は昔から到達地点が同じままなので、文法学習はちょっとぐらい古い本でも特に問題ないかもしれないかもしれない。とりあえず、古本屋で英文法書を購入するなら、なるべく最近のものを購入したほうがいいだろう。 「大学英文法」とかそういうのは一般的には無い。文法は高校英語で、とりあえずゴールである。あとは単語や熟語を増やすのが、その後の道である。 英語教師などを目指す人のための細かい英文法理論書はあるが、高校生には必要ない。なお、書店によってはそういう教師向けの英文法理論書が高校英語コーナーに売っていたりするので、間違えて買わないように。わかった上で買うなら自己責任で。 === 高校の文法参考書はどういうものか === 「時事的な文法」とか無いので、もし改訂などあっても、あまり頻繁に買い換える必要は無い。 他のセクションでも言ってるかもしれないが、「大学英文法」と言うのはない。なので、文法において「大学教養レベルの先取り」とかは不要であるし、そもそも存在しないし、そういう教材もまず無い。 このことは、大学受験においては、つまり文法問題は、高校生向けのやや高レベルな参考書を習得できたら、それ以上は英語教師でも目指さないかぎりは、英文科向けのさらに高度な文法書には進む必要は無い、という事である。 英文科の学生などに向けた文法書は、あれは教師向けまたは研究者向けの参考書である。内容も、基本的には高校生向けの文法参考書に書いてある内容を、大学生または教師志望者などの視点やレベルに合わせて書き直した程度のものである。なのでともかく、受験生には不要である。 このことから、ゴールが明確に定まり、受験生向けのやや高度なレベルの参考書がゴールである。 そこから逆算すると、あまり多くの参考書を読み漁る必要はない。せいぜい、2冊読めば十分だろう。 高校1年レベルから分かりそうな易しめのレベルのものと、あとは少し難しめの感じのもう一冊で十分である。もしかしたらどちらか片方だけでも十分かもしれない。 また、説明を省略したが、前提として、高校の参考書は、学年別とかには売ってない(書店で実物を見れば分かると思うが)。 なので参考書での学習の際にも、いちいち学年ごとにペースを3等分とかして「私は1年生なので、参考書の前半の3分の1だけ読む」みたいなことはする必要は無いし、むしろ現代では3等分すべきでもない。 つまり、参考書は高校1年で購入したら、とりあえず、さっさと通読すべきである。現代の中学・高校のカリキュラムなら、文法参考書の通読は中学英文法の復習にもなるので、まずは通読しよう。 そして何回か通読したら、問題集などにチャレンジしたり、あるいは単語なども増やそう。 これがもし英語でなく数学の勉強法だったら、先の学年の内容を通読するよりも学校で習った単元の復習などを重視するのも手かもしれないが、しかし英語はあまりそういう単元ではない。 高校の授業や定期テストなどは、あれはあれで教育ノウハウが詰まっているので活用すればいいが、別にそれを活用したからといって文法参考書を通読できなくなるわけでもない。 それに塾などだと、参考書の後ろのほうにある無生物主語などを高校クラスでは1年で先に教える流儀もある。 参考書の最初のほうにある文型がどうのこうのと言った話は、どうせ塾の中学生クラスや中学参考書などでも既に教えている可能性があるので、塾の高校生クラスではそういうのはもう後回しにして、先に無生物主語や仮定法など参考書の後半の単元を教えるというパターンもある。家庭での自習などの際にはご参考に。 また、そもそも2年の終わりくらいから高校や塾などで全国模試などを次第に受け始めることを考えるなら、けっして高校3年間で学校の授業で文法を習うのを待つのではなく、自習によって高校2年の後半の段階までに一通り、高校生むけの単元である無生物主語やら仮定法過去完了やら分詞構文などを含めて、とりあえず文法参考書は全ページを通読は済ましておいて、加えて問題練習を軽くでいいのでしておくべきだろう。 そして、高校3年では模試なども活用して、問題練習で定着させていく、・・・という段取りである。 == 熟語 == 単語集の前半のほうにも、実務ではあまり使わないだろう熟語、つまり、より平易な表現に言い換えることの多い表現がよくあります(少なくともこのセクションのある編集者が、ネット上の海外英語では見たことない表現がいくつもありました)。 中学1~2年で習うレベルの単語の組み合わせで作れるマニアックな熟語がいくつかあるので、学習時に注意が必要です。単語集では編集の都合上、そういうマニアック熟語が前半のほうに書いてありますが、正直、後回しにすべき熟語です。 一方、 come true (実現する)のような、たとえば構成する単語と意味が近い場合なら、学習効果は高いです。たとえばtrue 「=真実」と「実現する」は比較的に意味が近いです。参考書でも、よくSVC文型の例としてcome true が出てくるので、こっちは重要事項です。 しかし残念ながら、単語集にある出題頻度の情報を見ると、come true は出題頻度が低いようです。 そのほか優先して覚えるべき熟語は、たとえば no longer ~「もはや~ない」のように構文的な熟語や、あるいはget over ~「克服する。回復する」(= overcome)のように中学レベルの単語には言い換えできなくてその熟語表現を使わざるを得ない可能性の高そうな熟語とか、そういうのです。 このような熟語の教育状況になってるのは、つまり残念なことですが、「英語教育での英作文などでは、実務的を想定した教育がされておらず、つまり形骸化している可能性がある」という事です。 「出題頻度順」の掲載をうたった単語集で前半のほうに、不便なマニアック熟語があるので、つまり入試では、実際には仕事などで英語を使うつもりのない人たちを想定した入試が行われているという証拠です。 英作文をする際、getで一語で説明できることを「come by ~」で表現する可能性は実用では低いでしょう。英会話でも、果たして米英人が、日本人相手に come by で説明するでしょうか。はなはだ疑問です。 なぜなら外国人は、もし英語が得意な日本人相手なら躊躇なくobtain のような非熟語を会話で使うだろうし、あるいは「英語が苦手な日本人かな」と思って気を使ってくれるなら get で表現してくれるでしょう。 come の基本的な意味は「来る」ですから、熟語come byの「入手」とは、かけ離れています。おそらく「手元に来る」的なニュアンスなのでしょうが、しかし「by」からそれを想像するのは、かなり前置詞「by」の基本の意味から離れています。そういう、基本単語の意味からの距離の大きい表現は、実務では学習コストが高いので、いろいろと不便なのです。 不便とはいえ、海外での利用の可能性がないとは言えないので日本の受験英語でも教えられていますが、なるべくなら後回しにしたいマニアック熟語表現です。 come true 「実現する」のようなSVC文型の例にもなるような教育的な熟語だと出題頻度が低いようですが、これはつまり、入試出題者が、高校生の学習効果を見る良問よりも「落とすための問題」「ヒッカケ問題」を21世紀の少子化の時代になっても未だに出題し続けているという証拠でしょうか。 == リスニング == まずは、前提となる単語力をつける必要がある。その上で、参考書で、音声CDつきの参考書などで聞き取り練習をするなどすればいいだろう。また、例えばYouTubeやTEDなどで自分の興味のある分野の英語を聞くなどしてもいいだろう。 テレビのNHK教育の英語番組は、学校の授業用に作られており、大学受験対策には作られていないこと、洋画は字幕や吹き替えに尺や字数の都合などで意訳が多いため学習には向いてないとする意見もある。 さて、新共通テストの場合なら、回答の選択肢が4択で与えられるわけですから、その選択肢の中からリスニング内容に一番ちかいのを選べればいいのです。すべての単語を1回で聞き取る必要はありません。それはプロの同時通訳者でも無理です。(なお、試験によっては2回ほど放送される場合もある。) すべての単語を聞き取るような問題は、おそらく共通テスト出題者は、作成しないだろうと思います。仮に作成したとしたら、かなりゆっくりと発音するリスニング問題でしょう。 テレビの生放送で、定型業務ではない政治討論の番組などで音声モードを英語モードに切り替えをして視聴してみると分かるのですが、実は生放送ではプロの同時通訳者ですら完全には流暢(りゅうちょう)には翻訳を出来ないのがプロでも実態です。テレビ生放送の英語は、プロですら、ややカタコト(片言)気味の翻訳になります。しかもテレビ番組などは、実は事前に原稿・台本があり、その原稿が事前にスタッフなどに渡されて読まれており、それをもとに撮影および音声収録をしています。それですら、少しカタコトの同時通訳なのです。 なお、テレビの原稿・台本のようにプロの同時通訳では、話題にある程度の予備知識が必要です。しかし新共通テストでは、そこまで個別のトピックのある話題には踏み込まないでしょう。(ただし、難関私大や国立二次試験はどうか知りません。もっとも受験生には他の勉強もあるので、普通に英文読解などの教科書・参考書によくある話題に触れておけば十分でしょう。) == 読解 == 読解練習をしたい場合は、まずは学校でのリーディングの教科書などをきちんと読むのは当然ですが、そのほかにも参考書があると便利かもしれません。 書店の参考書コーナーに、高校生用の英文読解の参考書などが置いてあるはずですから、それら高校生用の参考書で勉強してください。 大学入試の英文では、平均以上の難度の大学になると、単語の知識がないと、まったく内容が把握できないでしょう。なので、読解練習だけでなく単語の勉強もしてください。とりあえず単語集などで4500語レベルまでの範囲の単語は最低限、ひととおり学習してください。 * 試験での読解問題の時間配分について 出題英文を読むのに時間が掛かりますから、試験中の時間の配分にも気をつけてください。まずは単語力を増やすと読解スピードも上がるので、普段の勉強では単語力を増やしてください。 試験中の配分の対策として、実際の入試では、たとえば、長文読解問題よりも先に、短時間で解けそうな単語問題・文法問題などを先に解くとかして、時間配分の対策をしてください。あるいは、設問の問題文を先に読んでおいて、見当をつけてから長文を読むなどという方法もあります。ここらへんの対策は、じっさいに過去問や想定問題などを解いて練習してください。基本的に、入試国語での現代文などでの読解問題対策などの際の時間配分と似ていると思います。 ただし、時間配分のテクニックばかりを磨いてもダメであり、単語力などを増やさないと、読解スピードも上がりません。 * 学部と出題内容の関係 入試では、ときどき、志望先の学部の内容に関する記述が出る場合もあります。また、高校で習う教科に関する記述が出る場合もあります。もっとも、べつに必ずしも志望先学部と近い内容の英文が出題されるとは限らず、あまり関係のない内容の英文も出題される場合もあります。 どちらにせよ、合格後の人生も考えて、学生は、志望先学部に近い内容の高校教科の勉強もしておいたほうが安全でしょう。たとえば経済学部に進学志望なら高校政治経済などの参考書を読んでおくとか、あるいは理工学部に志望なら理科・数学の参考書を読んでおいたほうが安全でしょう。 == 発音・英会話など == 基本的には、標準的な参考書でカバーでき、あとは単語の記憶量を増やす練習とか、リスニングの練習とかの対策でよいです。あとは参考書などの英会話文例や発音問題を覚えておけば、入試での、だいたいの発音や英会話の試験もカバーできます。 * 入試の発音問題について 発音問題は、入試に英単語と発音記号を照らしあわせる問題は出ます。ですが、自分で発音することは、入試ではない。 * 入試での英会話について 大学入試では文章題などで、英会話の空欄を埋める問題などが出されるかもしれません。いっぽう、大学側が、直接受験生と会話をする試験は、一般入試では出ないでしょう。 ただし、いくら一般入試に会話が出にくいといっても、基本的な会話くらいは、せっかく高校で習うのですから、きちんと練習してください。そもそも建前上は、高校で習うことは、高校生は学習するべきということになっています。そして大学側だってバカじゃないんだから、なるべくきちんと勉強している受験生を優先的に合格させたいのです。 == 英作文 == 英作文の練習よりも、まず先に文法学習や単語の記憶量を増やす勉強を優先したほうが安全でしょう。単語の記憶量が増えて、文法や熟語なども覚えれば、英作文なども、自然と上達します。逆に言うと、英作文だけを勉強しようとしても、難しいです。なお、単に英単語の意味や綴りを覚えているだけでは英作はできない。動詞ならば他動詞(Vt)なのか自動詞(Vi)なのか両方あるのか,他動詞ならば第4文型(SVOO)や第5文型(SVOC)をとれるのか,名詞ならば可算名詞(C)なのか不可算名詞なのかなど(これ以外にもたくさんある),とにかく用法まで正確に知っておく必要がある。従って辞書を引く必要がある。 == 問題集を信じすぎるな == 問題練習をする際には、必ずしも偏差値順にステップアップする必要は無い、という事です。 また、日本人の高校生のレベルを越える難しすぎる問題は、そもそも解けるようになる必要もないでしょう。 選択問題では、高校レベルで習得できるレベルでの、初心者のよくやるミスをしない事のような、明らかに間違った言い回しを排除する事さえできれば、それでいいでしょう。 納得の行かない問題の対策はやりすぎないようにスキップして、他の勉強をすべきです。英語の勉強なら、もっと確実に偏差値アップの出来る勉強、たとえば単語力を増やすなどの勉強をしましょう。 == あきらめるべき事 == === 第二外国語は、あきらめるべき === ==== 入試に第二外国語は出ない ==== 高校によっては、第二外国語の授業を用意している高校もあります。 共通テストや二次試験では英語以外の外国語を使えるところもあるが、特別な理由がないなら英語を選択したほうがいいだろう。 また、中国語を勉強しても、漢文の入試問題を解くのには役立ちません。 帰国子女とか、あるいは進路志望が語学関連の分野で無い限り、あまり第二外国語には手を伸ばさないほうが良いでしょう。 == 一般入試対策ではTOEIC対策などには手を出さないほうが安全 == 英語能力を測る国際的な試験のTOEFLやTOEICなどは、高校生の学習用には作られていません。そもそも日本人に内容を合わせていません。 それにTOEICとTOEFLのどちらとも、試験の目的が、日本の高校英語の教育目的とは違います。 TOEICとTOEFLのどちらも目的は、英米への留学や海外生活のためなどの語学が目的です。日本の大学入試や、日本の大学での英語論文読解などの目的には、TOEIC・TOEFLなどは合わせていません。TOEFLとかTOEICとかで、ハイスコアを目指すのは、大学受験対策とは目的がズレています。 なお、そもそもTOEICをつくったのは日本の通産省(当時)であり、通産省がアメリカの非営利テスト開発機関、ETS(Educational Testing Service)に依頼をして、日本がつくったテストです。 よって、TOEICの出題内容は、アメリカ国内での実用とは若干、ズレていますので、てっきり実用英語だとは勘違いしないようにしましょう。また、てっきりTOEICは(OECDあたりの)「国際機関のつくった試験である」などと勘違いしないようにしましょう。 さらに、TOEICの参考書などにある「高校生レベルは◯◯点」などの数値も、じゃっかん、疑わしいので、あまり鵜呑みにしないようにしましょう。 ;* 平均点 :なお、高校生のTOEICの平均点は、年度にもよりますが、2018年の時点では、高校生の平均点はおおよそ350~400点くらいです。なおTOEICの満点は990点です。 ネット上では「TOEIC 600点が英検2級相当」という言説が出回っており、英検2級が高校英語レベルを出題範囲として想定していることから、あたかも「高校を卒業したら TOEIC 600 点で当然」みたいな言説が出回っていますが、しかし2018年の統計などをもとに考えれば、この言説はデタラメです。 また、「TOEIC 600点が英検2級相当」という言説の根拠も、よくよく調べてみると、2001年くらいに英検2級保持者にTOEICの点数をアンケートしたところ TOEIC 400点~800点あたりに得点がバラついたという統計を、とりあえず平均値をとって600点としただけにすぎないのが実態です。 高校の数学で統計値の「分散」という概念を習います。分散を知らないと、統計詐欺にダマされてしまいます。 ;* TOEICは事実上は文系向けの試験である :世の中には、文系の大人が多く、その影響で、学生でも理系科目をサボってまで英語の勉強をして、英語の成績を上げる人がいます。TOEICの平均点も、そういう文系の人間を基準に算出されてしまいます。 :一般入試や国公立受験、理系の学部などを目指す人は、けっして、そういう文系の大人や、文系しかできない学生を多く含むTOEIC平均点を、参考にしてはいけません。 :* 4択問題と難易度 :TOEICの各問題は基本的に4択問題ですので、デタラメに選択しても、990点満点(約1000点)中のうちの4分の1である約250点を取れます。 : さらに、欧米で英米への留学希望者むけのテストなどとして知られている英語検定試験はTOEFLです。 TOEICは、日本と韓国で流行っている英語検定です。 また、英検は日本人用の試験ですが、しかし高校生用には試験が作られていません。中学生・高校生なども意識して英検は作られているでしょうが、しかし、中高生だけを意識してはいません。 英検を入試対策で使うなら、志望校合格などが保証されないかぎりは、なるべく英検'''準'''1級までに止めるのが無難です。 * 推薦入試などの評価事項になることも ただし、推薦入試ではTOEICやTOEFL、英検などの成績が考慮される場合もあります。 * 難関大学への対策用としての場合 大学によっては、入試で高校レベルを超えた、かなり難しい英語を出す場合もあります。そういう大学に対応する場合、市販の受験参考書では太刀打ちできないかもしれません。このような場合、しかたなくTOEFL対策や英検1級対策などの参考書が必要な場合もあるかもしれません。 * 就職活動でのTOEIC評価について ただし、大学生の就職活動では、企業にTOEICなどの点数を聞かれることもあります。就職活動時のエントリーシートに、最初からTOEICなど成績の記入欄がある場合もあります。また、外国大学への留学の際に、TOEICなどで一定以上の成績を修めることが必須の要件とされる場合も多いです。たとえ英語圏以外の国の大学への留学でも、TOEICやTOEFLなどの成績が必須要件として必要な場合があります。 なので高校生でも、TOEIC受験の機会があれば、受験をするのも良いでしょう。 ただし、TOEICの成績が良いからと言って、けっして、それだけで企業が「即・採用」をするなんて事はありません。 高校生の段階では、TOEICなどの語学検定については、もし受験できるなら、視野を広げるような目的で検定を受けるのが良いでしょう。 == 英語の検定教科書にある時事や古典文学の勉強は不要だし、危険 == 中学高校の英語の検定教科書には、他の教科では説明しづらい時事や古典文学、最近の日本のアニメやマンガの、海外での人気について、英文で紹介されたりするかもしれません。 そもそも、本来の目的は英語を学ぶということなので、これらの題材で得た知識がそのまま大学受験に役に立つということはありません。 [[カテゴリ:英語]] 1gshlya4p7onhc2xikprxr6m4mfffy3 246692 246691 2024-04-14T08:22:27Z すじにくシチュー 12058 /* 学部ごとによる出題傾向の違い */ 早慶マーチなどの大学の英語では、専門科目の英米の原書を読む授業が、理系学部でも文系学部でも存在していたらしいですが(今は知りません)、たとえそういう科目の単位を取れてる大卒だからって、付属高校出身者は4500語レベルや5500語レベルの単語をいちいち片っ端(かたっぱし)から覚えてるわけではないのです。授業で習った単語だけ、(理系にとっての科学英語と同じように)専門用語のようなものとして覚えてるだけです。 wikitext text/x-wiki == 「高等学校外国語」は実質的に英語 == 文科省の指導要領では、教科名は「外国語」です。 しかし、科目名は「英語コミュニケーション」とか「論理・表現」とか、英語の科目しかありません。「論理・表現」科目の内容も、英語の学習です。 なお、一部の高校で第二外国語を開講していますが、その高校でも英語が必履修です。そもそも高校卒業の要件として、英語の単位を一定以上取得しないと、高校卒業の資格を取得できないはずです。 また、高卒認定試験でも、外国語科目では英語が必修です。 第二外国語を学ぶにせよ英語に専念するにせよ、どちらにせよ、高校生は英語を勉強する必要があります。 ;第二外国語の授業の現状について 大学受験では、いちおうは、文学部の仏文科とか独文科や、語学系の学部のフランス語学科とかの入試で、大学によってはフランス語やドイツ語などの第二外国語も入試も出る大学もあります(高校入試とは違い、大学入試では一部の大学では第二外国語でも受験できます)。しかし第二外国語の学習は検定教科書以外で自習などをする事になります。 フランス語とかドイツ語とかの検定教科書は、存在を聞いたことがありません(つまり、フランス語などの検定教科書は無いはず)。少なくともフランス語の検定教科書は存在しません<ref>pdf [https://konan-wu.repo.nii.ac.jp/?action=repository_uri&item_id=1159&file_id=22&file_no=1 前田美樹 著『高校でのフランス語教育: 現状報告 - 授業の活性化と発展に向けて,2011年3月, P35 ] 2023年10月5日に確認.</ref><ref>[https://www.jactfl.or.jp/wdps/wp-content/uploads/2020/03/JACTFL2_87-100.pdf 長谷川由起子 著『高等学校第二外国語必修化提言実現に伴う課題』,2014 , P92]</ref>。もし高校生向けのフランス語などの教材を教科書会社が出版・販売していたとしても、それは検定教科書ではありません。 なお、第二外国語の授業のある高校でのその授業の教材は、大学生向けの教材を用いたり、あるいはその高校独自の教材を用いたりしています。 ;第二外国語の大学受験について 大学入試共通試験(旧センター試験)の科目に、フランス語とドイツ語と中国語と韓国語もあります。語学系の学部・学科など、ごく一部の学科でなら、共通試験のフランス語なども使える場合もあ、そのような大学の学科なら一般入試でも使える可能性もあります。ですが、その他の多くの大学では、第二外国語ではなく英語を受験科目の外国語としては要求しています。 なお、一部の高校ではスペイン語とロシア語とアラビア語の科目もあり高校卒業のための単位として文科省により認められていますが、しかし大学入試共通試験(センター試験)の科目にはスペイン語などは存在していません。このように、高校の単位として日本国に認められていても大学入試共通試験にない科目もあります。 == IPA(国際音声記号)を学ぼう == IPA(International Phonetic Alphabet, 国際音声記号)とは世界中の言語の発音を表記できるように開発された記号である。これが、英語の単語を発音する際、重要であることは明白であろう。日本には、「英語には日本語にはない音が存在する」「英語は発音が大事」などと声高に叫ぶが、どうやってその音を調音するかという肝要なことは教えていない高校も存在するようだ。しかし、調音方法を知らずに第一言語に存在しない音を発音しろというのは不可能と言っていい。IPAを学ぶ際には必然的に音声の調音方法を体系的に学ぶことになる。したがって、フィーリングではなく理論に基づいた音声の発音が可能となる。 * [http://www.coelang.tufs.ac.jp/ipa/index.php IPAモジュール] * [[w:子音|子音]] * [[w:調音部位|調音部位]] * [[w:調音方法|調音方法]] * [[w:母音|母音]] * [[w:国際音声記号|国際音声記号]] * [[wikipedia:IPA_vowel_chart_with_audio|母音のIPAとその発音]] * [[wikipedia:IPA_pulmonic_consonant_chart_with_audio|子音のIPAとその発音]] * [[w:英語学#%E9%9F%B3%E5%A3%B0%E3%83%BB%E9%9F%B3%E9%9F%BB%E5%AD%A6|英語の音素]] == 参考書と辞書と単語集が基本 == 高校英語の検定教科書は授業で教師が解説するのを前提にしているため独学用には作られていなません。 なので、予習復習や独学や受験準備などは教科書では無理です。なので、受験準備などのために教科書とは別に高校レベルの参考書や単語集が必要ですので、早めに購入しておきましょう。 たぶん、普通の高校なら、単語集なども購入させられると思います。もし学校で購入を指定されていなくても、まずは高校基礎と高校中級レベルの単語集を購入しましょう。 実際の検定教科書を見てみると、高校1年向けの検定教科書で、もう高校3年向けの4500語レベルの単語集にある単語が紹介されていることもあります。 とはいえ、さすがに高校1年で4500語レベルまで習得するのは困難です。 そこで普段の家庭などでの勉強では3000語レベルまでを勉強しておいて、検定教科書を読んでて単語集で見当たらない語があれば、そこだけ辞書に頼るのがラクでしょう。ただし既に単語帳で覚えた単語も用法が不明瞭ならば辞書を引くと良いであろう。単語帳は意味は載っているものの、用法は詳しく載っていないことが多いからである。また、少しは辞書の使い方も練習すべきです。 ともかく、高校では単語集がないと、まともに英語を勉強できないだろうと思います 検定教科書は入試対策本ではないので、大学受験を考えている人は、英語の勉強では検定教科書ばかりに深入りしすぎてはいけません。 ともかく、大学受験対策は、あくまで市販の参考書と辞書と単語集などで行います。 == 大学入試に出づらい分野など == === 教科書の学習目標を真に受けないように === 高校英語の学習指導要領などが掲げている目標の中には、高校生には荷が重い目標もあります。 検定教科書の英語表現IIの実物を見比べると、どうも英語でのプレゼンテーションなどが指導要領などで目標に掲げられているようですが、しかし正直、高校生には英語プレゼンテーションは荷が重いでしょう。英語以外の教科の学習を考えると、高校段階では外国語でのプレゼンテーションの習得は非現実的です。 高校英語のプレゼンテーション単元も、中学英語の留学生との会話の単元などと同じで、実際の多くの高校の教育現場ではそれを実行できる場面はまずないかと思います。 2022年の時点では、文科省の英語教育の目標が、かなり高負担な内容ですので、大学入試の傾向とは検定教科書の傾向は、差が大きいかと思います。 昔から教科書と受験英語との間には差がありましたが、とくに近年、上述のように教育目標の負担増の理由で、入試との差異が大きくなっているだろうと思います。なので大学受験を考える人は、教科書の勉強だけでなく、うまく学習スケジュールを自己管理する必要があるでしょう。 === 自己意見の英作文は入試に出ないところもある === 足きりのある大学(たとえば国立大や医学部など)でないかぎり、採点の手間があるので一般入試では数十語もある英作文は出されない可能性が高い、実態があります。 さて、昨今の教科書では、日本のことを英語で説明する課題がよくあります。検定教科書にあるので、いちおうは新共通試験などの出題範囲ではあるわけですが、やはりこれも大学入試の出題傾向の兼ね合いを考える必要があります。 難関大学の入試で要求される単語は、抽象性の高い単語、または学術的な単語などです。 === スピーキング === 英語スピーキングは、大学入試では採点の手間があるので、一般入試ではスピーチの実施はされない。もし入試でスピーチングをやるとしたら、せいぜい、受験者数が比較的に少人数に限られる推薦入試でしょう。 また、英検3級以上ではスピーングの試験がある。英検などの英語系資格を取っておくと入試でいくらか優遇される場合があるので、そういったものを使いたい人にはスピーキングの勉強をする必要がある。 == 教科書ガイドを購入するほうがいい場合 == 教科書ガイドを買わなくても高校英語は勉強できるのですが、色々な理由により、教科書ガイドがあると効率的です。 英語教師のなかには低能な教員もいて、宿題などで、数学など他教科の予習復習の時間を無視して、毎週のように「辞書で教科書の英文の意味を調べてこい」などと、英語科目の事しか考えずに宿題を出す人がいます。 特に英語は、文系大学の志望でも理系大学の志望でも活用するため、教師がうぬぼれていて傲慢な場合があります。 このような英語教師の場合、もし教科書ガイドがあれば、辞書で調べる時間を、大幅に減らせることができます。教科書ガイドによって、空いた時間を活用することができ、単語の練習など、より本質的な勉強ができるようになります。 ただし、ガイドには、あまり細かい答えまで書いてありません。中学までの教科書ガイドとは違います。 == 英語勉強法マニアにならないように == ここに描かれた勉強法を覚えるよりも、まずは、とにかく、3000語レベルまでは英単語の習得のほうが重要です。勉強法マニアになっても、語学では価値がありません。勉強法を調べるよりも、実際に勉強してください。 とくに英語教育についての評論では、多くの評論家が英語教育を評論したがるし、また市販の英語教材などでも英語教育のノウハウをうたっている商品も多いですし、中には英語が苦手なのにウサンくさい勉強法(自称)を掲げる人も多くいるので、あまり勉強法そのものに深入りしないようにしてください。 勉強法に迷ったときにだけ、市販の参考書などに書かれた信頼できる勉強法などを参考にしてください。 == 単語 == まず、単語数3000語あたりの中級レベルを謡っている英単語集を1冊買いましょう。 初級レベル 1700~1800あたりのものは、これは一応高校レベルの単語も紹介していますが、ほとんどの単語が中学レベルなので、当面は読む必要がありません。 また、初級レベルの単語集のうち、中学で習わない可能性の高い単語は、中級レベルの単語集にも書いてあるので、わざわざ初級レベルを買う必要がありません。 さて、単語集の使い方は、赤シートを使って英単語の和訳を隠して、英単語のイメージを思い浮かべてから、その英単語の和訳を見て自分が思い浮かべたイメージと合致するか確認してみたりして、もし合致していたら次の単語へ、一方もし合致していなかったらチェックをして次の単語のテストを行う。これを1~2回もすれば英単語を覚えています。 中学単語については、意味のほうで中学では習わなかった意味がある可能性があるかもしれないので、そちらに注目してください。参考書をつくっている会社は、そうなるように工夫して参考書を編集しています。 === 学習の優先順位 === もしかしたら、英語の単語を覚える作業は文法等の勉強をすることよりも大切なことかもしれません。 市販の学習ノウハウ本でも、高校英語および大学受験英語では、英単語力が決め手になると主張されています<ref>船登惟希 『改訂版 高校一冊目の参考書』、KADOKAWA、2019年3月18日120ページ</ref>。 英文読解で、もし単語の意味が分からないと、せっかく文法の知識があっても、理解できない文も大学入試では多くあります。また大学入試では、暗記を要求される単語数が、ずいぶんと多くなります。 もっと言えば、単語という基礎があってこそ覚えた文の組み立て方が生きてくるのです 大学受験の標準(おおむね4500語レベル)~やや発展レベルまでの単語であれば、単語はいくら覚えても損はありません。学校で教えてもらう英単語だけで満足しないでください。近年では様々な出版社から英単語帳が出ています。 === 英単語集の選び方 === ==== 基本の要求事項 ==== ===== セットになる別単語も必要 ===== 高校レベルでは、新しい単語の意味を覚えるときは、単語の日本語の訳の字面だけを覚えても不十分です。 いくつかの予備校の単語集には英単語の勉強法も書かれており、どれを見ても大抵、「新しい単語の学習では、一緒につかう単語とセットで覚えろ」といった内容が書かれています。 動詞も同様、セットになる名詞と一緒に練習するべきです。もっとも、普通の市販の単語集なら、そういうセットになる単語も書かれているので、市販の単語集で勉強すれば問題ありません。 進出単語がセットでなくても覚えられるのは、せいぜい中学の前半までです。高校ではもう、単語を1語ずつ単独でバラバラに勉強するのは、やめましょう。 しかし、ネット上の英語勉強サイトには、サイト作者・企業の手抜きからか、日本語の訳だけを羅列したような低品質なサイトもあります。まったくネットは参考になりません。きちんと市販の単語集を買いましょう。 ===== 類義語や対義語、例文など必須 ===== まず、単語の学習では、けっしてヤミクモに多くの単語を覚えるのではなく、類義語や対義語との違いなども把握しなければなりません。そのため、例文なども交えつつ把握しながら勉強する必要があります。 なので、例文などの少ない単語集は、少なくとも高校基礎レベルとしてはアウトです。 ==== 結局どうすればいいか ==== 高校生向けの参考書は、セット語彙や類義語・対義語の紹介の必要性など、そういう事をきちんと理解しているので、とりあえず高校生むけの単語集を買えばとくに問題はないのです。 しかし、高校生向けではない市販の英検対策やTOEFL対策本などの資格本の中には、単語を多く掲載したいあまりに、例文や類義語などを省略ぎみの単語集も(英検対策本などでは)多くあります。 なので高校生は、英検対策ではなく、まずは高校生向けの単語集を買いましょう。1社の単語集しか使わないと例文がどうしても不足するので、少なくとも4500語レベル付近では1社だけでなく2社以上が必要です。 ==== 英検などは後回し ==== 現代では、高校の教科書レベル自体、上がっています。昭和の後半や平成の初期は、今で言う3000語レベルが、高校卒業レベルでした。 しかし、令和の今では、4500語レベルが、高校卒業レベルです。 なので本来なら、時代が大きく違えば、英検の級の数値は比較の参考になりません。つまり、年月とともに資格試験で保証された知識は、少しずつ錆びていくのです。 英検などを受けたいなら、高校生向けの単語集を買って習得したあとなら、必要に応じて英検対策本などを買うのは構いませんが、しかしいきなり最初から英検対策本などを買うのは失敗の道です。 なお、もし英検を参考にするなら、準1級までを買えば十分でしょう。 なぜなら、難関大の過去問から構成される桐原5500と英検1級の単語集とを比べてみましたが、傾向がだいぶ違っています。 ==== 英単語集のパターン ==== 英単語集には、主に2パターンあって、 :・ パターン1: 単語を分野別にまとめているパターン(たとえば「旅行」の意味の単語なら、trip と tour と travel をひとつのページにまとめていたりする)の英単語集 と、 :・ パターン2: もうひとつのパターンとして、入試出題の頻度順に統計的に並べた英単語集 があります。 初めて高校英語を勉強する場合は、とりあえず、'''分野別に単語をまとめたパターンの参考書のほうが、使いやすい'''と思います。 なぜなら、分野別の単語集のほうが、類義語や対義語なども、まとめて勉強できるからです。 いっぽう、入試出題の頻度順に統計的に並べた単語集は、高校後半~高校3年からの仕上げなどで用いるのが効果的でしょう。 さて、分野別に単語をまとめたパターンの英単語集で勉強する場合は、レベルが「中学3年〜高校初期」「高校必修」「共通テスト」「二次試験」と何段階に分かれていたりしますが、とりあえず、高校1年の時点で、「高校必修」レベル(3000語レベル)と「共通テスト」レベル(4500語レベル付近)の2冊を買ってしまってください。 高校必修レベルの単語集を買えば、その単語集で中学レベルの復習もしますので、わざわざ中学レベルの復習をふくむ単語集を買う必要はないのです。 自分で単語集を予習する際は、次のペースで予習します。「全部覚える」ではなく「全部勉強する」がポイントです。 :・ 高校1年: 「高校必修」レベル(3000語レベル)〜「センター試験」レベル(4500語レベル付近)の単語を高校1年の終わりまでに全部勉強する。 :・ 高校2年: 「センター試験」レベル(4500語レベル)の単語を高校2年の終わりまでに全部勉強する。 :・ 高校3年: 「二次試験」レベル(4500語レベル+アルファ)の単語を高校3年の2学期の終わりくらいまでに全部勉強する。 これとは別に単語集がもう少し必要ですが(入試用単語集を1~2冊)、まずは上記を出来るようになってください。 注意点として、学校から配布されるような東京書籍や桐原の基本的な単語集は(ただし桐原の灰色のヤツは難関大用なのでのぞく)、高校2年のうちに終わらせる必要があります。 つまり、高校1年のあいだに、予習をして、「高校必修」(3000語レベル)およびレベルの単語集を、ひととおり書き写して、勉強してしまう必要があります。(覚えられるかどうかは別として。) 4500レベルまでいければ理想ですが、それが無理でも必ず高校1年のあいだに3000レベルを終わらせてください。「終わらせる」とは「7割ほど覚える」という意味です(英語以外の教科も考えて、この数字)。これが終わらせられないと、大学受験の現役合格は難しいでしょう。一見するとハイペースですが、実は後述のように中学で習う単語が3000レベルには多いので、意外とラクです。 また、「全部覚える」ではなく「全部勉強する」とありますが、その単語の100%の単語を覚えられなくても70%を覚えたら、次学年の単語集を1回だけ全単語を学び始めてください(たとえ新単語を1回の書き取りで1周しただけでは30%しか覚えられなくても、もし新単語に1000語も触れたら合計300語を覚えられるから、そっちのほうが最初は効率的だからです)。 この、最初に1冊の書き取りをさらっとする勉強法は、他教科たとえば数学では通じない勉強法かもしれません。数学では公式だけでなく応用力なども問われるからです。しかし英単語はそういうのではなく、ほぼ単なる暗記なので(米英なら幼児・児童でも分かる程度の理解力で十分)、なので単語集をさっさと1冊、一周したほうが効率的に覚えられるのです。 さて、いまの単語集を7割ほど習得したら、次学年用の新単語集を購入して1回書き取りだけで一周しつつ、並行(へいこう)して、現学年用の単語集の完成度を上げていき100%に近づけていきます。 特に、高校2年用の単語集は、入試でも基本的な運用力を問う問題として狙われやすいので、それも押さえておきましょう。裏を返すと高校1年用の単語集は、これは例外的に高校受験で狙われやすいもの以外は深入りしなくても良いでしょう。 高校必修レベル(高校1年レベル)には、中学校できちんと5教科を勉強していれば、読みがある程度は身についているハズの単語が、多いのです。 なので、さっさと高校必修レベルをひととおり練習して終わらせてしまい、次ステップの「センター試験」レベルに時間を掛けたほうが得です。 なお、高校によっては、高校3年になっても「センター試験」レベルの単語集までしか、高校3年の英語の授業では扱わない場合があります。 なので、'''授業とは別に、自分で単語集を予習する必要があります'''。 では、なぜ、上記のスケジュール(「高校必修」レベルの単語を高校1年の終わりまでに全部勉強するスケジュール)のようにするのが合理的かいうと、最終的に高校卒業までに(つまり高校3年の終わりまでに)、「二次試験」レベルの単語集(4,500語+アルファ)を終わらせる必要があるので、そこから逆算して、高校2年の終わりまでに「センター試験」レベルの単語集を終わらせる必要があります。 なお、新共通テスト・旧センター単語とは別の大学受験単語の傾向では、早稲田大など一部の難関大と、国公立との傾向が違います。(wiki追記: 例外として東京外語大(国立)や英文科などを除けば、)平均的な地方国立大よりも早稲田大のほうが英単語が難しいです<ref>[https://www.youtube.com/watch?v=E-U8m3en_E0 『英単語暗記必勝法!今こそ苦手を克服せよ!』 2022/12/13 ]</ref>。理系の人は、そういう早稲田みたいな難関大の英単語を相手にしてはいけないというか、仮に購入したとしても、けっしてその難関大用の単語集の全単語を覚えようとしてはいけません。 {{コラム|5000語レベル以上の単語集は真に受けないように| 難関私大の6000語レベル以上ありそうな英語は、そもそも正しい英語なのか、疑問もあります。20世紀の話ですが、1990年代に売れた書籍『超勉強法』によると、英文科のある大学教授が欧米に留学したら、自身の英語が欧米人には通じなかった、というエピソードが紹介されています。(『超勉強法』著者の野口悠紀雄(のぐち ゆきお)のことではない。野口が聞いた、ほかの大学教授の話。)そもそも1990年代以前の昭和の英文科の大学教授がこのような惨状なので、あまり古い1990年代~2001年ごろを初版とする単語集にある難しすぎる単語は、たとえ有名大学で出題された過去がある単語および例文でも、あまり真に受けてはいけません。 英語の教科の場合、入試問題は、たとえ大学教授が作成しているからって、それだけでは問題の質を信用してはいけません。おそらく、20世紀の大学受験英語では、実用例を無視した、あまりに難しい言い回しの英文が出題されていた時代も過去にはあったのでしょう(あくまで難関私大の話です。平均的な偏差値の私大の話ではありません)。 難単語は、複数の大学で出題されるなどして、ようやく、まあ勉強する価値のありそうな単語です。とはいえ、いくつも各大学の過去問集を見ることは無理なので、そこで難関大むけの単語集で、近年に改訂・出版された5000語レベル以上ありそうな単語集を複数社、読むことになるでしょうか。 このように、4500語レベルの終盤までと、それ以降の5000語レベル以上とでは、単語の勉強法を微妙に変える必要があります。 1990年代後半や2010年までは「ゆとり教育」などと教育用語では言われますが、しかし受験英語など、一部の科目の難関大の英語は、今よりも難しい面もあるので、勘違いしないように注意が必要です。 }} さて、高校2年の終わりまでに、4500レベルつまり「センター試験」レベルの単語集を終わらせるためには、逆算すれば、高校1年の終わりまでに3000レベルの「高校必修」レベルの単語集を、勉強してしまう必要があることが分かります。 そうするためには、普段からの予習も必要です。 また、もし「今読んでいる章を完全に覚えてから、次の章に進む」などというふうに勉強していると、特定の分野の単語ばかりを覚えることになってしまい、入試に対応できません。特に、学校で、このような分野別にまとめられた英単語を用いている場合に、気をつけましょう。 また、現代の高校英語の単語の紹介順序は、もはや学年別になっていません。高校1年の検定教科書でも、すでに3000語レベルの単語や4500語レベルの単語も平気で紹介したりしています。 現代の検定教科書がそうだということは、現代の入試もそうだという可能性があるということです。なので、あまり単語集の最初のほうばかりに詳しくなっても、現代ではあまりメリットがありません。 また、予習をしないと、たとえば学習ペースの配分ミスを起かしやすく、たとえば高校3年の終わりごろになって、やっと桐原4500語・東京書籍4500語レベルにしか到達できずに、そのため高校3年終わりの時点では「二次試験」レベルに対応したプラスアルファの単語集(旺文社や、予備校系の単語集)に到達できずに、志望校に不合格になってしまうような、ペース配分の失敗を起こしやすい原因にも、なります。 なので、とにかく、予習をして、単語集の先のほうへと進んでいくのが、合理的な勉強法なのです。 ==== 予備校系パターン ==== 単語集にはさらに、「論理性重視で解説が多めの単語集」と「単語が多めの単語集」があります。 で、桐原・東京書籍・旺文社は、実は単語が多めの単語集です。 高校単語の範囲は広いので、少なくとも4500語レベルについては、まずこの3冊のうちの2冊が、受験までに、ほぼ必須で必要です。 しかしこれだけだと、論理的な知識が不足します。桐原などの単語数が多めの単語集などでは、スペース不足などの都合で解説できない知識が、いくつもあるのです。 そういうのを、予備校などの補足的な単語集で補う必要があるのです。だからもう高校2年の半ばあたりから、予備校系の単語集も読み始めてしまうのも、良いかもしれません。 ですが、あくまで予備校単語集「も」です。基本はまず、桐原・東京書籍・旺文社のような、高校英語を一通りカバーしている単語集をベースにするべきでしょう。 ==== 2社目の単語集が必要 ==== 単語集は、1社だけでは対応できません。たとえば東京書籍を使っている場合、東京書籍の単語集には例文が書いてある用法でも、桐原の単語集には例文が書いてない用法もあります(例文なしで意味紹介のみ、という場合がよくある)。同様、桐原の単語集にはあるのに東京書籍にない用法もあります。 この問題に対応するため、高校2年になってからは、たとえば東京書籍を使っているなら、もう一つ別の会社の単語集'''も'''使いましょう。何を使うかは、個人の判断に任せます。しかし、何を使おうが、1社だけでは太刀打ちできません。(昭和の昔なら、ここまで考えなくても大丈夫でした。まだ高校2年生は、昭和なら単語集は1社だけでオッケーだった。しかし令和だと事情が違います。) 実際、塾・予備校などでも、高校で良く買わされる単語集(東京書籍や桐原)とは別の単語集・熟語集をもう1社ぶん買い与えるのが基本であり、受験生は結局、2社の単語集・熟語集を使うことになります。別に東京書籍・桐原のもう一方でなくとも、予備校系の単語集でも良いし、あるいは旺文社ターゲットなどでも構いません。とにかくもう1社ぶん、必要です。 別に2社の単語集を読み比べる必要はありません。新聞のメディアリテラシーの練習とかじゃないので。、 また、一応、単語集のレベルに応じて、上級レベルの単語帳で、過去に下級レベル単語集で習った単語の新しい別用法を教えることもよくあります。なので、東京書籍でも桐原でも、まずは1社ぶんを全部やるのも必要です。どちらかをメインにすると決めたほうが良いでしょう。 高校1年レベルの単語集(3000語以下)はもう1社目では仮に省くとしても(なお、省かずに1周しても構いません)、それでも高校2年次以降の単語集で、もう1社ぶんが必要になってしまいます。このため、どうあがいても単語集だけで最低もう2冊は(2年生の4500語レベル単語集と、やや難関大用の単語集で、合計2冊)、これが平均的な私大に一般受験するのでも必要です。 昭和の昔なら1冊だけで十分だったかもしれませんが、しかし令和は入試の単語が増えたので、そういうわけにも行かなくなりました。 また、上記と関連して、新共通テストも3000語レベルとされていますが、実際には4500語レベルの単語も新共通テストに出てくると思われます。なぜなら上述のように、3000語レベルと4500語レベルの単語に明瞭な境界線は無いからです(さすがに5500語レベルとか7000語レベルとかを要求する事は新共通テストでは出題が無いというだけです)。少なくとも20001年ごろの旧センター試験の時代、学校で渡された3000語レベルの単語集をこなしていてもセンター対応できない受験失敗例もよく聞かれました。(当時、センター試験の出題傾向について上述のような問題が知られていなかったので、進学校でも今でいう3000語レベルしか対応しない高校もよくあった。) :※ なお、説明の都合上、2001年ごろについても「3000語」レベルとか言いましたが、実際には単語数の算出基準が変わっており、現在の単語数の数え方には一致しません。 === 単語の練習法 === かといって、いきなり高校1年で入試対策レベルの単語集を使っても効率が悪いので、まずは基礎レベルの単語から始めるのが良いでしょう。 読解練習や文法練習よりも先に、単語力を増やす練習が大事です。熟語集の暗記よりも先に単語集あるいは単語・熟語集の暗記を優先してください。 英単語を勉強する際、まず最初は、なるべく早く、その単語集の全体の単語と例文を書き終えます。もちろん、それだけでは全部の単語は覚えられませんが、そのほうが次の理屈で効率が良いです<ref>[https://www.youtube.com/watch?v=E-U8m3en_E0 『英単語暗記必勝法!今こそ苦手を克服せよ!』 2022/12/13 ]</ref>。 たとえば1000語ある単語帳を2週間ですべて単語と例文をそれぞれ1回だけ書き写したとしましょう(実際は他教科もあるので無理かもしれないが置いとく)。 たとえ3割しか覚えられなくても、なんと計算上、300語もの単語(=1000×0.3)をたった2週間で覚えられます。たった1周するだけで良いのです。というか、むしろ、けっして3回や5回も書き写すのではなく、最初はたった1回のほうが良いのです。 もしこれを同じ期間に100個だけ限定して熱心に難度も読み書きして覚える方法をすると、たとえ仮に100%覚えたと仮定しても、計算上は100語までしか覚えられません。まして実際には100%は無理でしょうから、よくて80%を覚えて、80語ていどでしょうか。 よって、先に単語集の単語を、たとえ覚えられなくても良いので、全部の単語を書き写すほうが効率が良いのです。 じっくりと何度も読み書きをして確実に覚えるのは、そのあとからです。 入試の現状で、どの教科も覚えることが増えて時間が無いのに、英語では多くの単語を覚えないといけないので、こういう工夫が必要です<ref>[https://www.youtube.com/watch?v=E-U8m3en_E0 『英単語暗記必勝法!今こそ苦手を克服せよ!』 2022/12/13 ]</ref>。 また、参考サイトには書いてないですが、とにかく早めに単語を学ばないと、いつまで経っても英文読解の勉強を始められません。よって、高校入学後の割と早い時期や、および高校2年の初めごろに、まずは、それぞれの学年にあった単語集の単語を一通り通読する必要があります。 高校や塾などの小テストで週に50語~100語とか覚えるのは、それはそれでヤレバいいのですが、それとは別に、単語帳を1周、ぜんぶ早めに書き写すのです。 大学入試では、高校入試と違って、国公立の大学ですら、理系の高校生などを無視した、教科書レベルをやや超えた難単語を平気で入試に出してきます。このため、とにかく上記のような工夫が必要です。 標準レベルの3000語レベルの単語が高校2年あたりでひととおり終わったあたりから、桐原・東京書籍の4,500語に加えて予備校など受験対応の単語集も買って練習します。まだ、平均レベルの単語集を覚え切れて無くても構わないので、受験レベル(4500~5500)の単語集を勉強します。 学生・受験生の勉強科目は、数学など、英語科目以外にもあるので、大変でしょう。ですが、うまくスケジュールを工夫して時間を作ってください。 さらに単語を定着させるためには、英文読解やリスニングなどの単語以外の他の練習もします。 === 単語集のレベル別の利用法 === ==== 初級レベル(1700~1800語)はまず不要 ==== 中学できちんと勉強してきた人なら、初級レベル(1800語)レベルの 単語集には、高校生には不要です。これは、どちらかというと中学3年~高校受験用のものです。 普通に受験勉強をしてきて偏差値48以上ぐらいの人なら、1800語レベルは買う必要はありません、。 本屋で表紙を見ると「高校基礎レベル」とか書いてあるかもしれませんが、ウソではないですが誤解を招く表現です。表紙の宣伝文句は信用しないでおくのが安全です。 この1700~1800語レベルは、おおむね英検3級レベルか、それに毛の生えた程度です。英検3級と英検準2級との間には、かなり難度の開きがあるので、このレベルの教材は英検教材コーナーにはないので、これはこれで1700~1800語レベルは出版・販売されてると便利です。 この1700~1800レベルの後半を見ると、中学で習わない単語も書いてありますが、しかしそれを買わなくても3000語レベルにも同様の単語が書いてあります。 たとえばある1700レベルの単語集で injure (けがをする)という単語を見つけましたが、同じ出版社の 3000語レベルでも同じ単語がありました。 わざわざ初級レベルの単語集で練習しなくても、中級(3000語レベル)の練習での例文の書き取りなどのついでに、自然と初級レベルの単語のスペルも身についていきます なお、初級レベル(1700~1800)の単語集の中に書いてある「高校1年 基礎レベル」みたいな難度の情報は、あまり信用してはいけません。(実際に買ってみて読んで確認しました。)ある単語集でそのレベルの単語を確認したら、いくつも中学レベルの単語がありました。 year (年)とか month (月)とかの中学で習ったはずの単語が、「高校1年 基礎レベル」になっていました。 どうしても1700~1800語レベルを活用するなら、どっちかというと単語練習よりも、高校受験のレベル確認用と言うか、「高校受験の終わり~遅くとも高校1年の1学期の終わりまでには、大体この程度の単語は出来るようになって欲しい」といった確認のためのツールでしょうか。 ==== 3000語レベル ==== ===== 基本 ===== 特別な事情がないかぎり、高校生は3000語レベルから単語集を勉強すると良いでしょう。 いきなり3000語を使うのは中学と高校の橋渡しに不安かもしれませんが、しかし出版社側が3000語レベル本の冒頭の第1章で、中学単語の復習およびそれを高校の視点で理解しなおす勉強をしてあります。桐原と東京書籍のどちらとも3000語レベルの本の第1章は、そういう中高の橋渡しのための単語の紹介です。 逆に、4500語レベルの本には、そういう橋渡しが書いてないので、高校1年では4500語レベルは不適切です。 * スペル暗記の対象について スペルの暗記について、実は中級の単語であっても、すべてを暗記する必要はないし、すべてのスペル暗記は面倒です。優先して覚えるべき単語は、知的レベルの高い単語です。 また、東京書籍『コーパス』シリーズの単語集の前書きを見てみると、実は3000語レベルは「受信語彙」としており、つまりリーディング用の語彙にすぎず、受験の英作文などでは高校新出単語の多くは基本的に用いないことを想定しています。 受験では短時間に英文を書かないといけないので、中学レベルに毛の生えた単語力に、若干の高校中級レベルの単語を加えて、それで英作文を完成させれば十分なのです。もちろんビジネスの仕事の英文とは違いますが、そういう実務の英作文はそういう専門家の大人にまかせればいいのであり、高校生には関係ないです。 東京書籍の意見ではないですが、具体的に単語例を挙げて説明するなら、たとえば respond「応答する」 と nod 「うなづく」だったら、respondのほうを優先してスペルを覚えなければなりません。 なぜなら、respond のほうが名詞形の response などもあり、応用が多く、意味も広範であり英作文などで使わざるを得ない可能性が高いからです。一方で nod のほうの用途は、誰かがうなづく場面どまりです。また、ノッドの名詞形や形容詞形はないと思います。 また、nod はビジネス英語などでも agree 「賛成する」で言い換え可能です。入試の英作文ですら、ほとんどの場合は agree で十分でしょう。 この nod のように、利用価値の低い単語は、スペル暗記は後回しです。せいぜいリーディング用に「そういう単語もあるんだなあ・・・」と知っていれば十分です。 実は中堅私大や地方国立の英文の単語は、学科によっては案外センター試験ほど難しくない場合もあります。 さて、残念なことに、高校の単語集あたりから、だんだんと英語教育の質が形骸化しており、単語集がやみくもに単語数を多く紹介したいあまりに説明不足になってきています。 たとえば中級単語で content (満足する)という形容詞があるのですが、じゃあ satisfied (満足する)とどう違うのかは、単語集には書いていません。なぜならcontent は中級レベル、satisfied は初級レベルの単語なので、本を別冊にまたいでしまうからです。こういう縦割り教育なのが現状です。 辞書で content を調べるような思慮深い人は、他の単語を覚える勉強時間が不足してしまうので入試では不利になってしまうわけです。ひどいもんです。 * 2冊買うべきかどうか 3000語レベルの単語集(桐原『データベース3000』や東京書籍『コーパス3000』)については、2冊そろえるべきか1冊に集中すべきか、判断が分かれるでしょう。実際に各自が単語集を読んでみて判断してください。べつに2冊あっても構いませんし便利ですが、他の教科の勉強などもあるので、難しいところです。 旺文社の『英単語ターゲット1200』も、中級レベルでしょう。 あるいは、2冊そろえれば例文の数が単純計算で2倍になるので、辞書でいちいち高校レベルの例文を探す手間が減りますので、2冊目の単語集にはそういう活用法もあるかもしれません。あるいは、問題練習とかの手間を2冊目の単語集で減らせるかもしれません。 このように2冊目の単語集は便利かもしれませんが、しかし目的が上級レベル(4500~5500語)と中級レベル(3000語)では違います。 まあ各自がどうするか判断してください。 なお、東京書籍『コーパス3000』は、数字だけ見れば桐原『データベース3000』と同じですが、しかし東京書籍のほうで3000語レベルのもの(たとえばinjure)が桐原の4500語レベルに書いてあったり、あるいは別の単語ではその逆で桐原3000レベルの単語が東京書籍4500語に書いてあったりと、あまり分類は明確ではありません。 ===== 3000語の語法は初めは深追いするな ===== 偏差値の低め~平均程度の大学のなかには、4500語レベルの単語をあまり出さない代わりに、3000語レベルの範囲の単語で、やたらと細かい語法を要求する問題もあります。 しかし、4500語レベルや5500語レベルも勉強する一方で、いつまでも3000語の語法ばかりを覚え続けるわけにもいきません。 だから勉強法としては、極端なことを言えば、3000語の語法を熱心に練習するよりも先に、まず4500語レベルの単語集で一通り、単語の訳を暗記したほうがマシです。 実際、入試問題にも、そういう傾向もあります。 文系私大の偏差値50前後の平均的な大学が3000語レベルの細かい語法を4択問題などで聞いてくる一方で、文系私大の偏差値60くらいの大学のある出題が、4500語レベルで単語の和訳の丸暗記だけで4択問題が解けてしまう、といったような出題事例も少なからずあります。 ==== 上級レベル(4500~5500)の単語集について ==== ===== 原則 ===== もし大学受験を目指しているなら、高校3年くらいになったら、4500語+アルファの単語集にステップアップします。ここでいうアルファは、予備校などの出している、補足的な単語集です。 いっぽう、桐原の5500語レベルの単語集は、あれは志望校などの傾向の確認用などで、辞書的に使うものです。 桐原5500をメインにするべきではありません。桐原4500語または東京書籍4500語を一通りクリアしたのなら、メインの単語集としては旺文社1900または予備校系の単語集に入るべきです。 5500語レベルの単語集の使い方なのですが、かなり難しいです。ここでいう5500語レベルとは、桐原『データベース5500』を想定しています。 旺文社の(1200ではなく)『英単語ターゲット1900』は、実はやや高レベルです。東京書籍4500・桐原4500にはない単語でも、旺文社1900には記述されていることもあります。なお、それらの単語の元ネタは、受験過去問もありますが、じつは英検2級~準1級あたりです。 旺文社のは、数字の小ささにダマされてはいけません。桐原や東京書籍の数字とは、旺文社の数字は意味が違います。 桐原4500はその装丁の厳めしさなどに比べて、実はやや単語のレベルは控えめです。東京書籍も桐原のスタイルを踏襲しているような所があり、やや控えめのレベルです。 だから旺文社は、派生語などで、桐原・東京書籍が紹介してない単語をポンポンとたくさん紹介しています。 このため、現代でも勉強法としては、「まずは高校2年の終わりまでに東京書籍または桐原の出している高校用参考集をベースに勉強。高校3年あたりで旺文社のレベル高めの単語集を買い足して勉強する」といった感じになるでしょうか。 4500語レベル単語集では、桐原と東京書籍のどちらの単語集でも不足です。なぜなら、単語集1冊だけでは、例文不足かつ解説不足により、あまり役立ちません。なので少なくとも上級レベルだけ、出版社を変えて2冊、必要でしょう。東京書籍4500+旺文社1900にするか、それとも桐原4500+旺文社1900にするか、判断は読者に任せます。 具体的に単語をあげて説明すると、たとえば「限定する」という意味のrestrict と confine、ともに似たような意味ですが、単語集には意味の細かい違いは書いていないか、書かれていても強調されていません。 桐原の単語集だとこの2つが類義語だという情報はあるのですが、しかしニュアンスの違いが説明不測です。 一方、東京書籍および旺文社だと、restrict を「制限する」の意味で説明しているのでニュアンスの違いは分かりますが、しかしconfineと類義語である情報が欠落していました。 さてconfine のほうが、「地理的に制限する」=「閉じ込める」のような意味合いが強いのですが、旺文社の単語集だと「閉じ込める」の意味もあるのですが、しかし桐原の単語集にはそこまで書いていないのです。 かといって東京書籍のほうには、confine の「限定する」の意味が書かれていません。 また、restrictは(限度内に)「制限する」という意味もあります。むしろ、こっちの意味で紹介している単語集もあります。 どちらの単語集を使うにも、例文が不足しており、ひとつの単語集だけでは意味がまったく分かりません。困った教育状況です。本来なら入試に出題する単語を減らすなどして理解を深めさせるべきでしょうが、しかしそういった教育が出来ていないのが日本の現実です。 それでも、まだしも大学受験用の単語集は、なんとか教育効果を高めようとした形跡も見られるのでマシです。なので、単語集を2つ組み合わせると、なんとか役立ちます。一方、TOEIC 高得点用の教材とか英検の1級あたりの教材の単語集とか、やたらと単語数を多くしているばかりで、ひどいものです。(資格本の活用法については別セクションで述べる。要点:出題傾向を把握する目的だけに英語資格本を使う。) なお、桐原の場合、紹介する単語数そのものは旺文社などと比べて減りますが、その代わり、桐原の密度の高さが長所であり、桐原では他の単語集には無い語法などを紹介しているなど、単語1つあたりの情報量が桐原では増えています。なので、桐原の単語集も油断はできません。 一見すると、桐原の単語の項目のひとつずつの情報量は多くないように見えますが、しかし、桐原では別ページの紹介単語を用いた熟語をまとめたページなどがあるので、それを含めると桐原の単語ひとつあたりの情報量は多くなります。 かといって高校生としては、英単語集ばかりをそう何社も比較して勉強するのは無理でしょうから(数学など他教科の勉強も必要だし、英語の勉強も単語以外にも読解練習やリスニングなど多々あるので)、受験では結局、すべての単語は覚えきれない状態で挑むことになるでしょうか。 大学受験もその後の資格試験も、けっして満点はとる必要は無く、人生の目的に必要な志望校などの合格最低点を上回って合格さえ出来ればいいのです。 別に大学受験の英語に限った話ではないですが、大学受験において、平均以上の大学の入試では満点をとるのは基本的には困難であり、普通は満点は無理です。小中学校の校内テストと事情が異なります。 ===== 4500語以上のスペルは実は覚えなくていい ===== 実を言うと英語のスペルの暗記については、4500語レベルおよびそれ以上のレベルの単語のスペルは、まず覚える必要が低いです。 なぜなら英作文や和文英訳であまり使わないからです。 また、桐原5500や、東京書籍4500の後半部の単語などは、実はもうその1~2回のスペル練習すら、しないでも済むのです。おおよそのスペルと用法のイメージを頭に入れれば十分でしょう。 また、グローバル人材の育成などを目指す大学ならば、英作文などを要求してくると思いますが、だったら英作文で使うようなレベルの中級英語(4500)で十分なのです。むしろ、4500語レベルですらスペルミスなく習得していたら、かなりの勉強家です。 ましてや5500語レベルの単語については、読解問題で出題されたときに意味を把握できればいいのです。 仮に、桐原5500語レベルの単語のスペルを暗記させる問題を出す大学があっても、どうせ他の現役受験生の多くも解けない問題なので、実質的にスペル暗記は5500語レベルでは無視していいでしょう。 一部の浪人生で文系専願の人なら解けるかもしれませんが、難関大を目指して4浪だの8浪だのしている連中と、現役生は張り合ってはなりません。 TOEICなどの国際的な資格試験では普通、書き取りをしません。なぜなら採点の手間の都合で、TOEICでは選択問題ばかりです。大学側が入試で入学後のTOEIC対策などを考えた出題をしたとしても、スペル対策はもはや不要なのです。 英検でスペル暗記を使うかもしれませんが、しかし英検は日本でしか評価されません。 桐原5500は論外として、 正直、時間的に現役高校生が、桐原『データベース4500』と東京書籍『コーパス4500』または旺文社『英単語ターゲット1900』を使いこなすレベルにクリアするのですら、高校3年間では少しキツいと思います。たぶん多くの高校生は予想では3年生のときに「上級レベルの単語集の用法や用例を覚えている最中に、時間切れで、高校3年の卒業式を迎える」という結果になると思います。なぜなら、このレベルで、急に単語を覚えるのが難しくなるからです。かといって中級レベルまでしか勉強しないと、卒業後の実務のリーディングにも不便なので、上級レベルを高校3年で教えるのにも意義のあることなので、教育者には悩みどころなのでしょう。 なので勉強法としては、4500語レベルをクリアできなくてもいいので、ある程度の勉強をしたら、予備校などの出しているレベル高めの単語集をいくつか買います。 諸般の事情で、東京書籍・桐原・旺文社が紹介していないが、高校生に勉強してほしい定番の単語みたいなのがあって、そういうのが予備校系の単語集で紹介されています。 ==== 予備校の単語集は何をしているか ==== 歴史的な事情で、今の4500語レベルの単語集には書かれていないが実は昔の1990年代ごろまでの高レベル単語集には書かれていた単語があります。 そういう単語が、難関大学で狙われるかもしれません。 旺文社1900や桐原・東京書籍4500語にない単語の正体のひとつは、そういう昔の課程の単語です。 で、それが予備校系の単語集の元ネタのひとつでもあります。 東京書籍・桐原の3000語レベルや4500語レベルで旅行会話のような実用英語が増えたりビジネス英単語などが増えたので、昔なら4500語レベルに書いてあった単語のいくつかが今は5500語レベルにハミ出ているのです。 なので、予備校などの出す、受験レベルの単語集が1~2冊は必要です。そういうハミ出た単語だけ、あとは予備校系の単語集で抑えておけば十分なのです。 予備校の単語集を見てみましたが、実はそれほど特別な英単語はないのです。また、じつは、桐原4500などの学校向け単語集の単語すべてを均等に覚える必要はなく、やや傾向があります。 たとえば旅行英語で使う単語など、検定教科書にあるから桐原・東京書籍は紹介しているものの、あまり大学が重視してない項目もあります。 だから、桐原/東京書籍 に加えて、旺文社ターゲット、さらに別の予備校系などの高校3年レベルの単語集を何か1~2冊つかって知識の穴埋めをすれば、もう十分でしょう。 もしかしたら、高校2年からもう、予備校の出版している難関向けの単語集を使ってもいいかもしれません。 市販の予備校の単語集を見ても、けっして、桐原5500語レベルの単語を片っ端からは教えていません。桐原5500のアレは、高校生には習得が無理だと思われているのでしょう。 ==== 受験英語の特殊事情 ==== 大学受験英語の特殊な事情ですが、明らかに高校範囲外で実用的にもメッタに使われていない英単語が難関大学で出されており、当然に読めないのですが、しかしなぜか他の文章の単語から文脈にとって意味をとれるようになっています。 もちろん、現実ではそんな好都合なことは滅多に無いのですが、受験の英文はたいてい都合よくそうなっています。 また、万が一、他の英文の文脈から読めない単語が出ても、どうせ他の多くの受験生も解けないので、そういう問題は解けるようにしておく必要がありません。 ともかく、入試対策としては最低限、東京書籍4500・桐原4500をベースに、さらに旺文社1900で派生語を固める必要があります。 しかし、それとは別に、予備校などの出す、プラス・アルファ的な受験レベルの単語集が1~2冊は必要です。 歴史的な事情で、今の4500語レベルの単語集には書かれていないが実は昔の高レベル単語集には書かれていた単語があって、4500語と旺文社1900をひととおりクリアしたあとは、そういう歴史的経緯のある単語だけ予備校単語集で攻略すればいいのです。 ==== 英単語集の読書計画 ==== 最初から高校在学中の読書計画に、英単語集の読書を想定して組み込んでおくと良いでしょう。また、桐原・東京書籍・旺文社あたりに基本の単語集とは別に、他社の少しだけ発展的な単語集を読書感覚で読むと良いでしょう。 高校必修の範囲を越えた単語や派生語などは、読書感覚でひととおり解説に目を通すだけの単語集の勉強でも十分に対応できる場合も多くあります。 しかし、いちども読んだこともない単語は、さすがに入試で対応できません。だから、一度でも解説に目を通してしまえば、済む単語も多くあるのです。 なので、広く浅くでいいので、読書しておく必要があります。 === 大学受験に必要な単語量について === 一般に、大学受験で、難関な学校の英語を読み解くには4000語程度を知っていることが望ましい。 世間でよくある勘違いとして、「近年はリスニング導入などにより単語数が減ったから、用法を覚えるのを中心にすべきだ」という知ったかぶりの勘違いがありますが、しかしそれは「90年代のような(現代換算で)6000語レベルとか7000語レベルとかやってた受験戦争の時代ほどは、2020年代では多くの単語を覚える必要が無い」という意味です。そんだけ昭和や平成初期の受験戦争は、片寄っていたというだけです。現代だと早稲田や上智の英文あたりしか出さない難しい英単語を、昔はマーチ文系学部や関関同立なども出していた、というだけです。 2020年代の現在での平均的な大学受験レベルである4500語レベルまでは、さっさと目指してドンドンと覚えてください。もちろん用法なども覚えるのは当然です。 「単語数が減った」という意味は、「英検1級にしか出ないような超マニアック単語は出ない」という意味です。(たとえば redemption 「(キリスト教用語)人間の罪のあがない」(なお、おそらく「罪」とは宗教的な原罪)みたいなマニアック単語は大学受験では出ないという意味。) 2001年ころは実際に入試に英検1級の redemption が出たかはともかく、ひょっとしたら英検1級単語もチラホラと出るかもしれないとして、一部の文系受験生はそういう単語も勉強してたわけです(まだ今ほど受験ノウハウが、インターネットで共有されてなかった時代だったので)。 つまり、難解な単語も多い桐原5500は、あれでもマシなほうなのです(なぜなら、実際に入試に出た単語を中心に掲載しているので)。英検1級の単語集は、桐原5500をはるかに超え、もっとマニアックで(高校生にとっては)ひどい教材です。そういうのが英検1級です。 === 学部ごとによる出題傾向の違い === 単語集などで出題校を見ると、学部名が書いてないですが、実際は学部によって出題傾向がけっこう違います。少なくとも1990年代はそうでした。 基本的に、理系の学部では、5500語レベルのような、あまりに難しい単語は出ません。そういうのを出すのは、よほどの難関私大や、それも文系の学科です。少なくとも2001年ごろはそうでした。理系学部が出すのは基本、化学英語を除けば、せいぜい旺文社ターゲット1900のような、どこの書店の参考書コーナーでも入るような単語です。少なくとも2001年ころの私大では、法政大学の理系学部および東京理科大および四工大(芝浦工大や工学院大など)はそうでした。2001年くらいの昔なら3000語レベルの単語力でも、マーチ理系や四工大に合格しました。もしネットなどで歴史として「4500語レベルが無いと、2001年ごろはマーチ理系や四工大に受からなかった」と主張する人がいたら、ウソツキです(あくまで2001年ごろは、3000語レベルだった、という過去です。2020年代ならマーチ理系の四工大でも4500語レベルが出るかもしれません)。 今だと4500語レベルの単語集(東京書籍や桐原のヤツ)を高校で与えられることも多いでしょうから「簡単そう」だと誤解してそうですが、しかし実際は4500語レベルは決して簡単ではないのです。塾・予備校などの関係者で「簡単だ」と言ってる人は、まあ文系科目しか出来ないハッタリ人間か、理系なら浪人出身か、現役合格の実績なら医学部受験サイボーグみたいな人とかです。 理系の学部の入試では、英文科ほど難しい5500語レベル以上の単語は出てきません。もし仮に出てきたとしても、相手する価値が無い大学です。それとは別に、理系の大学では、科学英語などが出る場合があります。特に私大は、少なくとも1990年代はそうでした(当時、科学英語の参考書が少ないにも関わらず、マーチでも青学あたりがそういうの出していた)。私立だけでなく国立でも、東大や東工大などの国立の難関理系大学でも、昔は科学英語を出してた時代もありました(今はどうか知りません)。 ほか、最近はどうか知りませんが、桐原5500の単語を見ると「輸血」の英語など、ちょくちょく医学的な英語があったりして、90年代くらいの昔は出たようです。 常識的に、医学部などで、そういう長文でも出したのでしょう。もしかしたら他学部の出題かもしれませんが、志望以外の専攻の専門用語までは付き合いきれません。 もし今の書店の受験参考書コーナーにそういう科学英語の単語集があれば、今でも出るのだろうし、無ければ、出ないと出版社が判断したのでしょうから、書店の状況に従えば安全だと思います。 赤本などの過去問などで、もしかしたらそういう専門的な英単語を勉強できるかもしれません。志望校にも寄るので、念のため、過去問などを確認してください。 もし、普通の書店にある単語集に無い単語ばかり出す国立大学があれば、批判されるべきです。国民の税金で運営されているのですから、どこに住んでる国民でも勉強できる単語でないといけません。 私大の単語はどうか知りません。 早慶マーチなどの大学の英語では、専門科目の英米の原書を読む授業が、理系学部でも文系学部でも存在していたらしいですが(今は知りません)、たとえそういう科目の単位を取れてる大卒だからって、付属高校出身者は4500語レベルや5500語レベルの単語をいちいち片っ端(かたっぱし)から覚えてるわけではないのです。授業で習った単語だけ、(理系にとっての科学英語と同じように)専門用語のようなものとして覚えてるだけです。少なくとも立教大学の法学部の付属高出身の卒業生はそうでした。 === 単語の小テストばかりを受けても、復習しなければ単語力は身に付かない === 学校や塾で、単語の小テストを受けさせられる場合もあるでしょう。「単語集の○○ページから△△ページまでを小テストで出すので、書き取り練習して覚えるように」という小テストです。 たいていの高校生の場合、予習はテスト前にしますが、いっぽうで復習をしているかどうかは、個人任せです。 ですが、小テストをいくら受けても、復習しなければ、単語力は増えません。 もし、単語の小テストを受けたままで、その後は復習せずに、ほったらかしにしてしまったら、何も単語力が伸びません。 単語テストは、テストを受けた後に、自分の未修得の単語を復習するために存在しているので、テスト後に復習をする必要があります。(もちろん、テスト前に予習も必要である。予習をしていれば、未修得の単語が減るので、復習の単語数が減る。) 要するに、小テストの使い方は、全国模試の使い方と同じです。 全国の高校や塾のうちの一部では、どうも、小テストの目的を忘れていて、「とにかく毎週、単語の小テストをすればいい」と安易に考えているような教育も、ある気がします。 ここを読んでいる読者高校生は、小テスト本来の目的を思い出して、小テスト後には復習と予習をしましょう。 さて、たいていの高校や塾では、1週間に1回のペースで、単語20〜50語ほどの記憶をはかる小テストをしていると思います。 1週間ごとに50語ほどのペースで単語小テストをしていれば、充分にハイペースですので、それ以上は週あたりの単語数を増やす必要はありません。(英語が好きなら、さらに勝手に単語数のペースを増やせばいいだろう。) 裏を返せば、復習をしきれない量の単語小テストを毎回受けさせられても、非効率です。例えば、1週間ごとに300語の単語小テストを高校で受けたとしても(ただし高校1年の1学期だと、中学英語の復習で、そういう数百問のテストもありうる。しかしそれは期間限定)、そんなに英単語ばかり復習しきれないでしょう。(数学など他教科の勉強もありますし。) 万が一、そういう高校や塾の場合(1週間に300語の単語小テストの場合)、その高校や塾の小テストは後回しにして、自分で単語を予習・復習しましょう。 ただし、定期試験や期末試験などで、今までの単語小テストの合計の数百語のなかから単語が出題される場合は、多くあるので、その復習はしましょう。つまり、学期内の小テストは、その学期中に復習し始めましょう。(どのみち、テスト後にも補習などがあるだろうが・・・) 夏休み明けや、冬休み明けに、前の学期の小テストの範囲内の単語が出題されたりしますので、休み中にも、復習しましょう。(予習も忘れずに。小テストは最終目的ではなく、入試合格などが、より本質的な目的なので。) 同様に、3学期の年度末の期末テストなら、1年間の小テスト範囲の合計1000語ちかくがテスト範囲に含まれる場合も多いので、その復習はしましょう。つまり、年度内の小テストは、その年度中に復習し始めましょう。(どのみち、テスト後にも補習などがあるが。) == 文法 == === 完璧な文法理解はあきらめる === ==== 背景 ==== 高校では、中学英語の不正確な文法を、修正するような内容も習います。 しかし、だからといって、けっして完全にネイティブ級な英文法を目指してはいけません。高校生には無理です(大学生ですら無理だろう)。それこそ、米英生まれの人以外は、もう専業の英語教師みたいに年以上も勉強しないと到達できない水準の世界です。 なので、大学受験で要求される文法は、せいぜい、大学受験用のどの参考書にも書いてあるレベルの基本的な文法さえ理解できればいいのです。 そういう基本事項さえ押さえていれば、少しくらい文法が不正確でも、たぶん大学受験では多めに見てくれます。仮に多めに見てもらえなくても、もうそこまでの対策の時間は高校生にはありません。 じつは、受験参考書の文法解説すら、本当はまだまだ説明不足です。ですが、大学受験参考書を超える内容はもう、高校生には時間的には無理だし、数学など他の教科の勉強も必要なので、あきらめる必要があります。 これはつまり、大学受験の英作文でも、実は少しくらいマチガイがあっても良いのです。どの参考書にもある基本的な文法事項さえ押さえてあれば、少しくらい文法が間違っていても、大学は許容するでしょう。(許容しない大学があっても、英数学など英語以外の他教科の勉強を無視した大学なので、無視していい。なお、国公立の東京外国語大学では、受験生に数学を要求しています。) 日本人と外国人の立場を変えれば分かります。日本在住の外国人タレントとかで、もう十年以上の長いあいだ日本に住んでいる人ですら、ときどき文法ミスをしますし、日本語の発音も日本人とは少し違います。ですが、それを日本社会は許容します。 英語でも同じことです。向こうの国の人は、少しくらい日本人の英語の単語の並びや発音がヘンでも、話の内容がシッカリしていれば、聞いてくれます。 ==== 対策 ==== 上記のような背景のため、大学受験対策の英文法の勉強としては、せいせい平均レベルの問題集をせいぜい2冊ほどクリアすれば十分です。せいぜい、複合問題とかを解ければ、充分でしょう。 もっと言うなら、'''英作文の入試問題の場合、文法がすこしくらい間違っていてもいい'''のです。どの教科書・参考書にも書いてある基本を学んだ形跡さえある英作文を書ければ、あとは意味が通じれば、たとえば英作文中で冠詞がすこしくらい抜けててもいい、もしくは余計な冠詞があっても良い(本来は冠詞をつけない名詞に a とか the とか書いてもいい)のです。(ただし、あくまで「意味が通じるなら」の条件つきです。冠詞を間違えると意味が通じない英作文の場合は、間違えてはいけません。) 英作文の問題なんて、せいぜい英作文の参考書を数冊と、あとは普通の英文法の参考書の内容を押さえておいて、一通り学んだ形跡さえあれば、あとはもう小さなミスは受け入れるしかありません。仮に入試でその文法ミスが減点されようが、もう対策の時間がありません。 たとえば、日本語訳に引っ張られて、英語では、その単語には使わない冠詞をつけくわえても、そういうミスはもう、受け入れるしかありません。「英語以外にも日本語の知識も多いがゆえに、間違えてしまう」という類のミスは、もう受け入れるしかないのです。 日本語の学力に限らず、数学の学力でも理科でも社会でも、'''他教科の学力が高いがゆえに発生しやすいミスは、受け入れるしかありません'''。仮にこういう知識の多さゆえのミスをひどく減点する採点者のいる大学があっても、そういう大学はあまり教育水準が高くないので、もう相手しないほうが良いです。 また、辞書や一部の参考書のコラムにしか書いてないような細かい文法はもう、いちいち覚えてられないので、間違えてもいいのです。 また、仮に文法にミスが無くても単語にミスがあれば英作文では減点されかねないので、単語を学ぶほうが重要です。 ともかく英作文では、けっして「小さなミスを避ける」という発想ではなく、「'''大きなミスをなくすために、小さなミスを許容する'''」という発想の転換のほうが重要でしょう。 大きなミスにつながりかねない、文型とか過去形・完了形とか仮定法とか関係詞とか、「もし間違えると、意味がまったく変わってしまったり、逆の意味になってしまいかねない」という、そういう単元を重点的に身に着ける必要があります。いっぽう、助動詞などの高校で習うような微妙なニュアンスの違いとかは(たとえば助動詞 will は、「明日は日曜日だ」みたいな確実な未来では使わないというニュアンスがある)、間違えても小さなミスですので、ある程度は小さなミスを英作文では妥協する必要があります。 英作文では、よほど簡単な文でない限り、ミスは無くせません。また、だいたい英作文を要求してくる大学は、そこそこの長さの英作文を要求してきます。よって、ミスをゼロにしようという発想では、ネイティブ以外では対処できません。 たとえば、英作文がまったく逆の意味に受け取られてしまうような大きなミスは、避けなければいけません。また、そもそも米英人に通じないような文章も、避けなければいけません。 しかし裏を返せば、英作文で少しくらいニュアンスが変わってしまっても、教科書レベルの文法をきちんと押さえていて、もとの和文の意味の90%くらいが通じるなら、ミスは受け入れざるを得ません。 ;大学入試も英検・TOEICも単語重視 文法の要求水準がそんなに高くないので、平均的な文法問題集をクリアしたら、そのあとは単語などを勉強したほうが良いと思います。 もし仮に、文法で難問を入試に出してくるブランド大学があったとしても、そういう大学は単語力も多く要求してくるでしょうから、文法の難問よりも単語力の増強に時間を当てたほうが良いでしょう。 英検など検定試験では、単語については大学受験を超える単語も要求されます。しかし文法については上述の通り、大学受験を超えるような文法理解は英検・TOEICですら要求されないです。世間の人は、そもそも受験参考書を超える文法知識の存在そのものを知らない人すらも多くいるくらいです。 === 参考書で勉強する === 高校英語の英文法の勉強は、検定教科書ではなく参考書で勉強するのが定石、基本です。 なので、まずは参考書を買い始めましょう。普通科高校なら、おそらく高校の入学時、検定教科書の購入と一緒に、参考書も買わされると思います。 もし大学受験を考えるなら、英文法の参考書を買わなければなりません。 とりあえず、下記に後述する網羅形式の本を持っていれば、ひとまずは安心でしょう。 === 高校英文法は例外も多い === 中学の英文法の教育では、規則的・論理的な文法事項だけが取り上げられたのですが、高校は違います。 このことからか、高校英語では英文法の参考書のスタンスがいくつか分かれています。 1. 例外的な事例にはあまり深入りせず、基本的な事項を重視したスタンス 2. 辞書的に、英文法のあらゆるパターンを網羅的に掲載したスタンス があります。(実際にはこの中間の編集方針の参考書もあるが、説明の都合上、二極に単純化することにする。) 予備校系の講義形式をうたった参考書のいくつかや、高校英文法の入門書などの参考書のいくつかは、基礎的な重要事項を特に重視したスタンスです。(そのため、例外的な事項の説明は省かれているか、少なめです。) いっぽう、高校にもよりますが、高校で配布されるような昔からの、いかめしい感じのする参考書は、辞書的・網羅的なスタンスの参考書です。 センター試験などを考えるなら、網羅的なスタンスの文法参考書を最終的には読んで覚えざるを得ません。 一応、網羅本だけでも受験対策は可能ですが、塾や予備校などに通ってない人や、高校の授業の質に不安のある人は、さらに基礎的な事項を重視したスタンスの文法参考書もあると良いかもしれません。 例えば理系の中堅私大などで、あまり例外的な文法事項を要求するとは思えません。 ただし、これは私大の場合の話です。国公立の志望の場合は、共通試験を対策せざるを得ず、そのため二次試験がどうなっていようが、その対策のために辞書的・網羅的な参考書を読まざるを得ません。 TOEICなどの資格試験が近年重視されており、大学でも私大などで推薦入試や自己推薦などでTOEICの成績を考慮する大学も多く、企業もTOEICを表向きには重視していますが、TOEICは文法教育における論理性や高校生の論理性の涵養に配慮する義務はありません。なので、この問題の逃げ場は、大学受験にはありません。TOEICが果たして本当に実用英語かどうかはともかく、世間一般で「実用英語」だろうとは言われています。 === 網羅本でも全部の構文は紹介していない === 例えば比較級の構文「A is B no more than C is D」は、ある参考書(網羅本)には紹介されていませんでした。 高校英語で習う構文は多いので、複合的な構文などは、網羅本といえども一冊の参考書では紹介しきれないのです。 もし英語だけしか学習しないので済むのであれば(実際は違いますが)、英文法の網羅本の参考書を2冊や3冊も読み比べることで自分にあった参考書を選べばいいですが、しかし他教科の勉強もあるので、そうはいきません。 悩みどころです。各自、うまく対応してください。 また、大学生・社会人向けの厚めの文法参考書でも、すべての構文が書いてあるわけではないです。例えば『ロイヤル英文法』という大人向けのやや専門的かつ高度な英文法参考書がありますが、「all the +比較級」の構文は書いてありませんでしたし、巻末の索引を調べてもありません。 だから、大人向けの文法参考書を読んだところで、この問題「網羅本でも全部の構文は紹介していない」は解決しないのです。 === 時間配分 === 文法の学習は当然に必要ですし、入試にも良く出ます。しかし、文法の学習にばかり時間を掛けてはなりません。 高校に入学すると、高校の範囲の文法事項を、おそらく学校や塾などで急に教わり始めるでしょう。それらの文法の新知識の学習も大事ですし、当然に学習するべき知識ですが、読者のみなさんは英単語の学習も欠かさないようにしてください。文法なんて覚えることも少ないし、大学受験をするなら最終的には大学受験のころにまで文法を覚えられれば良いのです。なので文法の難問を練習する時間があるなら、それよりも、まず先に単語を優先的に勉強して語彙力を増やしたほうが効率的でしょう。 また、入試の文法問題も、文法の知識だけで解ける問題は少なく、単語の知識や語法の知識などと組み合わせないと解けない問題なども、入試では、よく出題されやすいです。なので、単語の知識が、大学受験対策では優先的に必要なのです。 2010年以降なら、中学校で、すでに大まかな文法の枠組みは習っています。2022年では、仮定法すら中学校で習っているはずです。もはや高校で習うのは、無生物主語など若干の単元と、あとは仮定法過去完了だとか、現在完了進行形とかくらいです。 そういった合わせ技は、それほど熱心に勉強しなくても、入門的な問題集などで問題練習すれば、普通に習得できます。 === 高校英文法は実は少しウソ知識 === 高校生用の文法参考書は、高校標準レベルの参考書は、基本的には、中学英語の復習も兼ねています。 このため、普通なら、高校1年生は復習のためにわざわざ中学参考書を買いなおす必要はないです。 それよりも重要なこととして、実は高校英語の文法参考書には、不正確な知識があるという事です。中学英語が理解重視のため少し不正確でかなりひどいカタコト英語が中学生用の参考書・教科書にあるので、同様に高校の英文法も少しだけ不正確なウソの知識があるのです。 さて、単語集では基礎レベルの単語集の前半が、中学英語の復習を兼ねているように、実は高校英文法の参考書も、少なくない割と多くの部分が中学の復習や、中学で習った分類など理解の再構成を兼ねています。 単語集ほどではありませんが、高校の文法参考書でも、あまり序盤にある中学文法の復習の部分には、高校でも深入りする必要がないことが、上述の考察・市場調査などから分かります。 また、このことに気づけば、つまり単語以外の知識で、一部の参考書にしか紹介されていない細かい文法の理論的な知識は、入試対策としては覚える必要が低いことが導かれます。単語集だと、細かい発展的な単語も入試に出ますが、しかし文法書については事情が違います。高校英文法には、深入りせずに、広く浅く学ぶのが安全でしょう。 文法参考書に書いてある知識がそもそも初学者の理解しやすさを重視したためのウソ知識なのですから、むしろ、けっして鵜吞みにして深入りしてはイケナイのです。 ほか、使用頻度の少ない表現など、参考書によって説明が微妙に食い違っています。たとえば接続詞 lest は、ある参考書では、「文語的であり、あまり使われない」と主張する一方、他社の参考書では「(for fear よりも)頻度は lest のほうが高い」(ジーニアス)と主張していたりします。 こういうふうに、細かい表現の英米での利用状況には諸説あるので、あまり参考書を鵜呑みにしすぎないようにしましょう。 === 大学生向けの参考書は例文不足 === 大学生むけの参考書は高校生向けのものと、用途がやや異なります。 高校生は、高校生向けをターゲット層にした一般の高校生向けの英文法参考書を中心に勉強しましょう。 === 細かなニュアンスの違いは覚えなくて良い === 受験勉強では、細かなニュアンスの暗記よりも、英単語をたくさん覚えなければなりません。また英語以外の国語や数学などの勉強も必要です。 参考書で勉強をする際、あまり細かなニュアンスの違いの暗記に入り込まないように注意してください。 実際、ある検定教科書でも、文法事項の類似表現などは、たとえば Would you ~? と Could you ~? などの依頼表現としてのニュアンスの違いは説明していません。せいぜい、 「Please と比べたらWould You および Could you は丁寧な言い回しである」という程度のニュアンスさえ把握できていれば大学受験レベルでは十分です。 参考書にはもしかしたらもっと細かいニュアンスの違いなどが書いてあるかもしれませんが、そういう詳細な情報はせいぜい参考程度にしましょう。 実は参考書でも、もう細かいニュアンスの違いは教えていない書籍も多くあります。 つまり、大学受験用の英語参考書には2種類あり、 :ひとつは受験用に入試に出る最低限のことだけを教える参考書と、 :もうひとつは細かいニュアンスの違いなども教える参考書と、 そういう2種類があります。 なお、上記とは別に英語研究者用の文法参考書がありますが、大学受験には全く対応していないので間違えて購入しないでください。 最低限のことを教える文法参考書の例として、ジーニアス英和辞典を出している大修館書店は高校生向けの文法参考書(『ジーニアス総合英語』)も出していますが、しかし文法参考書のほうでは辞書ほど細かいニュアンスの違いを説明していないのが現状です。 特に新共通試験(旧制度のセンター試験に相当)などの公共機関の試験や、英検・TOEICなどの資格試験では、細かいニュアンスを問う問題はまず出題が難しいでしょう。西暦2000年以降、国公立人気などでセンター試験や新共通試験の影響がどんどん強まっている影響も考えれば、文法学習であまり深入りニュアンスに深入りするメリットは残念ながら少ないのが現状だろうと思います。 それが英語教育として良いかどうか不明ですが、現在の大学入試の対策として要求される文法教育とはそういうものです。 基本構文などの細かなニュアンスの違いは、英会話などではそれなりに重要ですが、しかし入試や画一的な資格試験では英会話をそこまで細かく採点できないので、したがってニュアンスの違いに基づく使い分けもそれらの試験では出題されづらいことになります。新共通試験にリスニング試験はありますが、しかし実際に会話をさせる試験はありません。 裏を返せば、細かいニュアンスに深入りした文法参考書は、高校卒業後の英会話などの英語学習などのステップアップで使うのが効果的かもしれません。 高校の文法参考書の題名は、「文法」と書いてあるものを選んでもいいですが、2022年の書店で確認したところ『総合英語』と書かれている参考書も文法事項が中心的です。 === 各社ごとの注意 === 参考書えらびの際に、高校1年生がたぶん勘違いしそうなことを、述べておく。 * 大修館「ジーニアス」と数研出版「チャート式」の細かさ 大修館「ジーニアス」ブランドは、辞書では昔から細かい説明で有名であり進学校などではジーニアスの辞書が勧められるとの噂も昔からよくあります。ですが、しかし「ジーニアス」ブランドの文法参考書はあまり細かくありません。注意してください。 別に細かい文法参考書がいいだの悪いだのという話ではなく、ともかく、辞書のような細かさを「ジーニアス」文法参考書に期待してはいけません。用途が違います。 いっぽう、数研出版のチャート式の文法参考書のほうが、多くの構文が細かく網羅的・羅列的には書いてある傾向にあります。このため、1990年代の昔からよくチャート式の一番難しいバージョン(白・黄・青など色々バージョンがある)が進学校などでの参考書として配布されることもありました(かつては赤チャートが難しかったが、現代は赤が廃止され次点だった青チャートが一番難しいバージョンになっている)。 ただし、果たして2020年代の現代の入試にもチャート式が効果的かどうかは分かりません(会話重視・リスニング重視や単語重視など、入試の流行の変化もあるので)。 * 文英堂「インスパイア」と学研の参考書の入門者対応 なお、かつて文英堂『シグマベスト』というシリーズが、1990年代~2001年くらいは高校入門レベルの参考書として定番だったが、現代はそもそも英語のシグマベストが無いのと(英語は『インスパイア』に変更)、しかし同社・文英堂の『インスパイア』は、難しめです。高校生むけの一般的な参考書のなかでは、たぶんインスパイアが一番情報量が多いと思います(青チャートよりもインスパイアのほうが説明が細かいです)。 暗記科目なので、難しくても、とりあえず読めますが、しかし『インスパイア』のレベルはやや受験レベルを少し超えている記述もチラホラあります。 なお、例えば理科など他教科でも『シグマベスト』は実は2010年以降の現代はなかなか発展的であり難しくなってきていて、情報も細かく羅列的である。90年代の当時とは『シグマベスト』の中身の難しさが違うので、参考書選びのさいには、けっして90年代のままの世間の大人たちの評価を鵜吞みにしないように注意。 背景として、90年代の昔は、英数理の参考書選びのパターンとして、「シグマベストで入門レベルをカバーして、チャート式で高度な事項を勉強」という有名パターンがありました(なお、国語と社会科のチャート式は参考書としては無い)。あるいは、「その教科が苦手ならシグマベストを選ぶ。その教科が得意ならチャート式を選ぶ。」のようなパターンが90年代にありました。 しかし、現代では シグマ + チャート のパターンが、もはや上述の出版事情の変化で通用しなくなってるので注意。 2010年台の今だと例えば学研が高校入門レベルの初等的な参考書の立場だが、90年代の昔、学研がまだ高校参考書にあまり参入しておらず(昔の学研は小中学校むけの教材ばかりがメインだった)、当時は文英堂のシグマベストが今の学研の高校参考書に近い立場だったという背景事情がある。 === 文法参考書の選びかた === インターネットで参考書の形式やレベルなどを調べたり、または、教師や塾講師、チューター、同じ学生などからの評判なども参考にしながら、実際に書店で参考書の内容を閲覧するなどして選ぶといいだろう。 また、古本屋などで参考書を購入すると出費を抑えられる可能性がある。 中学英語は昔とカリキュラムが大幅に変わったので古本屋は論外だが、高校英語は昔から到達地点が同じままなので、文法学習はちょっとぐらい古い本でも特に問題ないかもしれないかもしれない。とりあえず、古本屋で英文法書を購入するなら、なるべく最近のものを購入したほうがいいだろう。 「大学英文法」とかそういうのは一般的には無い。文法は高校英語で、とりあえずゴールである。あとは単語や熟語を増やすのが、その後の道である。 英語教師などを目指す人のための細かい英文法理論書はあるが、高校生には必要ない。なお、書店によってはそういう教師向けの英文法理論書が高校英語コーナーに売っていたりするので、間違えて買わないように。わかった上で買うなら自己責任で。 === 高校の文法参考書はどういうものか === 「時事的な文法」とか無いので、もし改訂などあっても、あまり頻繁に買い換える必要は無い。 他のセクションでも言ってるかもしれないが、「大学英文法」と言うのはない。なので、文法において「大学教養レベルの先取り」とかは不要であるし、そもそも存在しないし、そういう教材もまず無い。 このことは、大学受験においては、つまり文法問題は、高校生向けのやや高レベルな参考書を習得できたら、それ以上は英語教師でも目指さないかぎりは、英文科向けのさらに高度な文法書には進む必要は無い、という事である。 英文科の学生などに向けた文法書は、あれは教師向けまたは研究者向けの参考書である。内容も、基本的には高校生向けの文法参考書に書いてある内容を、大学生または教師志望者などの視点やレベルに合わせて書き直した程度のものである。なのでともかく、受験生には不要である。 このことから、ゴールが明確に定まり、受験生向けのやや高度なレベルの参考書がゴールである。 そこから逆算すると、あまり多くの参考書を読み漁る必要はない。せいぜい、2冊読めば十分だろう。 高校1年レベルから分かりそうな易しめのレベルのものと、あとは少し難しめの感じのもう一冊で十分である。もしかしたらどちらか片方だけでも十分かもしれない。 また、説明を省略したが、前提として、高校の参考書は、学年別とかには売ってない(書店で実物を見れば分かると思うが)。 なので参考書での学習の際にも、いちいち学年ごとにペースを3等分とかして「私は1年生なので、参考書の前半の3分の1だけ読む」みたいなことはする必要は無いし、むしろ現代では3等分すべきでもない。 つまり、参考書は高校1年で購入したら、とりあえず、さっさと通読すべきである。現代の中学・高校のカリキュラムなら、文法参考書の通読は中学英文法の復習にもなるので、まずは通読しよう。 そして何回か通読したら、問題集などにチャレンジしたり、あるいは単語なども増やそう。 これがもし英語でなく数学の勉強法だったら、先の学年の内容を通読するよりも学校で習った単元の復習などを重視するのも手かもしれないが、しかし英語はあまりそういう単元ではない。 高校の授業や定期テストなどは、あれはあれで教育ノウハウが詰まっているので活用すればいいが、別にそれを活用したからといって文法参考書を通読できなくなるわけでもない。 それに塾などだと、参考書の後ろのほうにある無生物主語などを高校クラスでは1年で先に教える流儀もある。 参考書の最初のほうにある文型がどうのこうのと言った話は、どうせ塾の中学生クラスや中学参考書などでも既に教えている可能性があるので、塾の高校生クラスではそういうのはもう後回しにして、先に無生物主語や仮定法など参考書の後半の単元を教えるというパターンもある。家庭での自習などの際にはご参考に。 また、そもそも2年の終わりくらいから高校や塾などで全国模試などを次第に受け始めることを考えるなら、けっして高校3年間で学校の授業で文法を習うのを待つのではなく、自習によって高校2年の後半の段階までに一通り、高校生むけの単元である無生物主語やら仮定法過去完了やら分詞構文などを含めて、とりあえず文法参考書は全ページを通読は済ましておいて、加えて問題練習を軽くでいいのでしておくべきだろう。 そして、高校3年では模試なども活用して、問題練習で定着させていく、・・・という段取りである。 == 熟語 == 単語集の前半のほうにも、実務ではあまり使わないだろう熟語、つまり、より平易な表現に言い換えることの多い表現がよくあります(少なくともこのセクションのある編集者が、ネット上の海外英語では見たことない表現がいくつもありました)。 中学1~2年で習うレベルの単語の組み合わせで作れるマニアックな熟語がいくつかあるので、学習時に注意が必要です。単語集では編集の都合上、そういうマニアック熟語が前半のほうに書いてありますが、正直、後回しにすべき熟語です。 一方、 come true (実現する)のような、たとえば構成する単語と意味が近い場合なら、学習効果は高いです。たとえばtrue 「=真実」と「実現する」は比較的に意味が近いです。参考書でも、よくSVC文型の例としてcome true が出てくるので、こっちは重要事項です。 しかし残念ながら、単語集にある出題頻度の情報を見ると、come true は出題頻度が低いようです。 そのほか優先して覚えるべき熟語は、たとえば no longer ~「もはや~ない」のように構文的な熟語や、あるいはget over ~「克服する。回復する」(= overcome)のように中学レベルの単語には言い換えできなくてその熟語表現を使わざるを得ない可能性の高そうな熟語とか、そういうのです。 このような熟語の教育状況になってるのは、つまり残念なことですが、「英語教育での英作文などでは、実務的を想定した教育がされておらず、つまり形骸化している可能性がある」という事です。 「出題頻度順」の掲載をうたった単語集で前半のほうに、不便なマニアック熟語があるので、つまり入試では、実際には仕事などで英語を使うつもりのない人たちを想定した入試が行われているという証拠です。 英作文をする際、getで一語で説明できることを「come by ~」で表現する可能性は実用では低いでしょう。英会話でも、果たして米英人が、日本人相手に come by で説明するでしょうか。はなはだ疑問です。 なぜなら外国人は、もし英語が得意な日本人相手なら躊躇なくobtain のような非熟語を会話で使うだろうし、あるいは「英語が苦手な日本人かな」と思って気を使ってくれるなら get で表現してくれるでしょう。 come の基本的な意味は「来る」ですから、熟語come byの「入手」とは、かけ離れています。おそらく「手元に来る」的なニュアンスなのでしょうが、しかし「by」からそれを想像するのは、かなり前置詞「by」の基本の意味から離れています。そういう、基本単語の意味からの距離の大きい表現は、実務では学習コストが高いので、いろいろと不便なのです。 不便とはいえ、海外での利用の可能性がないとは言えないので日本の受験英語でも教えられていますが、なるべくなら後回しにしたいマニアック熟語表現です。 come true 「実現する」のようなSVC文型の例にもなるような教育的な熟語だと出題頻度が低いようですが、これはつまり、入試出題者が、高校生の学習効果を見る良問よりも「落とすための問題」「ヒッカケ問題」を21世紀の少子化の時代になっても未だに出題し続けているという証拠でしょうか。 == リスニング == まずは、前提となる単語力をつける必要がある。その上で、参考書で、音声CDつきの参考書などで聞き取り練習をするなどすればいいだろう。また、例えばYouTubeやTEDなどで自分の興味のある分野の英語を聞くなどしてもいいだろう。 テレビのNHK教育の英語番組は、学校の授業用に作られており、大学受験対策には作られていないこと、洋画は字幕や吹き替えに尺や字数の都合などで意訳が多いため学習には向いてないとする意見もある。 さて、新共通テストの場合なら、回答の選択肢が4択で与えられるわけですから、その選択肢の中からリスニング内容に一番ちかいのを選べればいいのです。すべての単語を1回で聞き取る必要はありません。それはプロの同時通訳者でも無理です。(なお、試験によっては2回ほど放送される場合もある。) すべての単語を聞き取るような問題は、おそらく共通テスト出題者は、作成しないだろうと思います。仮に作成したとしたら、かなりゆっくりと発音するリスニング問題でしょう。 テレビの生放送で、定型業務ではない政治討論の番組などで音声モードを英語モードに切り替えをして視聴してみると分かるのですが、実は生放送ではプロの同時通訳者ですら完全には流暢(りゅうちょう)には翻訳を出来ないのがプロでも実態です。テレビ生放送の英語は、プロですら、ややカタコト(片言)気味の翻訳になります。しかもテレビ番組などは、実は事前に原稿・台本があり、その原稿が事前にスタッフなどに渡されて読まれており、それをもとに撮影および音声収録をしています。それですら、少しカタコトの同時通訳なのです。 なお、テレビの原稿・台本のようにプロの同時通訳では、話題にある程度の予備知識が必要です。しかし新共通テストでは、そこまで個別のトピックのある話題には踏み込まないでしょう。(ただし、難関私大や国立二次試験はどうか知りません。もっとも受験生には他の勉強もあるので、普通に英文読解などの教科書・参考書によくある話題に触れておけば十分でしょう。) == 読解 == 読解練習をしたい場合は、まずは学校でのリーディングの教科書などをきちんと読むのは当然ですが、そのほかにも参考書があると便利かもしれません。 書店の参考書コーナーに、高校生用の英文読解の参考書などが置いてあるはずですから、それら高校生用の参考書で勉強してください。 大学入試の英文では、平均以上の難度の大学になると、単語の知識がないと、まったく内容が把握できないでしょう。なので、読解練習だけでなく単語の勉強もしてください。とりあえず単語集などで4500語レベルまでの範囲の単語は最低限、ひととおり学習してください。 * 試験での読解問題の時間配分について 出題英文を読むのに時間が掛かりますから、試験中の時間の配分にも気をつけてください。まずは単語力を増やすと読解スピードも上がるので、普段の勉強では単語力を増やしてください。 試験中の配分の対策として、実際の入試では、たとえば、長文読解問題よりも先に、短時間で解けそうな単語問題・文法問題などを先に解くとかして、時間配分の対策をしてください。あるいは、設問の問題文を先に読んでおいて、見当をつけてから長文を読むなどという方法もあります。ここらへんの対策は、じっさいに過去問や想定問題などを解いて練習してください。基本的に、入試国語での現代文などでの読解問題対策などの際の時間配分と似ていると思います。 ただし、時間配分のテクニックばかりを磨いてもダメであり、単語力などを増やさないと、読解スピードも上がりません。 * 学部と出題内容の関係 入試では、ときどき、志望先の学部の内容に関する記述が出る場合もあります。また、高校で習う教科に関する記述が出る場合もあります。もっとも、べつに必ずしも志望先学部と近い内容の英文が出題されるとは限らず、あまり関係のない内容の英文も出題される場合もあります。 どちらにせよ、合格後の人生も考えて、学生は、志望先学部に近い内容の高校教科の勉強もしておいたほうが安全でしょう。たとえば経済学部に進学志望なら高校政治経済などの参考書を読んでおくとか、あるいは理工学部に志望なら理科・数学の参考書を読んでおいたほうが安全でしょう。 == 発音・英会話など == 基本的には、標準的な参考書でカバーでき、あとは単語の記憶量を増やす練習とか、リスニングの練習とかの対策でよいです。あとは参考書などの英会話文例や発音問題を覚えておけば、入試での、だいたいの発音や英会話の試験もカバーできます。 * 入試の発音問題について 発音問題は、入試に英単語と発音記号を照らしあわせる問題は出ます。ですが、自分で発音することは、入試ではない。 * 入試での英会話について 大学入試では文章題などで、英会話の空欄を埋める問題などが出されるかもしれません。いっぽう、大学側が、直接受験生と会話をする試験は、一般入試では出ないでしょう。 ただし、いくら一般入試に会話が出にくいといっても、基本的な会話くらいは、せっかく高校で習うのですから、きちんと練習してください。そもそも建前上は、高校で習うことは、高校生は学習するべきということになっています。そして大学側だってバカじゃないんだから、なるべくきちんと勉強している受験生を優先的に合格させたいのです。 == 英作文 == 英作文の練習よりも、まず先に文法学習や単語の記憶量を増やす勉強を優先したほうが安全でしょう。単語の記憶量が増えて、文法や熟語なども覚えれば、英作文なども、自然と上達します。逆に言うと、英作文だけを勉強しようとしても、難しいです。なお、単に英単語の意味や綴りを覚えているだけでは英作はできない。動詞ならば他動詞(Vt)なのか自動詞(Vi)なのか両方あるのか,他動詞ならば第4文型(SVOO)や第5文型(SVOC)をとれるのか,名詞ならば可算名詞(C)なのか不可算名詞なのかなど(これ以外にもたくさんある),とにかく用法まで正確に知っておく必要がある。従って辞書を引く必要がある。 == 問題集を信じすぎるな == 問題練習をする際には、必ずしも偏差値順にステップアップする必要は無い、という事です。 また、日本人の高校生のレベルを越える難しすぎる問題は、そもそも解けるようになる必要もないでしょう。 選択問題では、高校レベルで習得できるレベルでの、初心者のよくやるミスをしない事のような、明らかに間違った言い回しを排除する事さえできれば、それでいいでしょう。 納得の行かない問題の対策はやりすぎないようにスキップして、他の勉強をすべきです。英語の勉強なら、もっと確実に偏差値アップの出来る勉強、たとえば単語力を増やすなどの勉強をしましょう。 == あきらめるべき事 == === 第二外国語は、あきらめるべき === ==== 入試に第二外国語は出ない ==== 高校によっては、第二外国語の授業を用意している高校もあります。 共通テストや二次試験では英語以外の外国語を使えるところもあるが、特別な理由がないなら英語を選択したほうがいいだろう。 また、中国語を勉強しても、漢文の入試問題を解くのには役立ちません。 帰国子女とか、あるいは進路志望が語学関連の分野で無い限り、あまり第二外国語には手を伸ばさないほうが良いでしょう。 == 一般入試対策ではTOEIC対策などには手を出さないほうが安全 == 英語能力を測る国際的な試験のTOEFLやTOEICなどは、高校生の学習用には作られていません。そもそも日本人に内容を合わせていません。 それにTOEICとTOEFLのどちらとも、試験の目的が、日本の高校英語の教育目的とは違います。 TOEICとTOEFLのどちらも目的は、英米への留学や海外生活のためなどの語学が目的です。日本の大学入試や、日本の大学での英語論文読解などの目的には、TOEIC・TOEFLなどは合わせていません。TOEFLとかTOEICとかで、ハイスコアを目指すのは、大学受験対策とは目的がズレています。 なお、そもそもTOEICをつくったのは日本の通産省(当時)であり、通産省がアメリカの非営利テスト開発機関、ETS(Educational Testing Service)に依頼をして、日本がつくったテストです。 よって、TOEICの出題内容は、アメリカ国内での実用とは若干、ズレていますので、てっきり実用英語だとは勘違いしないようにしましょう。また、てっきりTOEICは(OECDあたりの)「国際機関のつくった試験である」などと勘違いしないようにしましょう。 さらに、TOEICの参考書などにある「高校生レベルは◯◯点」などの数値も、じゃっかん、疑わしいので、あまり鵜呑みにしないようにしましょう。 ;* 平均点 :なお、高校生のTOEICの平均点は、年度にもよりますが、2018年の時点では、高校生の平均点はおおよそ350~400点くらいです。なおTOEICの満点は990点です。 ネット上では「TOEIC 600点が英検2級相当」という言説が出回っており、英検2級が高校英語レベルを出題範囲として想定していることから、あたかも「高校を卒業したら TOEIC 600 点で当然」みたいな言説が出回っていますが、しかし2018年の統計などをもとに考えれば、この言説はデタラメです。 また、「TOEIC 600点が英検2級相当」という言説の根拠も、よくよく調べてみると、2001年くらいに英検2級保持者にTOEICの点数をアンケートしたところ TOEIC 400点~800点あたりに得点がバラついたという統計を、とりあえず平均値をとって600点としただけにすぎないのが実態です。 高校の数学で統計値の「分散」という概念を習います。分散を知らないと、統計詐欺にダマされてしまいます。 ;* TOEICは事実上は文系向けの試験である :世の中には、文系の大人が多く、その影響で、学生でも理系科目をサボってまで英語の勉強をして、英語の成績を上げる人がいます。TOEICの平均点も、そういう文系の人間を基準に算出されてしまいます。 :一般入試や国公立受験、理系の学部などを目指す人は、けっして、そういう文系の大人や、文系しかできない学生を多く含むTOEIC平均点を、参考にしてはいけません。 :* 4択問題と難易度 :TOEICの各問題は基本的に4択問題ですので、デタラメに選択しても、990点満点(約1000点)中のうちの4分の1である約250点を取れます。 : さらに、欧米で英米への留学希望者むけのテストなどとして知られている英語検定試験はTOEFLです。 TOEICは、日本と韓国で流行っている英語検定です。 また、英検は日本人用の試験ですが、しかし高校生用には試験が作られていません。中学生・高校生なども意識して英検は作られているでしょうが、しかし、中高生だけを意識してはいません。 英検を入試対策で使うなら、志望校合格などが保証されないかぎりは、なるべく英検'''準'''1級までに止めるのが無難です。 * 推薦入試などの評価事項になることも ただし、推薦入試ではTOEICやTOEFL、英検などの成績が考慮される場合もあります。 * 難関大学への対策用としての場合 大学によっては、入試で高校レベルを超えた、かなり難しい英語を出す場合もあります。そういう大学に対応する場合、市販の受験参考書では太刀打ちできないかもしれません。このような場合、しかたなくTOEFL対策や英検1級対策などの参考書が必要な場合もあるかもしれません。 * 就職活動でのTOEIC評価について ただし、大学生の就職活動では、企業にTOEICなどの点数を聞かれることもあります。就職活動時のエントリーシートに、最初からTOEICなど成績の記入欄がある場合もあります。また、外国大学への留学の際に、TOEICなどで一定以上の成績を修めることが必須の要件とされる場合も多いです。たとえ英語圏以外の国の大学への留学でも、TOEICやTOEFLなどの成績が必須要件として必要な場合があります。 なので高校生でも、TOEIC受験の機会があれば、受験をするのも良いでしょう。 ただし、TOEICの成績が良いからと言って、けっして、それだけで企業が「即・採用」をするなんて事はありません。 高校生の段階では、TOEICなどの語学検定については、もし受験できるなら、視野を広げるような目的で検定を受けるのが良いでしょう。 == 英語の検定教科書にある時事や古典文学の勉強は不要だし、危険 == 中学高校の英語の検定教科書には、他の教科では説明しづらい時事や古典文学、最近の日本のアニメやマンガの、海外での人気について、英文で紹介されたりするかもしれません。 そもそも、本来の目的は英語を学ぶということなので、これらの題材で得た知識がそのまま大学受験に役に立つということはありません。 [[カテゴリ:英語]] 9gcn2quylhe6pltveqyu2dp6k7h5f3h 高等学校地理B/地誌 東アジア 0 22238 246695 241212 2024-04-14T11:01:22Z すじにくシチュー 12058 /* ホンコンとマカオ */ しかし2020年の中国の国家安全保障法の制定により、香港の一国二制度は形骸化している(※実教出版の『政治経済』の見解)。 wikitext text/x-wiki == 朝鮮半島 == {| class="wikitable" style="float:right" |+ 近代以降の朝鮮半島のあゆみ | 1894年 日清戦争。 |- | 1910年 韓国併合。 |- | 1945年 第二次世界大戦で日本が敗戦。<br />     アメリカ・ソ連が朝鮮半島を分割占領。 |- | 1948年 大韓民国、朝鮮民主主義人民共和国の建国。 |- | 1950年 朝鮮戦争。 |- | 1965年 日韓基本条約。日韓国交正常化。 |- | 1988年 ソウルオリンピック開催。(北朝鮮は不参加) |- | 1990年 韓ソ国交樹立。 |- | 1991年 韓国・北朝鮮の国連加盟。 |- | 2000年 南北首脳会談。 |- |} 2016年現在、朝鮮半島には、'''大韓民国'''(通称・'''韓国''')と'''朝鮮民主主義人民共和国'''(通称・'''北朝鮮'''またはDPRK)という2つの国がある。 20世紀初頭は朝鮮国(日清戦争後は大韓帝国)という国だったが、日清戦争・日露戦争後に、朝鮮は日本に併合され(韓国併合)、植民地になった。このとき、日本本土と同様に近代化政策が朝鮮半島でも進められた。 1945年の日本の敗戦により、名目上は朝鮮民族の独立国として、1948年に韓国と北朝鮮が独立した。しかし、終戦直後からしばらく、韓国はアメリカ合衆国の属国、北朝鮮はソビエト連邦の属国だった。 韓国と北朝鮮の戦争である{{ruby|朝鮮戦争|ちょうせんせんそう}}が1950年に起きたが、現在は停戦中である。{{ruby|北緯|ほくい}}38度線をさかいに2つの国に分かれており、38度線の北側が北朝鮮であり、38度線の南側が韓国である。 1990年に韓国と北朝鮮は同時に国連に加盟した。 2016年の現在、北朝鮮と日本とは国交が無い。近年、北朝鮮は核実験を成功させ、たびたびミサイル実験を行っている。 ::(※ 範囲外 :)方角の関係から日本に向けてミサイルを発射するため、日本国内ではかつてないほどに北朝鮮を恐れ憎む感情が大きくなっている。(※ ほぼ2016年代の事実だが、しかし検定教科書やセンター入試では、日本の現在世論への言及は控えている。) :(※ 地理の範囲外: )そのため日本の世論では、北朝鮮への強硬策をとなえる人やその強攻策を支持する人も多い。 ::(※ 検定教科書の事情:) 基本的に確定した政策以外、検定教科書やセンターには出ないので、「強攻策が」どうのこうのは検定教科書・大学入試には出ないのが通常。もし出るとしても『政治経済』科目の担当。 == 韓国 == === 概説 === [[ファイル:Flag of South Korea.svg|thumb|left|200px|大韓民国(だいかん みんこく)の国旗]] [[File:Korea-Seoul-Sejongno-01.jpg|thumb|right|韓国の首都ソウルでの風景。]] [[File:Gimchi.jpg|thumb|left|キムチは韓国由来の料理。]] 韓国の経済では最近は、工業の発展が目覚ましい。とくに電子機器や半導体など'''電子機械'''の分野では、世界的にも競争力が高い。自動車産業や造船業もさかんである。 <gallery widths=200px heights=200px div style="border:1px solid #000000; float: right;"> File:Korea-Busan-Beomeosa-04.jpg|韓国の女性の民族衣装(みんぞくいしょう)のチマ・チョゴリ。チョゴリとは上着のことで、チマとはスカートのこと。 File:Hanbok male.jpg|伝統的なズボンは「パジ」と言う。 </gallery> {{clear}} 韓国の民族衣装では、女性用の民族衣装である'''チマ・チョゴリ'''が有名である(センター試験などにも「チマチョゴリ」は出やすいようだ。センター対策の参考書にも紹介されている。ほかにも男性用の民族衣装などもあるのだが、あまり有名でなく、入試に出ないだろう)。 現在、日本と韓国は国交がある。1965年の{{ruby|日韓基本条約|にっかん きほんじょうやく}}で、国交を回復したのである<ref>当時はベトナム戦争の最中であり、後方であり、同盟国の日本と韓国の間に国交がないことが不都合であるとアメリカが認識したことが、日韓の国交回復をうながした背景にある。また、互いに都合のいい解釈の余地を残したことから、1990年代以降、戦後補償問題についての原因ともなった。</ref>。 韓国の経済では、{{ruby|'''財閥'''|ざいばつ}}と呼ばれる、ごく少数の大企業が、経済に大きな影響力をもっている。 1997年の'''アジア通貨危機'''では、韓国も大きな打撃を受け、韓国の通貨'''ウォン'''は暴落し、韓国は一時的にIMF(国際通貨基金)に経済をゆだねることになった。 その後、韓国経済は回復し、今日の繁栄に至る。 <!--一説には、通貨危機の結果、通貨安になったことが、輸出に有利だったことが、説として挙げられる。(※ 教科書・参考書には無い説)--> 教育については、韓国はかなりの学歴社会であり、近年では大学など高等教育機関への進学率がほぼ80%を超えて世界最高の水準である。なお、大学の学費は、韓国では有料である。 韓国は国土面積が小さいわりに、人口が4800万人と多いので、人口密度が高い。しかも、首都ソウルに人口が集中してるので、ソウルが過密である。このため、韓国は日本と同様に食料自給率も低く、韓国の食料自給率は約50%である(なお日本の食料自給率は約40%である)。 <references /> === 地形と気候 === 朝鮮半島の国土は、安定陸塊であり、地震がほとんど無い。 韓国の南部の沿岸は、'''リアス式海岸'''になっている。 韓国の気候は、夏は韓国も太平洋の気団の影響を受けて暑くなるが、冬にはシベリア気団の影響で寒くなる。そのため、同緯度の日本や中国の各都市と比べて、韓国は1年の温度差が大きい。 「'''オンドル'''」という、伝統的な床暖房のためのカマドがあるのも、そもそも韓国の冬が寒いからである。 === ハングル === 韓国の文字を'''ハングル'''という。漢字ではなくハングルが、韓国では国語の文字として用いられている。 ハングルは15世紀に朝鮮王朝が制定した表意文字である。15世紀の当時は、支配層は漢字を用いていたが、平民は識字率が低く、そのため平民にハングルを普及させて識字率を高めようとしたのである。 近現代になってハングルが普及する前は、韓国の政府などでは漢字を多く用いていたので、漢字に由来する言葉が韓国にも多い。 現在の韓国では、民族固有の文字を重視する政策のため、漢字は日常語としては用いられていない。 === 宗教など === 儒教の影響が強い。そのため、父親の権力が強い・女性は結婚しても女性の父方の姓を名乗るなど、儒教による制度の名残が今も残っている。 また、韓国ではアジアの中ではキリスト教徒が多い国の一つで、全人口の30%ちかくはキリスト教徒とされる。 === 韓国の戦後経済 === ====韓国の工業化==== 1960年代までは、韓国は農業国、または繊維産業などの軽工業の国だった。 1960年代後半からは工業化が進んでいき、1970年代に'''鉄鋼'''や'''造船'''や'''石油化学'''など重工業も発達し、「'''{{ruby|漢江|ハンガン}}の奇跡'''」と言われた。「漢江」(ハンガン)とは、ソウル市内を流れる川の名前。 工業団地が、首都ソウルを中心につくられた。ソウルでは、機械工業が盛んである。また外港の'''インチョン'''(仁川)で、造船が盛んである。なお、インチョンには国際空港もある。 また、日本海側の沿岸部のウルサンやポハンで、工業団地が作られ、その工業団地で工業が発達した。ポハンは鉄鋼、ウルハンは鉄鋼および石油化学である。資源を輸入するのに、臨海部のほうが有利だからである。このように、ポハンとウルサンが、臨海型の工業地域を形成している。 また、このような発展により、'''アジア{{ruby|NIES|ニーズ}}'''と呼ばれる新興国として1970年代ごろから国際的に認知されていった<ref>1970年代当時の「NIES」(振興工業経済地域)とは、一般に'''韓国'''、'''シンガポール'''、'''香港'''、'''台湾'''の4地域のことをいう。</ref>。 1990年代ごろから、韓国では電子機械工業や自動車工業が発達した。 1996年に、韓国は、おもに先進国からなる'''OECD'''('''経済協力開発機構''')に加盟した。 一方、韓国に進出していた外国企業が、韓国の賃金の上昇により、韓国から撤退していき、外国企業は中国や東南アジアなどに工場を移していった。 また、都市を中心に工業化が進んだことから、韓国では都市と農村との経済格差が出て来た。農村から、多くの労働者が、仕事を求めるなどの理由で、都市に流入していった。2016年の現在、総人口の約5分の1にあたる1000万人以上がソウルに居住している。 韓国ではインターネットやブロードバンドの普及率が高い。 2011年2月に韓国は、アメリカ合衆国との'''FTA'''('''自由貿易協定''')に調印。 近年では、'''プサン'''('''釜山''')が韓国最大の貿易港であり、世界的にも規模の大きい貿易港である。 ====韓国の農業==== 1970年代から、韓国では、農村の所得の低さを解消する目的のために、農地の整備などを掲げた'''セマウル運動'''が行われ、灌漑の導入、農業機械の導入などが行われ、韓国農業は生産性が向上した。 韓国は輸出を基盤とした経済のため、農産物の貿易については、米以外の農産物の輸入を自由化しており、そのため中国産の低価格の野菜との競走では、韓国の野菜農家は不利である。 <references /> === 日本との文化交流 === 1980年代まで、韓国は、日本文化の流入を規制してきた。しかし、1990年ごろから、日本の文化の流入を開放した。 2002年には、日韓共催サッカーワールドカップが開かれ、両国の関心をあつめた。 また、2000〜2005年頃、韓国製ドラマが、「{{ruby|韓流|かんりゅう}}ドラマ」として、日本の放送局などでも取り上げられ、日本のテレビ視聴者層で話題になった。 これにはアジア通貨危機の際に、国家的経済危機に陥った韓国が経済回復のために、IT・コンテンツ産業を振興させたという背景がある。そのため韓国のインターネット普及率は日本のそれ以上である。 また2010年ごろに日本で第一次K-POPブームが巻き起こったのには韓国国内で違法ダウンロードなどが増え国内の市場が縮小したことが要因の1つになっている。 {{clear}} == 北朝鮮 == [[ファイル:Flag of North Korea.svg|thumb|200px|北朝鮮(きたちょうせん)の国旗]] 首都はピョンヤン。 政治は社会主義であり、{{ruby|金日成|キム・イルソン}}とその子孫による独裁政治がつづいている。 国名は、{{ruby|朝鮮民主主義人民共和国|ちょうせん みんしゅしゅぎ じんみんきょうわこく}}。 北朝鮮は、ソ連や中国を手本とした計画経済の国であった。しかし、指導者が、農業など産業の知識が乏しいのに口出しをするという(たとえば、農地を広めるために山の森林を大量伐採して、洪水を引き起こすなど)ずさんな経済政策や、軍事費の過大な負担などのため、{{ruby|飢饉|ききん}}や洪水などが、たびたび発生した。 資源が比較的多く、戦前・戦中に日本企業の導入した工場設備なども比較的に多かったこともあり、北朝鮮では重工業化が戦後の早くから進んだ。しかし、経済政策の失敗から、1970年代以降の経済力・工業力は韓国に追い抜かれている。 外交問題として、日本とは国交がない。そして、北朝鮮の工作員に日本人がさらわれたという、{{ruby|拉致|らち}}問題がある。2002年に、日朝ピョンヤン宣言で、北朝鮮は拉致問題をみとめた。しかし、その後はほとんど進展がない。 なお、北朝鮮は核開発をしているので、アメリカを中心とした多くの国から経済制裁を受けている。核兵器を持っていることが公式に認められている国は、アメリカ・ロシア・中華人民共和国・フランス・イギリス・インド・パキスタンである。北朝鮮は、この核兵器開発をみとめない諸国の姿勢を、アメリカ中心の姿勢だとして批判している。 {{clear}} == 中国 == === 地形 === 中国西部は、山脈や高原などの高地である。 いっぽう、中国東部は平原などの低地である。 人口は、東部に集中している。 黄河(こうが)の中流の周囲に、{{ruby|'''黄土'''|'''おうど'''、こうど}}と呼ばれる黄色〜茶褐色の砂の平原がある。黄土は英語で「'''レス'''」という。 黄河と長江のあいだあたりに、'''ホワイ川'''がある。このホワイ川は、1月の平均気温0℃と年間降水量1000mあたりの線に近く、地理学では大切であるので、'''チンリン=ホワイ線'''という。チンリンとは、'''チンリン山脈'''のこと。 つまり、農業では、チンリン=ホワイ線よりも北が小麦などの畑作地帯である。チンリン=ホワイ線よりも南側が稲作地帯である。 === 解説 === {| class="wikitable" style="float:right" |+ 近現代中国のできごと | 1911年 辛亥革命(しんがい かくめい)。 |- | 1912年 中華民国が成立。 |- | 1937年 日中戦争がこの頃に勃発。 |- | 1945年 第二次世界大戦が終結。 |- | 1949年 中華人民共和国が成立。 |- | 1958年 大躍進運動(1960年頃まで)。 |- | 1966年 文化大革命(1976年まで)。 |- | 1989年 天安門事件。 |- | 1997年 ホンコン返還。 |- | 1999年 マカオ返還。 |- | 2001年 WTO加盟。 |- | 2008年 ペキンオリンピック。 |- | 2010年 シャンハイ万博。 |- |} 中国(中華人民共和国)は、人口が約13億人であり、世界でもっとも人口が多く、世界の人口の約5分の1をしめている。 :・首都 :ペキン(北京) :・面積 :約963万 km<sup>2</sup> :・人口 :約13億8000万人(2014年) :・主な言語 :中国語  * 第二次大戦後の歴史 第二次大戦が終わると、国民党と共産党との内戦が起きた。そして、毛沢東ひきいる共産党が勝利した。国民党は、台湾に逃げのびた。 こうして、中国は、毛沢東ひきいる共産党の主導のもと、1948年に'''中華人民共和国'''として建国され、社会主義の国となった。そして、中華人民共和国の建国の初期に、多くの企業が国有化された。 そして、1958年から大躍進政策とよばれる農業・工業の大増産を行うが、中国の実情を無視した計画により、逆に{{ruby|飢饉|ききん}}が発生するなどして大失敗に終わる。さらに、1966年から毛沢東が死去する1976年まで文化大革命が行われ、中国の政治・経済はさらに混乱した。その後、アメリカ・日本などと国交を回復するとともに、経済面においては改革開放路線を敷き、自由主義経済を取り入れたことにより、急速な経済発展を遂げつつある。 === 人口問題 === 中国は、1組の夫婦の子供の数は1人だけとする '''一人っ子政策''' を1979年から行っている。ただし少数民族は、一人っ子政策の適用外である。おもに、漢民族が、一人っ子政策の対象である。 このため、現在、人口の増加は抑えられている。かわりに、高齢者の割合がふえる{{ruby|高齢化|こうれいか}}が予測されており、心配されている。(いっぽう、インドも人口が10億をこえるが、インドでは人口の増加が予測されている。将来的にインドの人口が中国の人口を抜く可能性が予測されている。) しかし、法律に逆らって、2人目の子どもを産んで、出生届を出さない事態も起きている。出世届けが出されないため、その子には戸籍がない。このように戸籍を持たない子どもは、「闇っ子」のような意味で'''ヘイハイズ'''(黒孩子)と呼ばれる。都市よりも農村で、無戸籍の闇っ子が多く見られる。 また、中国人は、あと継ぎや労働力として男子が欲しいようで、女の子が産まれても処分するようであり、そのため人口比が男に片寄り始めている。 そういった弊害もあって、一人っ子政策の見直しがされている。両親とも一人っ子の場合には第二子が認められたり、また、第一子が女子の場合には第二子が認められる場合もある。 === 民族 === 中国の人口のうち、9割の民族は'''漢民族'''(かんみんぞく)である。漢民族は、おもに中国東部に住んでいる。 ある国で、多数派でない民族は、'''少数民族'''という。中国は50以上の少数民族を持つ'''多民族国家'''である。おもな民族は、漢民族、ウイグル族、モンゴル族、チベット族、ミャオ(苗)族、朝鮮族、ホイ(回)族、チョワン(壮)族、などである。 [[ファイル:President George W. Bush and the 14th Dalai Lama at the Whitehouse in 2001.jpg|right|200px|thumb|ダライ・ラマ14世(14th Dalai Lama)と会談するアメリカのジョージ・ブッシュ(George W. Bush)大統領(2001年)]] 中国は第2次世界大戦のあとにチベットとウイグル地方を侵略し併合したので、チベット人とウイグル人は、中国の少数民族になっており、チベット民族やウイグル民族として扱われている。 中国政府は、少数民族の自治区をもうけており、チベット自治区などをもうけており、伝統文化などを保護しているが、少数民族の中国からの独立などは認めていない。そのため、中国の支配に対する抵抗運動などがチベットやウイグルなどで、たびたび起きている。こうした独立運動に対して中国政府が厳しい弾圧を加えていること、漢民族との政治的・経済的格差が生まれていることから、人権問題として批判されることが多い。 チベット仏教の最高指導者であるダライ・ラマ14世(14th Dalai Lama)は、1959年にインドに亡命した。 === 参考: 独裁政治 === :(高校教科書では、あまり触れていない。) 政治制度に関しては、社会主義であり、民主主義では無い。共産党が政治の決定権をにぎっており、事実上は、中国共産党による独裁政治の国である。たとえば政治指導者は、中国共産党内部で決定され、国民からの直接の選挙では選ばれていない。1989年には、天安門で民主化をもとめる学生の抗議運動がおきたが、この運動は弾圧された。この天安門での抗議運動に関する事件を{{ruby|天安門事件|てんあんもん じけん}}と言う。 === 農業 === 中国は農業の大国である。中国のおもな農産物は、米、トウモロコシ、小麦である。 農業は、華南(「かなん」、意味:中国の南部のこと)や華中(かちゅう、意味:北部と南部のあいだ)では、雨が多いため、'''米'''の生産が多い。また、これら南部では、'''茶'''の生産も盛んである。 つまり、中国の南部では、'''米'''と'''茶'''の生産が盛んである。 東南アジアに近いハイナン(海南)島のあたりでは、年に2回、米を作る'''二期作'''も行われる。 華北(「かほく」、意味:中国の東北部)では、雨が少ないため、'''小麦'''・大豆などの畑作が多く、また、'''コウリャン'''という雑穀の一種を生産している。なお、近年では、日本などから寒さに強い品種改良された稲を導入するなどして、中国北部でも米の生産もするようになった。 西部は、乾燥しており、あまり農業にはむかず、遊牧などの牧畜が中心である。 中国は、小麦の生産量が世界1位である。(2位インド、3位アメリカ。) 中国北部やインド内陸部などの乾燥地帯の農業では、小麦など乾燥に強い作物の畑作がさかん。 2000年頃から、中国人の食生活の変化により、肉類の需要が増えたため、飼料用作物としてトウモロコシや大豆の消費が増えた。 このため、アメリカなどからのトウモロコシや大豆の輸入が増え、中国は近年(2016年に記述)では大豆の輸入国に転じている。 農産物の品質管理能力が低い企業も多いようで、2000年ごろから中国産の農産物に有害な物質が混ざるなどして、消費者に健康被害が出る問題が発生・発覚している。 ===食文化と地域差=== 中華料理の地域料理は農作物の分布に対応している。南部では稲作が有利なため、ビーフンなどの米を使った地域料理が多い。いっぽう北部の地域料理には、小麦を使ったものが多い。こうした農作物の分布の違いに加えて、文化や風土の差異から様々な料理が生まれた。日本では北京・上海・広東・四川料理が知られる。 北京料理は、北京が明・清時代に首都であったことから北京ダックなどのように宮廷料理をルーツとしているものがある。また、畑作や牧畜が中心のため、米よりも小麦を使ったものが多く、魚よりも肉がよく使われる。日本でなじみ深い麺類(ラーメン)や{{ruby|餃子|ギョウザ}}や{{ruby|饅頭|マントウ}}などが、北部の地域料理である。 上海料理は、現在の上海の地域が中国の穀倉地帯であったこと、長江流域に属することから米と豊かな魚介類を使った料理がメインである。日本では{{ruby|小籠包|しょうろんぽう}}や上海ガニがよく知られている。 広東料理は、広東省一帯が古くから貿易で盛んだったことから様々な食材が使われてきた。くわえて、海に面しているため、魚介類を中心とした素材のうま味を生かした薄味の料理が多い。日本では飲茶やふかひれスープなどがよく知られる。 四川料理は、四川省一帯の料理である。長江流域の内陸のため、湿度は一年中高いが、気温は夏冬の差が激しい。そのため、体調をととのえるとされる香辛料をふんだんに使った料理が多い。食材には肉や川魚がよく使われる。日本でよく知られているのは麻婆豆腐や担々麺である。また、茶の原産地であり、茶を飲む習慣もここから始まった。 なお、少数民族の自治区では、その民族独時の文化や風土にねざした料理もある。 (※ 中国の地域料理の出題が、入試に出やすい。地域料理の分布の傾向には例外もあるだろうが、そのような瑣末な例外的知識は一般の高校生には不要なので、そういう瑣末な知識を問う大学は、相手にしないほうが良いだろう。) === 工業 === 工業は、人件費の安さを利用している。そのため、世界の多くの国に中国の製品が輸出されており、中国は「'''世界の工場'''」とも言われている。 南部の沿岸部の地域などに経済特区が多く、そのため工業地帯も南部の沿岸部に多い。南部の香港(ホンコン)の近くにあるシェンチェン(しんせん、深圳)市が経済特区であり、シェンチェンなどを中心に工業が発展している。 :(※ wiki編集上の技術的な注意 :)「深圳」の「圳」は日本語のコンピュータ環境では、文字化けの可能性があります。このため、ビジネス文書などでは慣用的に「シンセン」、「深セン」などと書く場合があります。 南部とは別にも、中国東北部には第2次大戦の前から日本の旧・満州国への投資などで発達していた工業地帯があり、戦後も東北部の工業地帯が重工業の地帯になっている。(※ 検定教科書にも、旧・満州国の設備が、第二次大戦後の中国での重工業に役だったということが普通に書いてある。) 東北部では、アンシャンに鉄山があり鉄鉱石の産地であることもあり、第二次大戦後には東北部で重化学工業が発達した。 なお、華中の'''ウーハン'''(武漢、ぶかん)にも鉄鋼コンビナートがある。 第二次大戦後、'''アンシャン'''、'''パオトウ'''、'''ウーハンで'''、工業化が進められた。 なお、東北部のターチン油田で、石油が産出する。 そのほか、鉱産資源としてレアメタルがレアアースの産地が中国になる。 [[File:Shenzhan landmark3.jpg|thumb|300px|left|シェンチェン(深圳、しんせん)市。経済特区に指定されている。]] [[Image:PR China-SAR & SEZ-Chinese.png|thumb|350px|中華人民共和国の経済特区]] [[ファイル:Hongkong victoria peak.jpg|thumb|left|220px|香港(ホンコン)]] === 経済政策の歴史 === 第2次大戦後、中国の経済は、市場経済を禁止して、政府が経済を管理する、計画経済の経済政策を取った。 また、農村の集団化のため、'''人民公社'''(じんみんこうしゃ)を設立した。 しかし、計画経済がうまくいかず、中国は経済発展が遅れた。1980年ごろから、経済のおくれを取り戻すため、鄧小平(とう しょうへい)の指導により、市場経済を部分的に取り入れていく'''改革・開放'''政策に転じ、また、'''経済特区''' を'''シェンチェン'''(しんせん、深圳)市やアモイ(廈門)市など一部の地域に導入した。また、この頃、人民公社を廃止・解体した。 (なお現在、経済特区に指定されている都市は、アモイ、スワトウ、シンチェン(しんせん、深圳)、チューハイ、ハイナン島であり、いずれも華南の沿岸部。) 農村でも、自治体が企業として生産活動をする'''郷鎮企業'''(ごうちん きぎょう)が設立された。 また、生産請負性が導入された。生産請負性とは、国に一定量の請け負い分の農作物を納めたら、それ以上の農作物は自由に販売してもいいという制度である。 2001年には、中国はWTO(世界貿易機関)に加盟した。近年の中国は貿易黒字であり、その結果、外貨準備高は世界最大である。 欧米や日本などの工場も、人件費の安さや、人口の多さによる消費者の多さを当てにして、おそくとも2000年ころからは、多くの外国企業の工場などが中国各地に進出した。ただし、すでに1970年代から、中国の経済特区には外国企業が進出していた。 2000年代の頃の中国の工場では、液晶テレビ・エアコン・冷蔵庫なども生産できるようになった。そのため、中国は、テレビ・エアコン・冷蔵庫など家電の一大生産国になった。 こうして2000年〜2010年代、中国は、経済の規模がアメリカや日本につぐ経済大国になり、中国のGDP(国内総生産)も世界2位になった。(なお、GDP世界1位はアメリカ合衆国。GDP世界3位は日本。) 2010年の時点では、中国のGDPは世界2位であり、2015年までは中国がGDP世界2位のままである。(なお、日本のGDPは、2010年〜2015年では世界3位である。) GDPは、所得の水準ではない。所得の水準では、中国は、日本やアメリカと比べ、所得が低い。 仮に、日本やアメリカが平均的に高所得の国だとしたら、中国は中所得の国だろうし、インドやベトナムは低所得だろう。 つまり、中国経済は、中所得の国ではあるが、人口が多いため、GDPが世界2位である。 中国は、'''BRICs'''(ブリックス)のうちの一国として、各国の投資家などが経済発展を期待している。BRICsとはブラジル(Brazil)、ロシア( (Russia)、インド(India )、中国(China) のこと<ref>近年はsを大文字のSとして、南アフリカ共和国(South Africa)を含めることが多い。</ref>。 BRICsは国土と人口と資源の多いから、経済発展するだろうと期待された4国のことである。 しかし、近年では、中国でも人件費が上昇しつつあり、外国企業は、より人件費の安いベトナムなどの東南アジア諸国に工場を移している。 なお、中国に進出する外国企業については、地元中国と共同で設立された{{ruby|合弁企業|ごうべんきぎょう}}とする中国政府の決めた法律などがあるので、中国進出した外国企業の工場・会社などは合弁企業である。 <references/> === 格差問題 === 中国では、貧富の格差もとても大きい。 [[Image:Baked sweet potato vendor chinaA075924.jpg|thumb|220px|民工は一旦失業すると、通常故郷の農村に戻るのは困難であり、そのまま都市部に滞留する。]] とくに、内陸部の農村部は貧しい。そのため、農村部から出稼ぎなどで、沿岸部などの都市部に働きに出る。農村部から出稼ぎに来る人たちを 「農民工」(のうみんこう)あるいは「民工」(みんこう)と言う<ref>「工」の字があるが、日本語での「工業」の「工」とは意味合いが違い、中国語の「工場」などの「工」の意味は製造業に限定せずに労働一般の意味である。たとえば中国語の「工場」なら、日本語でいう「仕事場」「作業場」のような意味である。</ref>。 また、中国では、農村から都市へ人口が流入している。このような、中国での農村から都市部への人工流入の現象を'''民工潮'''(みんこうちょう)という。 中国の経済は、その貧富の格差によって、人件費を低くおさえているという面もある。 中国では、戸籍の変更が困難であり、原則的に農村で生まれたら、農村の戸籍のままである。 したがって出稼ぎ労働者は、戸籍は農村戸籍のまま、都市に出稼ぎにきている人が多い。農村出身者は、たとえ都市に住居を構えても、戸籍は農村戸籍のままである。 中国の法律・制度などによる出稼ぎのありかたでは、都市に住居が確保されてる場合などにかぎり、都市に出稼ぎしてよいのであるが、じっさいには都市に住居を確保しないまま違法に出稼ぎしている場合も多い。 <references/> === その他 === 2008年には北京オリンピックが開催された。2010年には、{{ruby|上海国際博覧会|シャンハイ こくさい はくらんかい}}(上海万博)が開かれた。 インターネットや携帯電話やテレビなどは、都市部を中心に普及している。しかし{{ruby|検閲|けんえつ}}などの{{ruby|言論統制|げんろん とうせい}}が厳しく、インターネットやテレビや雑誌などでの自由な議論などは出来ない。 * 華僑 中国人は、中国の本国とは別の場所にも多く移住している。世界中のいろんな国に中国人は移住しており、それら外国にいる中国人を{{ruby|華人|かじん}}({{ruby|華僑|かきょう}})という。特に東南アジアやアメリカに多い。 * 開発 [[File:ThreeGorgesDam-China2009.jpg|thumb|200px|サンシヤ(三峡、さんきょう)ダム]] 2000年頃から、「'''西部大開発'''」として、開発の遅れていた内陸部や西部の開発が進んでいる。理由は、主に経済格差を解消するためや、あるいは、すでに沿岸部の開発が進んで沿岸部は開発の余地が減ったこと等だろう。 西部大開発により、道路や鉄道の基盤が整備され、ガスや電気が整備されている。 重慶(じゅうけい、チョンチン)やチベットなどが、開発されている。 2009年に、内陸部の湖北(こほく、フーペイ)省で、長江(ちょうこう、揚子江(ようすこう)とも言う。)ぞいに、サンシヤ(三峡、さんきょう)ダムが完成した。ダムの建設により、長江の水の流れがせき止められるので、生態系への影響が各国の環境保護団体により心配されている。 [[ファイル:Threegorges.png|500px|thumb|none|長江と三峡ダム (Three Gorges Dam) の位置]] [[File:Qinghai-Tibet railway.jpg|thumb|right|250px|チベット方面の鉄道]] 鉄道の建設も、各地で進んでいる。西部のチベット自治区では、青蔵(せいぞう)鉄道が2006年に開通した。 === 環境問題 === * 大気汚染 工業地帯や都市を中心に、大気汚染が深刻である。理由は主に、燃料の石炭などが大量に燃やされているため。 * 酸性雨 大気の汚染にともない、酸性雨の被害も発生している。 * 森林破壊 耕地を広げたり、工業地域や商業地域の開発などのための無理な森林開拓により、森林破壊も起きている。 * 水質汚染 工場などから出る排水などによる、水質汚染も各地で深刻である。川の魚が大量に死んだりする事例も多く発生している。 中国の国民1人あたりのエネルギー消費量は世界の平均と比べて低く、経済発展によるエネルギー消費量の上昇にともない、これから、まだまだ環境破壊が進むおそれもある。 === 領土問題 === :(高校地理の検定教科書では、あまり触れていない。) 中国は周辺国との領土をめぐる争いが多い。東南アジア諸国と中国とのあいだでは、スプラトリー諸島(Spratly Islands、 中国名:{{ruby|南沙|ナンシャー}}諸島 )をめぐって、ベトナム、フィリピン、マレーシア、ブルネイと争っている。ブータンとは国境問題がある。さらにインド、パキスタンとはカシミールをめぐる領土問題がある。 日本とは、{{ruby|尖閣諸島|せんかくしょとう}}をめぐる争いが起きている。日本の固有の領土であるが、中国も領有権を主張している。2010年には、中国の漁船が日本の海上保安庁の漁船に衝突する事件が起きるなど、小規模なトラブルが多く発生している。 韓国・北朝鮮とも{{ruby|白頭山|ペクトサン}}(中国名:長白山)や黄海上の島々の領有をめぐる領土問題がある。 === ホンコンとマカオ === ホンコン(香港)は、1997年にイギリスから中国に返還された。それから'''一国二制度'''によって、例外的に香港では資本主義制度をはじめとしたイギリス領時代の制度がしばらく認められていた。しかし2020年の中国の国家安全保障法の制定により、香港の一国二制度は形骸化している(※実教出版の『政治経済』の見解)。 第二次大戦後は軽工業や機械工業が盛んだったが、近年ではホンコンは金融の中心地にもなっている。 マカオはポルトガルから1999年に返還された。マカオもホンコンと同じように一国二制度の対象となっている地域である。こちらは伝統的にカジノで有名な島である。 == 台湾 == 中国には、中国大陸を中心とした政府を持つ『中華人民共和国』と、もうひとつ、台湾に『{{ruby|中華民国|ちゅうかみんこく}}』という政府がある。 (※ この記事では、たんに「中国」といったら、中華人民共和国のこととする。台湾の中華民国政権のことを言う場合には、この節では「台湾」や「中華民国」などと区別することにする。) :※ 日本政府の公式見解では台湾を国と認めてないので、検定教科書には「中華民国」の名や地図は書いてないかもしれないが、しかし確実に台湾問題は中学高校で(授業中の教師の口頭などで)習うハズなので、本wikiでは「中華民国」などを記載していく。 日本とは、1978年にむすばれた{{ruby|日中平和友好条約|にっちゅうへいわゆうこうじょうやく}}によって、中華人民共和国と国交があるが、その時から日本政府は台湾と断交している。民間レベルでの日本と台湾の経済交流はつづいている。 台湾の政治は民主主義であり、普通選挙が行われている。親日的である。 {{ruby|台湾|タイワン}}を中心とした政権である。首都は{{ruby|台北|タイペイ}}。工業国である。 * 農業 台湾は南方にあることもあって、農業では稲作が多い。 * 工業 台湾の工業では、コンピュータ部品などの産業が、さかんである。大陸側の人件費の安い労働力などを利用するため、台湾の企業が大陸側に工場をもうけたりしている。 1970年代ごろは、'''アジアNIES'''のひとつとして、韓国とともに台湾は数えられていた。 * 2つの中国が出来た経緯 第二次大戦の前や戦中では、中国は中華民国という国であり、国民党という政党が支配をしていて、{{ruby|蒋介石|しょうかいせき}}という人物が国の支配者だった。しかし第二次大戦後、ソビエト連邦の支援を受けた中国共産党が、国民党と戦闘し、中国は内戦になった。そして共産党が勝利して、中国は、1949年に 中華人民共和国という国になった。 共産党の支配者は毛沢東という人物で、毛沢東が中国大陸の支配者になった。 いっぽう、負けた蒋介石ひきいる国民党は台湾にのがれた。 このため、台湾は中華民国になった。このころから、中国は「中華人民共和国」と「中華民国」との2つの中国が存在する状況になった。 しかし、日本をふくめ世界の多くの国は、台湾は中国の一部という立場にたっている。また、現在の国際連合では、中華人民共和国を中国の代表として認めており、台湾は国連に加盟できない。 [[カテゴリ:アジアの地理]] [[カテゴリ:東アジア]] si1rkymm7y5ijuxs3s9be14za8szgf8 246696 246695 2024-04-14T11:01:42Z すじにくシチュー 12058 /* ホンコンとマカオ */ wikitext text/x-wiki == 朝鮮半島 == {| class="wikitable" style="float:right" |+ 近代以降の朝鮮半島のあゆみ | 1894年 日清戦争。 |- | 1910年 韓国併合。 |- | 1945年 第二次世界大戦で日本が敗戦。<br />     アメリカ・ソ連が朝鮮半島を分割占領。 |- | 1948年 大韓民国、朝鮮民主主義人民共和国の建国。 |- | 1950年 朝鮮戦争。 |- | 1965年 日韓基本条約。日韓国交正常化。 |- | 1988年 ソウルオリンピック開催。(北朝鮮は不参加) |- | 1990年 韓ソ国交樹立。 |- | 1991年 韓国・北朝鮮の国連加盟。 |- | 2000年 南北首脳会談。 |- |} 2016年現在、朝鮮半島には、'''大韓民国'''(通称・'''韓国''')と'''朝鮮民主主義人民共和国'''(通称・'''北朝鮮'''またはDPRK)という2つの国がある。 20世紀初頭は朝鮮国(日清戦争後は大韓帝国)という国だったが、日清戦争・日露戦争後に、朝鮮は日本に併合され(韓国併合)、植民地になった。このとき、日本本土と同様に近代化政策が朝鮮半島でも進められた。 1945年の日本の敗戦により、名目上は朝鮮民族の独立国として、1948年に韓国と北朝鮮が独立した。しかし、終戦直後からしばらく、韓国はアメリカ合衆国の属国、北朝鮮はソビエト連邦の属国だった。 韓国と北朝鮮の戦争である{{ruby|朝鮮戦争|ちょうせんせんそう}}が1950年に起きたが、現在は停戦中である。{{ruby|北緯|ほくい}}38度線をさかいに2つの国に分かれており、38度線の北側が北朝鮮であり、38度線の南側が韓国である。 1990年に韓国と北朝鮮は同時に国連に加盟した。 2016年の現在、北朝鮮と日本とは国交が無い。近年、北朝鮮は核実験を成功させ、たびたびミサイル実験を行っている。 ::(※ 範囲外 :)方角の関係から日本に向けてミサイルを発射するため、日本国内ではかつてないほどに北朝鮮を恐れ憎む感情が大きくなっている。(※ ほぼ2016年代の事実だが、しかし検定教科書やセンター入試では、日本の現在世論への言及は控えている。) :(※ 地理の範囲外: )そのため日本の世論では、北朝鮮への強硬策をとなえる人やその強攻策を支持する人も多い。 ::(※ 検定教科書の事情:) 基本的に確定した政策以外、検定教科書やセンターには出ないので、「強攻策が」どうのこうのは検定教科書・大学入試には出ないのが通常。もし出るとしても『政治経済』科目の担当。 == 韓国 == === 概説 === [[ファイル:Flag of South Korea.svg|thumb|left|200px|大韓民国(だいかん みんこく)の国旗]] [[File:Korea-Seoul-Sejongno-01.jpg|thumb|right|韓国の首都ソウルでの風景。]] [[File:Gimchi.jpg|thumb|left|キムチは韓国由来の料理。]] 韓国の経済では最近は、工業の発展が目覚ましい。とくに電子機器や半導体など'''電子機械'''の分野では、世界的にも競争力が高い。自動車産業や造船業もさかんである。 <gallery widths=200px heights=200px div style="border:1px solid #000000; float: right;"> File:Korea-Busan-Beomeosa-04.jpg|韓国の女性の民族衣装(みんぞくいしょう)のチマ・チョゴリ。チョゴリとは上着のことで、チマとはスカートのこと。 File:Hanbok male.jpg|伝統的なズボンは「パジ」と言う。 </gallery> {{clear}} 韓国の民族衣装では、女性用の民族衣装である'''チマ・チョゴリ'''が有名である(センター試験などにも「チマチョゴリ」は出やすいようだ。センター対策の参考書にも紹介されている。ほかにも男性用の民族衣装などもあるのだが、あまり有名でなく、入試に出ないだろう)。 現在、日本と韓国は国交がある。1965年の{{ruby|日韓基本条約|にっかん きほんじょうやく}}で、国交を回復したのである<ref>当時はベトナム戦争の最中であり、後方であり、同盟国の日本と韓国の間に国交がないことが不都合であるとアメリカが認識したことが、日韓の国交回復をうながした背景にある。また、互いに都合のいい解釈の余地を残したことから、1990年代以降、戦後補償問題についての原因ともなった。</ref>。 韓国の経済では、{{ruby|'''財閥'''|ざいばつ}}と呼ばれる、ごく少数の大企業が、経済に大きな影響力をもっている。 1997年の'''アジア通貨危機'''では、韓国も大きな打撃を受け、韓国の通貨'''ウォン'''は暴落し、韓国は一時的にIMF(国際通貨基金)に経済をゆだねることになった。 その後、韓国経済は回復し、今日の繁栄に至る。 <!--一説には、通貨危機の結果、通貨安になったことが、輸出に有利だったことが、説として挙げられる。(※ 教科書・参考書には無い説)--> 教育については、韓国はかなりの学歴社会であり、近年では大学など高等教育機関への進学率がほぼ80%を超えて世界最高の水準である。なお、大学の学費は、韓国では有料である。 韓国は国土面積が小さいわりに、人口が4800万人と多いので、人口密度が高い。しかも、首都ソウルに人口が集中してるので、ソウルが過密である。このため、韓国は日本と同様に食料自給率も低く、韓国の食料自給率は約50%である(なお日本の食料自給率は約40%である)。 <references /> === 地形と気候 === 朝鮮半島の国土は、安定陸塊であり、地震がほとんど無い。 韓国の南部の沿岸は、'''リアス式海岸'''になっている。 韓国の気候は、夏は韓国も太平洋の気団の影響を受けて暑くなるが、冬にはシベリア気団の影響で寒くなる。そのため、同緯度の日本や中国の各都市と比べて、韓国は1年の温度差が大きい。 「'''オンドル'''」という、伝統的な床暖房のためのカマドがあるのも、そもそも韓国の冬が寒いからである。 === ハングル === 韓国の文字を'''ハングル'''という。漢字ではなくハングルが、韓国では国語の文字として用いられている。 ハングルは15世紀に朝鮮王朝が制定した表意文字である。15世紀の当時は、支配層は漢字を用いていたが、平民は識字率が低く、そのため平民にハングルを普及させて識字率を高めようとしたのである。 近現代になってハングルが普及する前は、韓国の政府などでは漢字を多く用いていたので、漢字に由来する言葉が韓国にも多い。 現在の韓国では、民族固有の文字を重視する政策のため、漢字は日常語としては用いられていない。 === 宗教など === 儒教の影響が強い。そのため、父親の権力が強い・女性は結婚しても女性の父方の姓を名乗るなど、儒教による制度の名残が今も残っている。 また、韓国ではアジアの中ではキリスト教徒が多い国の一つで、全人口の30%ちかくはキリスト教徒とされる。 === 韓国の戦後経済 === ====韓国の工業化==== 1960年代までは、韓国は農業国、または繊維産業などの軽工業の国だった。 1960年代後半からは工業化が進んでいき、1970年代に'''鉄鋼'''や'''造船'''や'''石油化学'''など重工業も発達し、「'''{{ruby|漢江|ハンガン}}の奇跡'''」と言われた。「漢江」(ハンガン)とは、ソウル市内を流れる川の名前。 工業団地が、首都ソウルを中心につくられた。ソウルでは、機械工業が盛んである。また外港の'''インチョン'''(仁川)で、造船が盛んである。なお、インチョンには国際空港もある。 また、日本海側の沿岸部のウルサンやポハンで、工業団地が作られ、その工業団地で工業が発達した。ポハンは鉄鋼、ウルハンは鉄鋼および石油化学である。資源を輸入するのに、臨海部のほうが有利だからである。このように、ポハンとウルサンが、臨海型の工業地域を形成している。 また、このような発展により、'''アジア{{ruby|NIES|ニーズ}}'''と呼ばれる新興国として1970年代ごろから国際的に認知されていった<ref>1970年代当時の「NIES」(振興工業経済地域)とは、一般に'''韓国'''、'''シンガポール'''、'''香港'''、'''台湾'''の4地域のことをいう。</ref>。 1990年代ごろから、韓国では電子機械工業や自動車工業が発達した。 1996年に、韓国は、おもに先進国からなる'''OECD'''('''経済協力開発機構''')に加盟した。 一方、韓国に進出していた外国企業が、韓国の賃金の上昇により、韓国から撤退していき、外国企業は中国や東南アジアなどに工場を移していった。 また、都市を中心に工業化が進んだことから、韓国では都市と農村との経済格差が出て来た。農村から、多くの労働者が、仕事を求めるなどの理由で、都市に流入していった。2016年の現在、総人口の約5分の1にあたる1000万人以上がソウルに居住している。 韓国ではインターネットやブロードバンドの普及率が高い。 2011年2月に韓国は、アメリカ合衆国との'''FTA'''('''自由貿易協定''')に調印。 近年では、'''プサン'''('''釜山''')が韓国最大の貿易港であり、世界的にも規模の大きい貿易港である。 ====韓国の農業==== 1970年代から、韓国では、農村の所得の低さを解消する目的のために、農地の整備などを掲げた'''セマウル運動'''が行われ、灌漑の導入、農業機械の導入などが行われ、韓国農業は生産性が向上した。 韓国は輸出を基盤とした経済のため、農産物の貿易については、米以外の農産物の輸入を自由化しており、そのため中国産の低価格の野菜との競走では、韓国の野菜農家は不利である。 <references /> === 日本との文化交流 === 1980年代まで、韓国は、日本文化の流入を規制してきた。しかし、1990年ごろから、日本の文化の流入を開放した。 2002年には、日韓共催サッカーワールドカップが開かれ、両国の関心をあつめた。 また、2000〜2005年頃、韓国製ドラマが、「{{ruby|韓流|かんりゅう}}ドラマ」として、日本の放送局などでも取り上げられ、日本のテレビ視聴者層で話題になった。 これにはアジア通貨危機の際に、国家的経済危機に陥った韓国が経済回復のために、IT・コンテンツ産業を振興させたという背景がある。そのため韓国のインターネット普及率は日本のそれ以上である。 また2010年ごろに日本で第一次K-POPブームが巻き起こったのには韓国国内で違法ダウンロードなどが増え国内の市場が縮小したことが要因の1つになっている。 {{clear}} == 北朝鮮 == [[ファイル:Flag of North Korea.svg|thumb|200px|北朝鮮(きたちょうせん)の国旗]] 首都はピョンヤン。 政治は社会主義であり、{{ruby|金日成|キム・イルソン}}とその子孫による独裁政治がつづいている。 国名は、{{ruby|朝鮮民主主義人民共和国|ちょうせん みんしゅしゅぎ じんみんきょうわこく}}。 北朝鮮は、ソ連や中国を手本とした計画経済の国であった。しかし、指導者が、農業など産業の知識が乏しいのに口出しをするという(たとえば、農地を広めるために山の森林を大量伐採して、洪水を引き起こすなど)ずさんな経済政策や、軍事費の過大な負担などのため、{{ruby|飢饉|ききん}}や洪水などが、たびたび発生した。 資源が比較的多く、戦前・戦中に日本企業の導入した工場設備なども比較的に多かったこともあり、北朝鮮では重工業化が戦後の早くから進んだ。しかし、経済政策の失敗から、1970年代以降の経済力・工業力は韓国に追い抜かれている。 外交問題として、日本とは国交がない。そして、北朝鮮の工作員に日本人がさらわれたという、{{ruby|拉致|らち}}問題がある。2002年に、日朝ピョンヤン宣言で、北朝鮮は拉致問題をみとめた。しかし、その後はほとんど進展がない。 なお、北朝鮮は核開発をしているので、アメリカを中心とした多くの国から経済制裁を受けている。核兵器を持っていることが公式に認められている国は、アメリカ・ロシア・中華人民共和国・フランス・イギリス・インド・パキスタンである。北朝鮮は、この核兵器開発をみとめない諸国の姿勢を、アメリカ中心の姿勢だとして批判している。 {{clear}} == 中国 == === 地形 === 中国西部は、山脈や高原などの高地である。 いっぽう、中国東部は平原などの低地である。 人口は、東部に集中している。 黄河(こうが)の中流の周囲に、{{ruby|'''黄土'''|'''おうど'''、こうど}}と呼ばれる黄色〜茶褐色の砂の平原がある。黄土は英語で「'''レス'''」という。 黄河と長江のあいだあたりに、'''ホワイ川'''がある。このホワイ川は、1月の平均気温0℃と年間降水量1000mあたりの線に近く、地理学では大切であるので、'''チンリン=ホワイ線'''という。チンリンとは、'''チンリン山脈'''のこと。 つまり、農業では、チンリン=ホワイ線よりも北が小麦などの畑作地帯である。チンリン=ホワイ線よりも南側が稲作地帯である。 === 解説 === {| class="wikitable" style="float:right" |+ 近現代中国のできごと | 1911年 辛亥革命(しんがい かくめい)。 |- | 1912年 中華民国が成立。 |- | 1937年 日中戦争がこの頃に勃発。 |- | 1945年 第二次世界大戦が終結。 |- | 1949年 中華人民共和国が成立。 |- | 1958年 大躍進運動(1960年頃まで)。 |- | 1966年 文化大革命(1976年まで)。 |- | 1989年 天安門事件。 |- | 1997年 ホンコン返還。 |- | 1999年 マカオ返還。 |- | 2001年 WTO加盟。 |- | 2008年 ペキンオリンピック。 |- | 2010年 シャンハイ万博。 |- |} 中国(中華人民共和国)は、人口が約13億人であり、世界でもっとも人口が多く、世界の人口の約5分の1をしめている。 :・首都 :ペキン(北京) :・面積 :約963万 km<sup>2</sup> :・人口 :約13億8000万人(2014年) :・主な言語 :中国語  * 第二次大戦後の歴史 第二次大戦が終わると、国民党と共産党との内戦が起きた。そして、毛沢東ひきいる共産党が勝利した。国民党は、台湾に逃げのびた。 こうして、中国は、毛沢東ひきいる共産党の主導のもと、1948年に'''中華人民共和国'''として建国され、社会主義の国となった。そして、中華人民共和国の建国の初期に、多くの企業が国有化された。 そして、1958年から大躍進政策とよばれる農業・工業の大増産を行うが、中国の実情を無視した計画により、逆に{{ruby|飢饉|ききん}}が発生するなどして大失敗に終わる。さらに、1966年から毛沢東が死去する1976年まで文化大革命が行われ、中国の政治・経済はさらに混乱した。その後、アメリカ・日本などと国交を回復するとともに、経済面においては改革開放路線を敷き、自由主義経済を取り入れたことにより、急速な経済発展を遂げつつある。 === 人口問題 === 中国は、1組の夫婦の子供の数は1人だけとする '''一人っ子政策''' を1979年から行っている。ただし少数民族は、一人っ子政策の適用外である。おもに、漢民族が、一人っ子政策の対象である。 このため、現在、人口の増加は抑えられている。かわりに、高齢者の割合がふえる{{ruby|高齢化|こうれいか}}が予測されており、心配されている。(いっぽう、インドも人口が10億をこえるが、インドでは人口の増加が予測されている。将来的にインドの人口が中国の人口を抜く可能性が予測されている。) しかし、法律に逆らって、2人目の子どもを産んで、出生届を出さない事態も起きている。出世届けが出されないため、その子には戸籍がない。このように戸籍を持たない子どもは、「闇っ子」のような意味で'''ヘイハイズ'''(黒孩子)と呼ばれる。都市よりも農村で、無戸籍の闇っ子が多く見られる。 また、中国人は、あと継ぎや労働力として男子が欲しいようで、女の子が産まれても処分するようであり、そのため人口比が男に片寄り始めている。 そういった弊害もあって、一人っ子政策の見直しがされている。両親とも一人っ子の場合には第二子が認められたり、また、第一子が女子の場合には第二子が認められる場合もある。 === 民族 === 中国の人口のうち、9割の民族は'''漢民族'''(かんみんぞく)である。漢民族は、おもに中国東部に住んでいる。 ある国で、多数派でない民族は、'''少数民族'''という。中国は50以上の少数民族を持つ'''多民族国家'''である。おもな民族は、漢民族、ウイグル族、モンゴル族、チベット族、ミャオ(苗)族、朝鮮族、ホイ(回)族、チョワン(壮)族、などである。 [[ファイル:President George W. Bush and the 14th Dalai Lama at the Whitehouse in 2001.jpg|right|200px|thumb|ダライ・ラマ14世(14th Dalai Lama)と会談するアメリカのジョージ・ブッシュ(George W. Bush)大統領(2001年)]] 中国は第2次世界大戦のあとにチベットとウイグル地方を侵略し併合したので、チベット人とウイグル人は、中国の少数民族になっており、チベット民族やウイグル民族として扱われている。 中国政府は、少数民族の自治区をもうけており、チベット自治区などをもうけており、伝統文化などを保護しているが、少数民族の中国からの独立などは認めていない。そのため、中国の支配に対する抵抗運動などがチベットやウイグルなどで、たびたび起きている。こうした独立運動に対して中国政府が厳しい弾圧を加えていること、漢民族との政治的・経済的格差が生まれていることから、人権問題として批判されることが多い。 チベット仏教の最高指導者であるダライ・ラマ14世(14th Dalai Lama)は、1959年にインドに亡命した。 === 参考: 独裁政治 === :(高校教科書では、あまり触れていない。) 政治制度に関しては、社会主義であり、民主主義では無い。共産党が政治の決定権をにぎっており、事実上は、中国共産党による独裁政治の国である。たとえば政治指導者は、中国共産党内部で決定され、国民からの直接の選挙では選ばれていない。1989年には、天安門で民主化をもとめる学生の抗議運動がおきたが、この運動は弾圧された。この天安門での抗議運動に関する事件を{{ruby|天安門事件|てんあんもん じけん}}と言う。 === 農業 === 中国は農業の大国である。中国のおもな農産物は、米、トウモロコシ、小麦である。 農業は、華南(「かなん」、意味:中国の南部のこと)や華中(かちゅう、意味:北部と南部のあいだ)では、雨が多いため、'''米'''の生産が多い。また、これら南部では、'''茶'''の生産も盛んである。 つまり、中国の南部では、'''米'''と'''茶'''の生産が盛んである。 東南アジアに近いハイナン(海南)島のあたりでは、年に2回、米を作る'''二期作'''も行われる。 華北(「かほく」、意味:中国の東北部)では、雨が少ないため、'''小麦'''・大豆などの畑作が多く、また、'''コウリャン'''という雑穀の一種を生産している。なお、近年では、日本などから寒さに強い品種改良された稲を導入するなどして、中国北部でも米の生産もするようになった。 西部は、乾燥しており、あまり農業にはむかず、遊牧などの牧畜が中心である。 中国は、小麦の生産量が世界1位である。(2位インド、3位アメリカ。) 中国北部やインド内陸部などの乾燥地帯の農業では、小麦など乾燥に強い作物の畑作がさかん。 2000年頃から、中国人の食生活の変化により、肉類の需要が増えたため、飼料用作物としてトウモロコシや大豆の消費が増えた。 このため、アメリカなどからのトウモロコシや大豆の輸入が増え、中国は近年(2016年に記述)では大豆の輸入国に転じている。 農産物の品質管理能力が低い企業も多いようで、2000年ごろから中国産の農産物に有害な物質が混ざるなどして、消費者に健康被害が出る問題が発生・発覚している。 ===食文化と地域差=== 中華料理の地域料理は農作物の分布に対応している。南部では稲作が有利なため、ビーフンなどの米を使った地域料理が多い。いっぽう北部の地域料理には、小麦を使ったものが多い。こうした農作物の分布の違いに加えて、文化や風土の差異から様々な料理が生まれた。日本では北京・上海・広東・四川料理が知られる。 北京料理は、北京が明・清時代に首都であったことから北京ダックなどのように宮廷料理をルーツとしているものがある。また、畑作や牧畜が中心のため、米よりも小麦を使ったものが多く、魚よりも肉がよく使われる。日本でなじみ深い麺類(ラーメン)や{{ruby|餃子|ギョウザ}}や{{ruby|饅頭|マントウ}}などが、北部の地域料理である。 上海料理は、現在の上海の地域が中国の穀倉地帯であったこと、長江流域に属することから米と豊かな魚介類を使った料理がメインである。日本では{{ruby|小籠包|しょうろんぽう}}や上海ガニがよく知られている。 広東料理は、広東省一帯が古くから貿易で盛んだったことから様々な食材が使われてきた。くわえて、海に面しているため、魚介類を中心とした素材のうま味を生かした薄味の料理が多い。日本では飲茶やふかひれスープなどがよく知られる。 四川料理は、四川省一帯の料理である。長江流域の内陸のため、湿度は一年中高いが、気温は夏冬の差が激しい。そのため、体調をととのえるとされる香辛料をふんだんに使った料理が多い。食材には肉や川魚がよく使われる。日本でよく知られているのは麻婆豆腐や担々麺である。また、茶の原産地であり、茶を飲む習慣もここから始まった。 なお、少数民族の自治区では、その民族独時の文化や風土にねざした料理もある。 (※ 中国の地域料理の出題が、入試に出やすい。地域料理の分布の傾向には例外もあるだろうが、そのような瑣末な例外的知識は一般の高校生には不要なので、そういう瑣末な知識を問う大学は、相手にしないほうが良いだろう。) === 工業 === 工業は、人件費の安さを利用している。そのため、世界の多くの国に中国の製品が輸出されており、中国は「'''世界の工場'''」とも言われている。 南部の沿岸部の地域などに経済特区が多く、そのため工業地帯も南部の沿岸部に多い。南部の香港(ホンコン)の近くにあるシェンチェン(しんせん、深圳)市が経済特区であり、シェンチェンなどを中心に工業が発展している。 :(※ wiki編集上の技術的な注意 :)「深圳」の「圳」は日本語のコンピュータ環境では、文字化けの可能性があります。このため、ビジネス文書などでは慣用的に「シンセン」、「深セン」などと書く場合があります。 南部とは別にも、中国東北部には第2次大戦の前から日本の旧・満州国への投資などで発達していた工業地帯があり、戦後も東北部の工業地帯が重工業の地帯になっている。(※ 検定教科書にも、旧・満州国の設備が、第二次大戦後の中国での重工業に役だったということが普通に書いてある。) 東北部では、アンシャンに鉄山があり鉄鉱石の産地であることもあり、第二次大戦後には東北部で重化学工業が発達した。 なお、華中の'''ウーハン'''(武漢、ぶかん)にも鉄鋼コンビナートがある。 第二次大戦後、'''アンシャン'''、'''パオトウ'''、'''ウーハンで'''、工業化が進められた。 なお、東北部のターチン油田で、石油が産出する。 そのほか、鉱産資源としてレアメタルがレアアースの産地が中国になる。 [[File:Shenzhan landmark3.jpg|thumb|300px|left|シェンチェン(深圳、しんせん)市。経済特区に指定されている。]] [[Image:PR China-SAR & SEZ-Chinese.png|thumb|350px|中華人民共和国の経済特区]] [[ファイル:Hongkong victoria peak.jpg|thumb|left|220px|香港(ホンコン)]] === 経済政策の歴史 === 第2次大戦後、中国の経済は、市場経済を禁止して、政府が経済を管理する、計画経済の経済政策を取った。 また、農村の集団化のため、'''人民公社'''(じんみんこうしゃ)を設立した。 しかし、計画経済がうまくいかず、中国は経済発展が遅れた。1980年ごろから、経済のおくれを取り戻すため、鄧小平(とう しょうへい)の指導により、市場経済を部分的に取り入れていく'''改革・開放'''政策に転じ、また、'''経済特区''' を'''シェンチェン'''(しんせん、深圳)市やアモイ(廈門)市など一部の地域に導入した。また、この頃、人民公社を廃止・解体した。 (なお現在、経済特区に指定されている都市は、アモイ、スワトウ、シンチェン(しんせん、深圳)、チューハイ、ハイナン島であり、いずれも華南の沿岸部。) 農村でも、自治体が企業として生産活動をする'''郷鎮企業'''(ごうちん きぎょう)が設立された。 また、生産請負性が導入された。生産請負性とは、国に一定量の請け負い分の農作物を納めたら、それ以上の農作物は自由に販売してもいいという制度である。 2001年には、中国はWTO(世界貿易機関)に加盟した。近年の中国は貿易黒字であり、その結果、外貨準備高は世界最大である。 欧米や日本などの工場も、人件費の安さや、人口の多さによる消費者の多さを当てにして、おそくとも2000年ころからは、多くの外国企業の工場などが中国各地に進出した。ただし、すでに1970年代から、中国の経済特区には外国企業が進出していた。 2000年代の頃の中国の工場では、液晶テレビ・エアコン・冷蔵庫なども生産できるようになった。そのため、中国は、テレビ・エアコン・冷蔵庫など家電の一大生産国になった。 こうして2000年〜2010年代、中国は、経済の規模がアメリカや日本につぐ経済大国になり、中国のGDP(国内総生産)も世界2位になった。(なお、GDP世界1位はアメリカ合衆国。GDP世界3位は日本。) 2010年の時点では、中国のGDPは世界2位であり、2015年までは中国がGDP世界2位のままである。(なお、日本のGDPは、2010年〜2015年では世界3位である。) GDPは、所得の水準ではない。所得の水準では、中国は、日本やアメリカと比べ、所得が低い。 仮に、日本やアメリカが平均的に高所得の国だとしたら、中国は中所得の国だろうし、インドやベトナムは低所得だろう。 つまり、中国経済は、中所得の国ではあるが、人口が多いため、GDPが世界2位である。 中国は、'''BRICs'''(ブリックス)のうちの一国として、各国の投資家などが経済発展を期待している。BRICsとはブラジル(Brazil)、ロシア( (Russia)、インド(India )、中国(China) のこと<ref>近年はsを大文字のSとして、南アフリカ共和国(South Africa)を含めることが多い。</ref>。 BRICsは国土と人口と資源の多いから、経済発展するだろうと期待された4国のことである。 しかし、近年では、中国でも人件費が上昇しつつあり、外国企業は、より人件費の安いベトナムなどの東南アジア諸国に工場を移している。 なお、中国に進出する外国企業については、地元中国と共同で設立された{{ruby|合弁企業|ごうべんきぎょう}}とする中国政府の決めた法律などがあるので、中国進出した外国企業の工場・会社などは合弁企業である。 <references/> === 格差問題 === 中国では、貧富の格差もとても大きい。 [[Image:Baked sweet potato vendor chinaA075924.jpg|thumb|220px|民工は一旦失業すると、通常故郷の農村に戻るのは困難であり、そのまま都市部に滞留する。]] とくに、内陸部の農村部は貧しい。そのため、農村部から出稼ぎなどで、沿岸部などの都市部に働きに出る。農村部から出稼ぎに来る人たちを 「農民工」(のうみんこう)あるいは「民工」(みんこう)と言う<ref>「工」の字があるが、日本語での「工業」の「工」とは意味合いが違い、中国語の「工場」などの「工」の意味は製造業に限定せずに労働一般の意味である。たとえば中国語の「工場」なら、日本語でいう「仕事場」「作業場」のような意味である。</ref>。 また、中国では、農村から都市へ人口が流入している。このような、中国での農村から都市部への人工流入の現象を'''民工潮'''(みんこうちょう)という。 中国の経済は、その貧富の格差によって、人件費を低くおさえているという面もある。 中国では、戸籍の変更が困難であり、原則的に農村で生まれたら、農村の戸籍のままである。 したがって出稼ぎ労働者は、戸籍は農村戸籍のまま、都市に出稼ぎにきている人が多い。農村出身者は、たとえ都市に住居を構えても、戸籍は農村戸籍のままである。 中国の法律・制度などによる出稼ぎのありかたでは、都市に住居が確保されてる場合などにかぎり、都市に出稼ぎしてよいのであるが、じっさいには都市に住居を確保しないまま違法に出稼ぎしている場合も多い。 <references/> === その他 === 2008年には北京オリンピックが開催された。2010年には、{{ruby|上海国際博覧会|シャンハイ こくさい はくらんかい}}(上海万博)が開かれた。 インターネットや携帯電話やテレビなどは、都市部を中心に普及している。しかし{{ruby|検閲|けんえつ}}などの{{ruby|言論統制|げんろん とうせい}}が厳しく、インターネットやテレビや雑誌などでの自由な議論などは出来ない。 * 華僑 中国人は、中国の本国とは別の場所にも多く移住している。世界中のいろんな国に中国人は移住しており、それら外国にいる中国人を{{ruby|華人|かじん}}({{ruby|華僑|かきょう}})という。特に東南アジアやアメリカに多い。 * 開発 [[File:ThreeGorgesDam-China2009.jpg|thumb|200px|サンシヤ(三峡、さんきょう)ダム]] 2000年頃から、「'''西部大開発'''」として、開発の遅れていた内陸部や西部の開発が進んでいる。理由は、主に経済格差を解消するためや、あるいは、すでに沿岸部の開発が進んで沿岸部は開発の余地が減ったこと等だろう。 西部大開発により、道路や鉄道の基盤が整備され、ガスや電気が整備されている。 重慶(じゅうけい、チョンチン)やチベットなどが、開発されている。 2009年に、内陸部の湖北(こほく、フーペイ)省で、長江(ちょうこう、揚子江(ようすこう)とも言う。)ぞいに、サンシヤ(三峡、さんきょう)ダムが完成した。ダムの建設により、長江の水の流れがせき止められるので、生態系への影響が各国の環境保護団体により心配されている。 [[ファイル:Threegorges.png|500px|thumb|none|長江と三峡ダム (Three Gorges Dam) の位置]] [[File:Qinghai-Tibet railway.jpg|thumb|right|250px|チベット方面の鉄道]] 鉄道の建設も、各地で進んでいる。西部のチベット自治区では、青蔵(せいぞう)鉄道が2006年に開通した。 === 環境問題 === * 大気汚染 工業地帯や都市を中心に、大気汚染が深刻である。理由は主に、燃料の石炭などが大量に燃やされているため。 * 酸性雨 大気の汚染にともない、酸性雨の被害も発生している。 * 森林破壊 耕地を広げたり、工業地域や商業地域の開発などのための無理な森林開拓により、森林破壊も起きている。 * 水質汚染 工場などから出る排水などによる、水質汚染も各地で深刻である。川の魚が大量に死んだりする事例も多く発生している。 中国の国民1人あたりのエネルギー消費量は世界の平均と比べて低く、経済発展によるエネルギー消費量の上昇にともない、これから、まだまだ環境破壊が進むおそれもある。 === 領土問題 === :(高校地理の検定教科書では、あまり触れていない。) 中国は周辺国との領土をめぐる争いが多い。東南アジア諸国と中国とのあいだでは、スプラトリー諸島(Spratly Islands、 中国名:{{ruby|南沙|ナンシャー}}諸島 )をめぐって、ベトナム、フィリピン、マレーシア、ブルネイと争っている。ブータンとは国境問題がある。さらにインド、パキスタンとはカシミールをめぐる領土問題がある。 日本とは、{{ruby|尖閣諸島|せんかくしょとう}}をめぐる争いが起きている。日本の固有の領土であるが、中国も領有権を主張している。2010年には、中国の漁船が日本の海上保安庁の漁船に衝突する事件が起きるなど、小規模なトラブルが多く発生している。 韓国・北朝鮮とも{{ruby|白頭山|ペクトサン}}(中国名:長白山)や黄海上の島々の領有をめぐる領土問題がある。 === ホンコンとマカオ === ホンコン(香港)は、1997年にイギリスから中国に返還された。それから'''一国二制度'''によって、例外的に香港では資本主義制度をはじめとしたイギリス領時代の制度がしばらく認められていた。しかし2020年の中国の国家安全維持法の制定により、香港の一国二制度は形骸化している(※実教出版の『政治経済』の見解)。 第二次大戦後は軽工業や機械工業が盛んだったが、近年ではホンコンは金融の中心地にもなっている。 マカオはポルトガルから1999年に返還された。マカオもホンコンと同じように一国二制度の対象となっている地域である。こちらは伝統的にカジノで有名な島である。 == 台湾 == 中国には、中国大陸を中心とした政府を持つ『中華人民共和国』と、もうひとつ、台湾に『{{ruby|中華民国|ちゅうかみんこく}}』という政府がある。 (※ この記事では、たんに「中国」といったら、中華人民共和国のこととする。台湾の中華民国政権のことを言う場合には、この節では「台湾」や「中華民国」などと区別することにする。) :※ 日本政府の公式見解では台湾を国と認めてないので、検定教科書には「中華民国」の名や地図は書いてないかもしれないが、しかし確実に台湾問題は中学高校で(授業中の教師の口頭などで)習うハズなので、本wikiでは「中華民国」などを記載していく。 日本とは、1978年にむすばれた{{ruby|日中平和友好条約|にっちゅうへいわゆうこうじょうやく}}によって、中華人民共和国と国交があるが、その時から日本政府は台湾と断交している。民間レベルでの日本と台湾の経済交流はつづいている。 台湾の政治は民主主義であり、普通選挙が行われている。親日的である。 {{ruby|台湾|タイワン}}を中心とした政権である。首都は{{ruby|台北|タイペイ}}。工業国である。 * 農業 台湾は南方にあることもあって、農業では稲作が多い。 * 工業 台湾の工業では、コンピュータ部品などの産業が、さかんである。大陸側の人件費の安い労働力などを利用するため、台湾の企業が大陸側に工場をもうけたりしている。 1970年代ごろは、'''アジアNIES'''のひとつとして、韓国とともに台湾は数えられていた。 * 2つの中国が出来た経緯 第二次大戦の前や戦中では、中国は中華民国という国であり、国民党という政党が支配をしていて、{{ruby|蒋介石|しょうかいせき}}という人物が国の支配者だった。しかし第二次大戦後、ソビエト連邦の支援を受けた中国共産党が、国民党と戦闘し、中国は内戦になった。そして共産党が勝利して、中国は、1949年に 中華人民共和国という国になった。 共産党の支配者は毛沢東という人物で、毛沢東が中国大陸の支配者になった。 いっぽう、負けた蒋介石ひきいる国民党は台湾にのがれた。 このため、台湾は中華民国になった。このころから、中国は「中華人民共和国」と「中華民国」との2つの中国が存在する状況になった。 しかし、日本をふくめ世界の多くの国は、台湾は中国の一部という立場にたっている。また、現在の国際連合では、中華人民共和国を中国の代表として認めており、台湾は国連に加盟できない。 [[カテゴリ:アジアの地理]] [[カテゴリ:東アジア]] e1eb9201xbudt6n1ensgs50osi4extf 高等学校 物理基礎 0 24774 246661 244477 2024-04-13T13:10:15Z 2400:4051:4460:AA00:C548:ED62:7BFB:6FD8 進捗状況更新、新学習指導要領に合わせて微修正 wikitext text/x-wiki {{pathnav|高等学校の学習|高等学校理科|pagename=物理基礎|frame=1|small=1}} :* 物理の教科書へのリンク → [[高等学校 物理]] ---- == 1編 物体の運動とエネルギー == === 1章 直線運動の世界 === [[高等学校 物理基礎/合成速度と相対速度|合成速度と相対速度]] ==力学== [[高等学校物理基礎/力学|力学]]{{進捗|75%|2024-03-10}} 以下は旧課程版([[高等学校物理基礎/力学|力学]]の未完成部分)。 #[[高等学校物理/物理I/運動とエネルギー/運動の法則|運動の法則]]{{進捗|50%|2015-07-10}} #[[高等学校物理/物理I/運動とエネルギー/仕事とエネルギー|仕事と力学的エネルギー]]{{進捗|50%|2015-07-18}} ==熱== [[高等学校物理基礎/熱|熱]]{{進捗|75%|2024-04-13}} ==波動== #[[高等学校物理基礎/波動|波]]{{進捗|100%}} #[[高等学校物理基礎/波動#音|音]]{{進捗|50%|2024-04-13}} ==電磁気== [[高等学校物理基礎/電気と磁気|電気と磁気]]{{進捗|75%|2016-01-23}} ==物理学と社会== #[[高等学校 物理基礎/エネルギーとその利用|エネルギーとその利用]]{{進捗|00%|2024-04-13}} #[[高等学校 物理基礎/物理学が拓く世界|物理学が拓く世界]]{{進捗|00%|2024-04-13}} == 資料 == === 数学の知識 === *[[高等学校 物理基礎/物理のための数学|物理基礎のための数学]]{{進捗|25%|2024-04-13}} === 物理定数 === {| class="wikitable" |+ 物理定数 |- ! 物理量 !! 概数値 !! 詳しい値 |- | 標準重力加速度 || 9.8 m/s<sup>2</sup> || 9.80665 m/s<sup>2</sup> |- | 絶対零度 || -273 ℃(=0 K) || -273.15 ℃ |- | 熱の仕事当量 || 4.19 J/cal || 4.18605 J/cal |- | アボガドロ定数 || 6.02×10<sup>23</sup> /mol || 6.02214179×10<sup>23</sup> /mol |- | 理想気体の体積(0℃, 1気圧) || 2.24×10<sup>-2</sup> m<sup>3</sup>/mol || 2.2413996×10<sup>-2</sup> m<sup>3</sup>/mol |- | 気体定数 || 8.31 J/(mol・K) || 8.314472 J/(mol・K) |- | 乾燥空気中の音の速さ(0℃) || 331.5 m/s || 331.4 5m/s |- | 真空中の光の速さ || 3.00×10<sup>8</sup> m/s || 2.99792458×10<sup>8</sup> m/s |- | 電気素量 || 1.60×10<sup>-19</sup> C|| 1.602176487×10<sup>-19</sup> C |- | 電子の質量 || 9.11×10<sup>-31</sup> kg|| 9.10938215×10<sup>-31</sup> kg |} === 物理独特の言い回し === 物理には、専門用語以外にも独特の言い回しが存在する。慣れないうちは分かりにくいかもしれないので、ここで補足しておく。 *軽い 「質量は無視できる」という意味。「軽い糸」「軽い動滑車」などのように言う。 *なめらか 「摩擦は無視できる」の意味。「なめらかな面」「なめらかな滑車」など。 *粗い 「摩擦がある」の意味。「粗い面」などのように用いる。 [[category:理科教育|こうとうかつこうふつりきそ]] [[category:高校理科|ふつりきそ]] [[category:物理基礎|*]] netg4s80s0i690pbkmy0kjgs4ywpe2j 高等学校物理基礎/波動 0 31202 246660 176808 2024-04-13T13:00:08Z 2400:4051:4460:AA00:C548:ED62:7BFB:6FD8 本文の追加、「光」は物理基礎の範囲外 wikitext text/x-wiki {{pathnav|高等学校の学習|高等学校理科|高等学校 物理基礎|pagename=波|frame=1|small=1}} 波動は物体の運動の基本的な形態の一つで、行っては帰る行っては帰るの繰り返しは、様々なインスピレーションを与える。波動は最先端の物理学に密接にかかわる分野の一つである。波力発電は、今後もっとも重要な発電方法の一つとなるだろう。 「発展」とつく単元は[[高等学校 物理]]の内容や、高校範囲外の内容を含む。物理基礎の内容を補完し、理解を深めるために設置されている。 ==波とは何か== [[File:2006-01-14 Surface waves.jpg|thumb|220px|[[表面波]]|代替文=]] 静かな水面にゆっくりと石を投げると, 石の落ちたところを中心として同心円状の波紋が広がる。このように, ある点で生じた振動が周囲に伝わっていく現象を'''波''', または'''波動'''という。 波には振動を伝える物質が必要である。振動を伝える物質のことを'''媒質'''という。そして、石が落ちたところのように振動が始まった点を'''波源'''という。 [[File:Simple harmonic motion animation.gif|thumb|220px|波に乗って移動する点は振動する。|代替文=]] 次に静かな水面に紙を浮かべ, そこに波を送ってみよう。すると, 紙は波の進む方向には進まずに上下するだけである。このことから, 波は媒質が移動するのではなく波源からの振動が伝わっていく現象であることが分かる。 == 波の性質 == === 波と媒質の運動 === ==== 波の発生 ==== 水平に張った紐やバネの一端を上下に動かすと、動かし方によって様々な波が発生する。 ごく短い間振動させると、単独の波('''パルス''')が発生する。その一方、絶えず振動させ続けると連続的な波が生じる。 実際に波を発生させると、振動によって変形した部分が平行移動していくように見える。しかし、媒質の各点は振動によって上下に動いているだけであり、媒質自体が平行移動する訳ではない。媒質の各点の、元の位置からのズレを'''変位'''と呼ぶ。 物体が往復する運動のことを'''単振動'''と呼ぶ。円運動を一つの座標軸上に投影した運動も単振動になる。(詳しくは[[高等学校 物理/単振動]]を参照。) 物体が一回の振動に要する時間<Math>T</Math>[s]を'''周期'''、1秒あたりの振動回数<Math>f</Math>[Hz]を'''振動数'''と呼ぶ。振動数の単位「Hz」は'''ヘルツ'''と読み、1/sを表す。 次の関係が成り立つ。 :<Math>f=\frac{1}{T}</Math> 物体の変位の時間変化をグラフにすると、'''正弦曲線'''(<Math>y=a\sin\theta</Math>や<Math>y=b\cos\theta</Math>のようなグラフ)となる。また、振動の中心から振動の端までの長さ<Math>A</Math>[m]を'''振幅'''と呼ぶ。 波源の単振動は周囲の媒質に伝わり、各点は波源よりも遅れて単振動を始める。その振幅と周期は波源のそれに等しい。 振動する媒質の各点を連ねた線を'''波形'''という。また、波形が正弦曲線となる波を特に'''正弦波'''と呼ぶ。 ==== 波の記述 ==== 波形の最も高い場所を'''山'''、最も低い場所を'''谷'''と呼ぶ。山の高さ、谷の深さは振幅に一致する。 隣り合う山と谷の間隔など、波一つ分の長さ<Math>\lambda</Math>[m]を'''波長'''と呼ぶ。<Math>\lambda</Math>は「ラムダ」と読むギリシャ文字で、アルファベットの<Math>l</Math>(ここでは「length」の<Math>l</Math>)に対応する。 山や谷が進む速さ<Math>v</Math>[m/s]を'''波の速さ'''と呼ぶ。 波は波源の媒質が一回振動する時間(周期)の間に一波長分進むので、次の関係が成り立つ。 :<Math>v=\frac{\lambda}{T}</Math> この式は、周期と振動数の関係式を用いて以下のように表せる。 :<Math>v=f\lambda</Math> 波について、位置(x)と媒質の変位(y)の関係を表すグラフを'''y-xグラフ'''と呼ぶ。このグラフは、ある時刻の波形そのものを表す。 これに対し、ある位置における時間(t)と媒質の変位(y)の関係を表すグラフを'''y-tグラフ'''と呼ぶ。このグラフはある位置における媒質の変位の時間経過を表す。正弦波の場合、いずれも正弦曲線で表されるため、グラフを読み取る際に注意する必要がある。 波の進む向きに波形を僅かに進めると、媒質の各点の動きがわかる。正弦波では、媒質の変位方向の速さについて、山・谷の位置で最小(0)、変位が0の位置で最大となる。 媒質がどのような振動状態にあるかを表す量を'''位相'''と呼ぶ。([[位相空間論]]の位相とは異なる。) 同じ振動状態にあるときを'''同位相'''、逆の振動状態にあるときを'''逆位相'''と呼ぶ。 例えば媒質上の2点について、 *ともに山で媒質の速度が0である場合は同位相 *変位の符号が逆で絶対値が等しい場合、逆位相 *ともに変位が0であっても、媒質の運動方向が逆である場合は逆位相 である。 同位相である2点の振動を比較すると、変位の大小がどの時刻においても一致する。一方、逆位相である2点の振動の変位は、一方が最大ならば他方は最小である。 また、原点(<Math>x=0</Math>)に関して、時刻<Math>t=0</Math>における位相を'''初期位相'''と呼ぶ。 ; '''発展:正弦波の式''' 証明は物理基礎の範囲を大きく逸脱するため省くが、x軸の正の方向に進む正弦波について、その変位<Math>y</Math>は以下の式で表される。 :<Math>y = A \sin \{2\pi (\frac{t}{T} - \frac{x}{\lambda}) + \phi \}</Math> ここで、<Math>A</Math>[m]は振幅、<Math>t</Math>[s]は時刻、<Math>T</Math>[s]は周期、<Math>x</Math>[m]は位置、<Math>\lambda</Math>[m]は波長、<Math>\phi</Math>[rad]は初期位相を表す。なお、「rad」は[[高等学校数学II/三角関数#弧度法|ラジアン]]のことである。 なお、x軸の負の方向に進む正弦波の式は以下である。 :<Math>y = A \sin \{2\pi (\frac{t}{T} + \frac{x}{\lambda}) + \phi \}</Math> ==== 横波・縦波 ==== 媒質の振動方向が波の進行方向に垂直である波を'''横波'''という。 今まで見てきた波は全て横波である。 これに対し、媒質の振動方向が波の進行方向に平行である波を縦波という。 縦波は媒質が密集した部分('''密部''')と疎らな部分('''疎部''')の繰り返しが伝わるので、'''疎密波'''とも呼ばれる。のちに学習する音波は縦波である。 縦波は媒質が固体・液体・気体のいずれの状態であっても伝わるが、横波は固体中でしか伝わらない(光波を除く)。 縦波では横波のような波形が見られず波の状態がわかりづらいため、y-xグラフにおいてx軸の正の向きに変位するときはy軸の正の向きに変位をとり、x軸の負の向きに変位するときはy軸の負の向きに変位をとる。こうすることにより、縦波を横波のように表示して横波と同じように考えることができる。 ==== 波とエネルギー ==== 地震波や津波が建物の倒壊などの深刻な被害を齎すことからわかるように、波はエネルギーを運んでいる。 波の進行方向に垂直な単位面積を単位時間に通過する波のエネルギーを、'''波の強さ'''と呼ぶ。正弦波では単振動のエネルギーが伝えられ、その波の強さは波の振幅または振動数が大きいほど大きくなる。 ; '''発展:波の強さの式''' 正弦波の強さ<Math>I</Math>[J/m^2・s]は以下のように表される。 :<Math>I = 2 \pi^2 \rho v f^2 A^2</Math> ここで、<Math>\rho</Math>[kg/m^3]は媒質の密度、<Math>v</Math>[m/s]は波の速さ、<Math>A</Math>[m]は振幅、<Math>f</Math>[Hz]は振動数を表す。 {{コラム|地震波| 地球の内部で急激な変動が起こり、それが伝わって生じる波を'''地震波'''という。[[中学校理科 第2分野/大地の変化#地震|中学校で学んだ]]ように、地震波には速く伝わるP波と遅く伝わるS波が存在する。P波は縦波、S波は横波である。地震波を地上で観測すると、P波は観測されるがS波が観測されない地域が存在する。このことから、地球内部には横波の伝わらない液体の部分が存在すると考えられている。それが地球の外殻である。}} === 一直線上を伝わる波 === ==== 重ね合わせの原理 ==== 媒質の両端から単独の波(パルス)を送る。2つの波が出会うと重なり合って波形が変わるが、その後元の波形に戻り、何事もなかったかのように進む。 このとき、波が重なり合ったときの変位<Math>y</Math>は2つの波の変位<Math>y_1, y_2</Math>の和になっている。 つまり、<Math>y = y_1 + y_2 </Math>が成り立つ。 これを'''重ね合わせの原理'''といい、重なり合ってできた波を'''合成波'''という。 重ね合わせの原理は、単独の波・連続的な波・3つ以上の波の全てにおいて成り立つ。 波が重なり合ったとき、媒質の各点に複数の波の変位が同時に伝わるが、それが互いの波の進行を妨げたり他の波に影響を与えることはない。これを'''波の独立性'''という。 これらのことはウェーブマシンという器械で簡単に確かめられる。 ==== 定常波 ==== 速さが同じで逆方向に進む、波長・振幅の等しい正弦波が重なると、合成波はどちらにも進んでいないように見える。このとき、全く振動しない所('''節''')と大きく振動する所('''腹''')が交互に並んで見える。このように、進行しないように見える波を'''定常波'''('''定在波''')という。進行する波は'''進行波'''と呼ぶ。 2つの波の位相を考えることにより、媒質のある点が2つの波の定常波における腹・節のどちらになるのかを判断することができる。 媒質のある点において、2つの波が同位相であれば変位の和がそれぞれの変位の2倍になるので腹である。2つの波が逆位相であれば変位の和は打ち消しあって0になるので節である。 ; '''発展:定常波の式''' 波形が同じで向きが逆である2つの正弦波を以下とする。 :<Math>y_1 = A \sin \{2\pi (\frac{t}{T} - \frac{x}{\lambda}) + \phi_1 \}</Math> :<Math>y_2 = A \sin \{2\pi (\frac{t}{T} + \frac{x}{\lambda}) + \phi_2 \}</Math> このとき、重ね合わせの原理より、定常波の変位は以下のようになる。 :<Math>y = y_1 + y_2</Math> :<Math> = A \sin \{2\pi (\frac{t}{T} - \frac{x}{\lambda}) + \phi \} + A \sin \{2\pi (\frac{t}{T} + \frac{x}{\lambda}) + \phi \}</Math> :<Math> = 2A \cos (2\pi \frac{x}{\lambda} + \frac{\phi_2 - \phi_1}{2}) \sin (2\pi \frac{t}{T} + \frac{\phi_2 + \phi_1}{2})</Math> この式を見ると、sinの中身はtの関数であり、cosの中身はxの関数である。 このことから、位置<Math>x</Math>における定常波の振幅<Math>A(x)</Math>は :<Math>A(x) = 2A | \cos (2\pi \frac{x}{\lambda} + \frac{\phi_2 - \phi_1}{2}) |</Math> と表せる。 この式から、「振幅の最大値は2Aで、最大値を取る位置xが飛び飛びに存在する」ことと、「振幅が0になるxが飛び飛びに存在する」ことがわかる。 <Math>A(x) = 2A</Math>となる位置<Math>x</Math>を考えると、<Math>2\pi \frac{x}{\lambda} + \frac{\phi_2 - \phi_1}{2} = n\pi</Math>を満たす位置<Math>x</Math>が腹である。 同様に<Math>A(x) = 0</Math>となる位置<Math>x</Math>を考えると、<Math>2\pi \frac{x}{\lambda} + \frac{\phi_2 - \phi_1}{2} = (n+\frac{1}{2})\pi</Math>を満たす位置<Math>x</Math>が節である。 また、2つの波の初期位相<Math>\phi_1 , \phi_2</Math>がともに0である場合を考えると、上の式から「腹と節は半波長(<Math>\frac{\lambda}{2}</Math>)ごとに現れる」ことと、「腹と節は四半波長(<Math>\frac{\lambda}{4}</Math>)間隔で交互に現れる」ことがわかる。 ==== 自由端反射・固定端反射 ==== ウェーブマシンの一端から発生させた波を観察すると、波は反対側の端の点に達したのち、その点で折り返して戻ってくる。このような現象を'''反射'''という。反射波を'''入射波'''、反射後の波を'''反射波'''という。 反射する点において、媒質が自由に振動できる端を'''自由端'''、媒質が振動できないよう固定されている端を'''固定端'''という。 自由端では、入射波の山・谷がそのまま反射波の山・谷となる。このような反射を'''自由端反射'''という。 固定端では、[[高等学校物理基礎/力学#運動の第3法則 作用・反作用の法則|作用反作用の法則]]により入射波の山・谷が反転して反射波の谷・山となる。このような反射を'''固定端反射'''という。 単独の波の反射において、自由端反射の場合は入射波を延長した波を自由端を軸に折り返し、固定端反射の場合は入射波を延長した波を上下反転させて固定端を軸に折り返すと反射波が作図できる。また、重ね合わせの原理を用いることで合成波も作図できる。 連続的な正弦波の反射において、反射波も正弦波であるので、入射波と反射波の合成波は定常波となる。自由端の場合、端は定常波の腹となる。固定端の場合、端は定常波の節となる。 === 発展:平面上を伝わる波 === [[高等学校 物理]]で学ぶ内容のうち、第2節「音」を学ぶ上で知っておくべき事項を纏めた。 ==== 波面 ==== 水面上の一点を振動させると、波源を中心に円形の波紋が広がる。このとき、同一円周上の各点は同位相である。このような、位相が等しい点を連ねた面を'''波面'''といい、波面が平面になる波を'''平面波'''、波面が球面になる波を'''球面波'''という。 波面は波の進む向きと常に垂直である。波と垂直に交わる線を'''射線'''という。射線は波の進む向きを表す。 ==== 波の干渉 ==== 水面上の2点を振動させると、これらの点を波源とする波が広がる。このとき、山同士・谷同士が重なる場所は振幅が大きくなり、山と谷が重なる場所は振幅が小さくなる。このように、波が重なって振動を強め合ったり弱め合ったりする現象を'''波の干渉'''という。 振幅<Math>A</Math>で同位相で振動する2つの波源<Math>S_1, S_2</Math>から出る波の波長を<Math>\lambda</Math>とする。波源<Math>S_1, S_2</Math>からの距離をそれぞれ<Math>l_1, l_2</Math>とすると、距離の差は<Math>| l_1 - l_2 |</Math>であるので、非負整数<Math>m</Math>を用いると干渉の条件式は以下のようになる。 :強め合う条件:<Math>| l_1 - l_2 | = m\lambda = 2m \cdot \frac{\lambda}{2}</Math> :弱め合う条件:<Math>| l_1 - l_2 | = (m+\frac{1}{2}) \lambda = (2m+1) \frac{\lambda}{2}</Math> なお、波源<Math>S_1, S_2</Math>が逆位相で振動する場合は、 :強め合う条件:<Math>| l_1 - l_2 | = (m+\frac{1}{2}) \lambda = (2m+1) \frac{\lambda}{2}</Math> :弱め合う条件:<Math>| l_1 - l_2 | = m\lambda = 2m \cdot \frac{\lambda}{2}</Math> と条件式が入れ替わるので注意が必要である。 また、この2式を満たす点を連ねた曲線は、波源<Math>S_1, S_2</Math>を焦点とする[[高等学校数学C/平面上の曲線#双曲線|双曲線]]となる。 ==== 反射・屈折 ==== 媒質の境目を'''境界面'''という。 境界面に垂直な直線('''境界面の法線''')が入射波の進行方向と成す角を'''入射角'''、反射波の進行方向と成す角を'''反射角'''という。 波の反射では、入射角<Math>i</Math>と反射角<Math>j</Math>について以下が成り立つ。 :<Math>i = j</Math> これを'''反射の法則'''という。 波の速さが異なる2つの媒質の境界面に波が斜めに入射する時、波の進行方向が変わる。この現象を'''屈折'''といい、屈折した後の波を'''屈折波'''と呼ぶ。波が屈折する時、反射波も同時に生じている。 境界面の法線が屈折波の進行方向と成す角を'''屈折角'''という。 入射角<Math>i</Math>、反射角<Math>r</Math>、媒質1, 2での波の速さ<Math>v_1, v_2</Math>、波長<Math>\lambda_1, \lambda_2</Math>について、以下が成り立つ。 :<Math>\frac{\sin i}{\sin r} = \frac{v_1}{v_2} = \frac{\lambda_1}{\lambda_2} = n_{12}</Math> これを'''屈折の法則'''という。 <Math>n_{12}</Math>は、媒質1に対する媒質2の'''(相対)屈折率'''である。 ==== 波の回折 ==== 波が障碍物に当たった場合、障碍物の隙間を通ってその背後まで回り込む。 このような現象を'''波の回折'''という。 音や電波が障碍物の陰であっても届くのは、回折によるものである。 回折は、隙間や障碍物の幅に対して波長が小さいとき目立たないが、同程度以上になると目立つようになる。 ==音== === 音の性質 === ==== 音波 ==== 物体が振動すると、その振動は縦波となって空気などの媒質を伝わっていく。このような縦波を'''音'''('''音波''')という。音の波源を'''音源'''('''発音体''')という。 我々は声帯を震えさせて声を出し、鼓膜が振動することで音を聞く。 ==== 音の三要素 ==== 音の波形は'''オシロスコープ'''を用いて観察することができる。 ; '''音の大きさ''' 同じ振動数の音が聞こえている時、振幅が大きくなると音は大きくなる。音の大きさは人間の主観に基づいた量であるのに対し、エネルギーに基づいた物理量を'''音の強さ'''という。音の強さ<Math>I</Math>[dB]は波の強さと同様に求められる。 ; '''音の高さ''' 振動数が大きければ大きいほど高音になる。1オクターブ上の音にするには、振動数を2倍すれば良い。人間が聞くことのできる音の振動数は20~2万Hzの範囲にある。この人間の可聴域よりも高い音を'''超音波'''という。例えば、一般的な犬笛は3万Hzの音を出し、イルカの出す超音波は15万Hzにも達する。逆に、可聴域よりも低い音を'''超低周波音'''と呼ぶ。 ; '''音色''' 身の回りの音の殆どは単純な正弦波ではなく、複雑な波形をしている。この波形の違いが音色の違いを生み、より豊かで深みのある音を作りだしている。 音の大きさ・高さ・音色を'''音の三要素'''と呼ぶ。 ==== 音の速さ ==== 空気中の音速は、温度が高くなるほど大きくなる。 1気圧、<Math>t</Math>[℃]の空気中での音速<Math>V</Math>[m/s]は、 :<Math>V = 331.5 + 0.6t</Math> である。 常温(15℃)での音速は上の式から約340m/sと計算できる。 音は縦波であるため、液体や固体でも伝わる。水中では音速は空気中の4〜5倍であり、固体中は更に速い。真空中では媒質がないので音は伝わらない。 ==== 音の伝わり方 ==== 音波も反射・屈折・回折・干渉など波の諸現象が発生する。 音の反射は山びこなどに見ることができる。イルカやコウモリなどは超音波の反射音で獲物や障碍物までの距離や方向を把握する。音が短時間で繰り返し反射すると、音源が振動をやめた後もしばらく音が残ることがある。これを'''残響'''という。音楽ホールは音が心地よく響くよう、残響を考慮に入れて設計されている。 空気など同じ媒質の中でも、温度の違いなどで部分的に音の速さが異なれば、音は屈折しながら進む。 人間の声は波長が1〜3m程度であり、身の回りの障碍物の大きさと同程度かそれより長いため、回折が起こりやすい。 同じ振動数の音を2つのスピーカーから出すと、音がよく聞こえる場所と聞こえにくい場所ができる。これは、音の干渉によって空気の振動を強め合う場所と弱め合う場所ができるからである。 ==== 唸り ==== 振動数が僅かに異なる2つの音叉を同時に鳴らすと、音の大小が周期的に繰り返されて聞こえる。このような現象を'''唸り'''という。唸りは、2つの音波の重なり合いで生じる。 2つの音波の振動数を<Math>f_1, f_2</Math>とすると、唸りの回数<Math>f</Math>は :<Math>f = |f_1 -f_2|</Math> と表せる。 2つの音波の振動数が接近している場合にのみ唸りは聞こえる。 また、低音になればなるほど唸りは起こりにくい。 === 共振・共鳴 === === 発展:ドップラー効果 === [[category:物理基礎|はとう]] d6ez5sgigckdges7g2jwpg79ad73jgw ガリア戦記 第5巻/注解 0 38256 246701 246524 2024-04-14T11:55:41Z Linguae 449 /* 各節注解 */ wikitext text/x-wiki <div style="font-family:Arial Black;font-style:normal;font-size:15pt;color:#990033;text-align:center;background-color:#fff0ff;">C &middot; IVLII &middot; CAESARIS &middot; COMMENTARIORVM &middot; BELLI &middot; GALLICI</div> <div style="font-family:Arial Black;font-style:normal;font-size:30pt;color:#990033;text-align:center;background-color:#fff0ff;">LIBER &middot; QVINTVS</div> <span style="font-size:13pt;">『<span style="background-color:#ffc;">[[ガリア戦記 第5巻]]</span>』の単語や構文を詳しく読み解く <span style="background-color:#fc8;font-size:15pt;">'''[[ガリア戦記/注解編|注解編]]'''</span> の目次。</span> {| id="toc" style="border:0px #ddf; align:left;clear:all;" align="center" cellpadding="5" |- ! style="background:#ccf; text-align:center;" colspan="10"| ガリア戦記 第5巻 注解 |- style="background:#f8f8ff; text-align:right; font-size: 0.85em;" |[[/1節|1節]] |[[/2節|2節]] |[[/3節|3節]] |[[/4節|4節]] |[[/5節|5節]] |[[/6節|6節]] |[[/7節|7節]] |[[/8節|8節]] |[[/9節|9節]] |[[/10節|10節]] |- style="background:#f8f8ff; text-align:right; font-size: 0.85em;" |[[/11節|11節]] |[[/12節|12節]] |[[/13節|13節]] |[[/14節|14節]] |[[/15節|15節]] |[[/16節|16節]] |[[/17節|17節]] |[[/18節|18節]] |[[/19節|19節]] |[[/20節|20節]] |- style="background:#f8f8ff; text-align:right; font-size: 0.85em;" |[[/21節|21節]] |[[/22節|22節]] |[[/23節|23節]] |[[/24節|24節]] |[[/25節|25節]] |[[/26節|26節]] |[[/27節|27節]] |[[/28節|28節]] |[[/29節|29節]] |[[/30節|30節]] |- style="background:#f8f8ff; text-align:right; font-size: 0.85em;" |[[/31節|31節]] |[[/32節|32節]] |[[/33節|33節]] |[[/34節|34節]] |[[/35節|35節]] |[[/36節|36節]] |[[/37節|37節]] |[[/38節|38節]] |[[/39節|39節]] |[[/40節|40節]] |- style="background:#f8f8ff; text-align:right; font-size: 0.85em;" |[[/41節|41節]] |[[/42節|42節]] |[[/43節|43節]] |[[/44節|44節]] |[[/45節|45節]] |[[/46節|46節]] |[[/47節|47節]] |[[/48節|48節]] |[[/49節|49節]] |[[/50節|50節]]<!-- |- style="background:#f8f8ff; text-align:right; font-size: 0.85em;" |[[/51節|51節]] |[[/52節|52節]] |[[/53節|53節]] |[[/54節|54節]] |[[/55節|55節]] |[[/56節|56節]] |[[/57節|57節]] |[[/58節|58節]] | colspan="6" | |- style="background:#f8f8ff; text-align:right; font-size: 0.85em;" |[[/1節|1節]] |[[/2節|2節]] |[[/3節|3節]] |[[/4節|4節]] |[[/5節|5節]] |[[/6節|6節]] |[[/7節|7節]] |[[/8節|8節]] |[[/9節|9節]] |[[/0節|0節]] --> |- | style="background:#f5fefe; text-align:left; font-size: 0.8em;" colspan="10"| [[ガリア戦記 第1巻/注解|'''注解'''&nbsp; 第1巻]] | [[ガリア戦記 第2巻/注解|第2巻]] | [[ガリア戦記 第3巻/注解|第3巻]] | [[ガリア戦記 第4巻/注解|第4巻]] | [[ガリア戦記 第5巻/注解|第5巻]] <!-- | [[ガリア戦記 第6巻/注解|第6巻]] | [[ガリア戦記 第7巻/注解|第7巻]] | [[ガリア戦記 第8巻/注解|第8巻]]--> |} <br style="clear:both;" /> __notoc__ == 各節注解 == [[画像:Gaule -54.png|thumb|right|150px|ガリア戦記 第5巻の情勢図(BC54年)。<br>黄色の領域がローマ領。桃色が同盟部族領。]] ===ブリタンニア再遠征の準備=== *<span style="background-color:#fff;">[[/1節]] {{進捗|25%|2023-09-03}}</span> (187語) *<span style="background-color:#fff;">[[/2節]] {{進捗|25%|2023-08-27}}</span> (119語) *<span style="background-color:#fff;">[[/3節]] {{進捗|25%|2023-09-07}}</span> (186語) *<span style="background-color:#fff;">[[/4節]] {{進捗|25%|2023-09-11}}</span> (117語) *<span style="background-color:#fff;">[[/5節]] {{進捗|25%|2023-09-14}}</span> (76語)   短い節 *<span style="background-color:#fff;">[[/6節]] {{進捗|25%|2023-09-24}}</span> (163語) *<span style="background-color:#fff;">[[/7節]] {{進捗|25%|2023-10-01}}</span> (167語) ===第二次ブリタンニア遠征=== [[画像:Campagne Bretagne -54.png|thumb|right|250px|カエサルの第二次ブリタンニア遠征の経路]] *<span style="background-color:#fff;">[[/8節]] {{進捗|25%|2023-10-05}}</span> (167語) *<span style="background-color:#fff;">[[/9節]] {{進捗|25%|2023-10-16}}</span> (168語) *<span style="background-color:#fff;">[[/10節]] {{進捗|25%|2023-11-05}}</span> (69語)   短い節 *<span style="background-color:#fff;">[[/11節]] {{進捗|25%|2023-12-31}}</span> (171語) *<span style="background-color:#fff;">[[/12節]] {{進捗|25%|2023-11-05}}</span> (128語) *<span style="background-color:#fff;">[[/13節]] {{進捗|25%|2023-11-20}}</span> (158語) *<span style="background-color:#fff;">[[/14節]] {{進捗|25%|2023-12-28}}</span> (93語)   短い節 *<span style="background-color:#fff;">[[/15節]] {{進捗|25%|2023-11-19}}</span> (109語) *<span style="background-color:#fff;">[[/16節]] {{進捗|25%|2023-11-19}}</span> (101語) *<span style="background-color:#fff;">[[/17節]] {{進捗|25%|2023-12-28}}</span> (108語) *<span style="background-color:#fff;">[[/18節]] {{進捗|25%|2023-12-28}}</span> (94語)   短い節 *<span style="background-color:#fff;">[[/19節]] {{進捗|25%|2023-12-28}}</span> (106語) *<span style="background-color:#fff;">[[/20節]] {{進捗|25%|2024-01-01}}</span> (81語)   短い節   *<span style="background-color:#fff;">[[/21節]] {{進捗|25%|2024-01-04}}</span> (101語) *<span style="background-color:#fff;">[[/22節]] {{進捗|25%|2024-01-04}}</span> (124語) *<span style="background-color:#fff;">[[/23節]] {{進捗|25%|2024-01-08}}</span> (116語) ===アンビオリークスとエブローネース族の蜂起=== [[画像:Campagne Ambiorix_-54.png|thumb|right|250px|アンビオリークスがローマ軍に勝利した[[w:アドゥアトゥカの戦い|アドゥアトゥカの戦い]]直後の情勢図]] *<span style="background-color:#fff;">[[/24節]] {{進捗|25%|2024-01-15}}</span> (165語) *<span style="background-color:#fff;">[[/25節]] {{進捗|25%|2024-01-25}}</span> (108語) *<span style="background-color:#fff;">[[/26節]] {{進捗|25%|2024-02-21}}</span> (98語)   短い節 *<span style="background-color:#fff;">[[/27節]] {{進捗|25%|2024-02-22}}</span> (281語)   かなり長い節 *<span style="background-color:#fff;">[[/28節]] {{進捗|25%|2024-02-25}}</span> (121語) *<span style="background-color:#fff;">[[/29節]] {{進捗|25%|2024-02-28}}</span> (150語) *<span style="background-color:#fff;">[[/30節]] {{進捗|25%|2024-02-29}}</span> (78語)   短い節 *<span style="background-color:#fff;">[[/31節]] {{進捗|25%|2024-03-03}}</span> (114語) *<span style="background-color:#fff;">[[/32節]] {{進捗|25%|2024-03-03}}</span> (60語)   短い節 *<span style="background-color:#fff;">[[/33節]] {{進捗|25%|2024-03-11}}</span> (159語) *<span style="background-color:#fff;">[[/34節]] {{進捗|25%|2024-03-18}}</span> (102語) *<span style="background-color:#fff;">[[/35節]] {{進捗|25%|2024-02-28}}</span> (138語) *<span style="background-color:#fff;">[[/36節]] {{進捗|25%|2024-04-04}}</span> (89語)   短い節 *<span style="background-color:#fff;">[[/37節]] {{進捗|25%|2024-04-04}}</span> (136語) ===ネルウィイー族らベルガエ人同盟の蜂起=== *<span style="background-color:#fff;">[[/38節]] {{進捗|25%|2024-04-14}}</span> (79語)   短い節 *<span style="background-color:#fff;">[[/39節]] {{進捗|00%|2024-04-04}}</span> (101語) *<span style="background-color:#fff;">[[/40節]] {{進捗|00%|2024-04-10}}</span> (120語) *<span style="background-color:#fff;">[[/41節]] {{進捗|00%|2024-04-10}}</span>  <!--52節まで--> ===インドゥーティオマールスとトレーウェリー族の蜂起=== <!--53節から--> == 関連項目 == *<span style="background-color:#ffd;">[[ガリア戦記]]</span><!--【2006年4月23日起稿】--> **<span style="background-color:#ffd;">[[ガリア戦記/注解編]]</span><!--(2020-03-27)--> ***<span style="background-color:#ffd;">[[ガリア戦記/注解編/写本と校訂版]] {{進捗|00%|2020-04-17}}</span><!--(2020-04-17)--> **<span style="background-color:#ffd;">[[ガリア戦記/用例集]]          {{進捗|00%|2020-03-29}}</span><!--(2020-03-29)--> **[[ガリア戦記/内容目次]]:巻・章・節の内容を記した目次 {{進捗|75%|2011-04-02}} **[[ガリア戦記/参照画像一覧]]:本文で参照した画像一覧  {{進捗|75%|2011-04-16}} <br><div style="font-size:20pt;"> Ā Ē Ī Ō Ū ā ē ī ō ū &nbsp; Ă Ĕ Ĭ Ŏ Ŭ ă ĕ ĭ ŏ ŭ </div> <div style="font-size:13pt;"> <math>\overline{\mbox{VIIII}} </math> </div><!-- [[w:Help:数式の表示]] --> <span style="font-family:Times New Roman;font-size:15pt;background-color:#fff;"></span> <span style="font-family:Times New Roman;font-size:15pt;"></span> <span style="font-family:Times New Roman;"></span> <!-- *<span style="font-family:Times New Roman;font-style:normal;font-size:15pt;">† : </span>校訂者が、テクストが壊れていると判断した部分をこの記号で囲んでいる。 --> <!-- <ruby><rb>●漢字●</rb><rp>(</rp><rt>●ルビ●</rt><rp>)</rp></ruby> --> <!-- *<span style="background-color:#ffd;">[[/注解/1節]] {{進捗|00%|2024-04-10}}</span> --> <!-- <span style="color:#009900;"></span> **:<span style="color:#009900;">(訳注: **:<span style="color:#009900;font-family:Times New Roman;">(訳注: --> == 関連記事 == {{Wikisource|la:Commentarii de bello Gallico/Liber V|ガリア戦記 第5巻(ラテン語)}} *ウィキソース **<span style="font-family:Times New Roman;">[[s:la:Commentarii de bello Gallico/Liber V]] (第5巻 ラテン語)</span> **<span style="font-family:Times New Roman;">[[s:en:Commentaries on the Gallic War/Book 5]] (第5巻 英訳)</span> **<span style="font-family:Times New Roman;">[[s:fr:La Guerre des Gaules/Livre V]] (第5巻 仏訳)</span> ---- {{Commons|Category:Battles of Caesar's Gallic Wars|Battles of Caesar's Gallic Warsのカテゴリ}} *<span style="font-family:Times New Roman;font-size:13pt;">[[wikt:fr:Catégorie:Mots en latin issus d’un mot en gaulois]]</span> ---- ;第5巻の登場人物 *[[wikt:en:Commius|Commius]] **[[w:コンミウス]] **[[w:la:Commius]] **[[w:en:Commius]] **[[w:fr:Commios]] *[[wikt:en:Sabinus#Proper_noun|Sabīnus]] **[[w:クィントゥス・ティトゥリウス・サビヌス|クイーントゥス・ティトゥーリウス・サビーヌス]] **[[w:en:Quintus Titurius Sabinus]] **[[w:fr:Quintus Titurius Sabinus]] *[[wikt:en:Cotta#Latin|Cotta]] **ルーキウス・アウルンクレーイウス・コッタ **[[w:la:Lucius Aurunculeius Cotta]] **[[w:en:Lucius Aurunculeius Cotta]] **[[w:fr:Lucius Aurunculeius Cotta]] <!-- *? **Crassus ***[[w:プブリウス・リキニウス・クラッスス]] ***[[w:la:Publius Licinius Crassus]] ***[[w:en:Publius Licinius Crassus (son of triumvir)]] ***[[w:fr:Publius Crassus]] **Labienus (副官) ***[[w:ティトゥス・ラビエヌス]] ***[[w:la:Titus Labienus]] ***[[w:en:Titus Labienus]] ***[[w:fr:Titus Labienus]] **Sabinus (副官) ***[[w:クィントゥス・ティトゥリウス・サビヌス]] ***[[w:en:Quintus Titurius Sabinus]] ***[[w:fr:Quintus Titurius Sabinus]] **Brutus ***[[w:デキムス・ユニウス・ブルトゥス・アルビヌス]] ***[[w:la:Decimus Iunius Brutus Albinus]] ***[[w:en:Decimus Junius Brutus Albinus]] ***[[w:fr:Decimus Junius Brutus Albinus]] --> <br> ===ブリタンニア侵攻の関連記事=== <!--【第5巻の関連記事】--> {{Commons|Category:Roman Britain|Roman Britainのカテゴリ}} <div style="font-family:Times New Roman;font-size:13pt;"> *[[w:en:Category:Julius Caesar's invasions of Britain]] **[[w:en:Julius Caesar's invasions of Britain|Julius Caesar's invasions of Britain]] **[[w:en:Category:Individuals involved in Julius Caesar's invasions of Britain|Category:Individuals involved in Julius Caesar's invasions of Britain]] ***[[w:en:Category:Briton kings involved in Julius Caesar's invasions of Britain|Category:Briton kings]] ***[[w:en:Category:Ancient Romans involved in Julius Caesar's invasions of Britain|Category:Ancient Romans]] ***[[w:en:Commius|Commius]] **[[w:en:Category:Roman legions involved in Julius Caesar's invasions of Britain|Category:Roman legions]] **[[w:en:Category:Tribes involved in Julius Caesar's invasions of Britain|Category:Tribes]] <!-- *[[c:Category:Armorica]] **[[c:Category:Maps of the Antiquity of Bretagne]] --> <hr> *[[c:Category:Ancient Roman ships]] <br> </span> <span style="font-family:Times New Roman;font-size:13pt;"></span> == 外部リンク == *[[ガリア戦記/注解編#外部リンク]] を参照。 *[[ガリア戦記/注解編/写本と校訂版#オンライン注釈書等]] 等を参照。 ===オンライン注釈書=== <div style="background-color:#eeeeee;"> ====Caesar's Gallic war : notes by F. W. Kelsey (1897)==== :C. Iuli Caesaris De bello gallico libri VII : ::Caesar's Gallic war : with an introduction, notes, and vocabulary ::: by [[w:en:Francis Kelsey|Francis Willey Kelsey (1858-1927)]], Fifteenth Edition (1897) :::: (HathiTrust Digital Library [[w:ハーティトラスト|ハーティトラスト・デジタルライブラリ]]で電子化) :: [https://babel.hathitrust.org/cgi/pt?id=hvd.hn1tp9&seq=19 Contents] (#19) ;:─TEXT─ :: '''Book 5''' : [https://babel.hathitrust.org/cgi/pt?id=hvd.hn1tp9&seq=186 Commentarius Quintus] &nbsp; (#186) ;:─NOTES─ :: '''Book 5''' # [https://babel.hathitrust.org/cgi/pt?id=hvd.hn1tp9&seq=416 I.] (#416), [https://babel.hathitrust.org/cgi/pt?id=hvd.hn1tp9&seq=417 II.] (#417), ・・・ # [https://babel.hathitrust.org/cgi/pt?id=hvd.hn1tp9&seq=420 IX., X.] (#420), [https://babel.hathitrust.org/cgi/pt?id=hvd.hn1tp9&seq=421 XI.,-XII.] (#421), [https://babel.hathitrust.org/cgi/pt?id=hvd.hn1tp9&seq=422 XIII.] (#422), [https://babel.hathitrust.org/cgi/pt?id=hvd.hn1tp9&seq=423 XIV.] (#423), [https://babel.hathitrust.org/cgi/pt?id=hvd.hn1tp9&seq=424 XV.-XVII.] (#424), [https://babel.hathitrust.org/cgi/pt?id=hvd.hn1tp9&seq=425 XVIII.-XX.] (#425), # [https://babel.hathitrust.org/cgi/pt?id=hvd.hn1tp9&seq=426 XXI.-XXII.] (#426), [https://babel.hathitrust.org/cgi/pt?id=hvd.hn1tp9&seq=427 XXIII.-XXV.] (#427), [https://babel.hathitrust.org/cgi/pt?id=hvd.hn1tp9&seq=428 XXVI.-XXVIII.] (#428), [https://babel.hathitrust.org/cgi/pt?id=hvd.hn1tp9&seq=429 XXIX.-XXXI.] (#429), # [https://babel.hathitrust.org/cgi/pt?id=hvd.hn1tp9&seq=429 XXIX.-XXXI.] (#429), [https://babel.hathitrust.org/cgi/pt?id=hvd.hn1tp9&seq=430 XXXII.-XXXIV.] (#430), [https://babel.hathitrust.org/cgi/pt?id=hvd.hn1tp9&seq=431 XXXV.-XXXVII.] (#431), [https://babel.hathitrust.org/cgi/pt?id=hvd.hn1tp9&seq=432 XXXVIII.-XL.] (#432), # [https://babel.hathitrust.org/cgi/pt?id=hvd.hn1tp9&seq=433 XLI.-XLII.] (#433), [https://babel.hathitrust.org/cgi/pt?id=hvd.hn1tp9&seq=434 XLIII.-XLIV.] (#434), [https://babel.hathitrust.org/cgi/pt?id=hvd.hn1tp9&seq=435 XLV.-XLVII.]] (#435), ・・・ </div> ====English translation by W. A. McDevitte & W. S. Bohn (1869)==== # [http://www.forumromanum.org/literature/caesar/gallic.html (www.forumromanum.org)] # (www.perseus.tufts.edu) ## [https://www.perseus.tufts.edu/hopper/text?doc=Caes.+Gal.+5.1 C. Julius Caesar, Gallic War, Book 5, chapter 1] ## [https://www.perseus.tufts.edu/hopper/text?doc=Caes.+Gal.+5.2 C. Julius Caesar, Gallic War, Book 5, chapter 2] ## [https://www.perseus.tufts.edu/hopper/text?doc=Caes.+Gal.+5.3 C. Julius Caesar, Gallic War, Book 5, chapter 3] ## [https://www.perseus.tufts.edu/hopper/text?doc=Caes.+Gal.+5.4 C. Julius Caesar, Gallic War, Book 5, chapter 4] ## [https://www.perseus.tufts.edu/hopper/text?doc=Caes.+Gal.+5.5 C. Julius Caesar, Gallic War, Book 5, chapter 5] ## [https://www.perseus.tufts.edu/hopper/text?doc=Caes.+Gal.+5.6 C. Julius Caesar, Gallic War, Book 5, chapter 6] ## [https://www.perseus.tufts.edu/hopper/text?doc=Caes.+Gal.+5.7 C. Julius Caesar, Gallic War, Book 5, chapter 7] ## [https://www.perseus.tufts.edu/hopper/text?doc=Caes.+Gal.+5.8 C. Julius Caesar, Gallic War, Book 5, chapter 8] ## [https://www.perseus.tufts.edu/hopper/text?doc=Caes.+Gal.+5.9 C. Julius Caesar, Gallic War, Book 5, chapter 9] ## [https://www.perseus.tufts.edu/hopper/text?doc=Caes.+Gal.+5.10 C. Julius Caesar, Gallic War, Book 5, chapter 10] ## [https://www.perseus.tufts.edu/hopper/text?doc=Caes.+Gal.+5.11 C. Julius Caesar, Gallic War, Book 5, chapter 11] ## [https://www.perseus.tufts.edu/hopper/text?doc=Caes.+Gal.+5.12 C. Julius Caesar, Gallic War, Book 5, chapter 12] ## [https://www.perseus.tufts.edu/hopper/text?doc=Caes.+Gal.+5.13 C. Julius Caesar, Gallic War, Book 5, chapter 13] ## [https://www.perseus.tufts.edu/hopper/text?doc=Caes.+Gal.+5.14 C. Julius Caesar, Gallic War, Book 5, chapter 14] ## [https://www.perseus.tufts.edu/hopper/text?doc=Caes.+Gal.+5.15 C. Julius Caesar, Gallic War, Book 5, chapter 15] ## [https://www.perseus.tufts.edu/hopper/text?doc=Caes.+Gal.+5.16 C. Julius Caesar, Gallic War, Book 5, chapter 16] ## [https://www.perseus.tufts.edu/hopper/text?doc=Caes.+Gal.+5.17 C. Julius Caesar, Gallic War, Book 5, chapter 17] ## [https://www.perseus.tufts.edu/hopper/text?doc=Caes.+Gal.+5.18 C. Julius Caesar, Gallic War, Book 5, chapter 18] ## [https://www.perseus.tufts.edu/hopper/text?doc=Caes.+Gal.+5.19 C. Julius Caesar, Gallic War, Book 5, chapter 19] ## [https://www.perseus.tufts.edu/hopper/text?doc=Caes.+Gal.+5.20 C. Julius Caesar, Gallic War, Book 5, chapter 20] ## [https://www.perseus.tufts.edu/hopper/text?doc=Caes.+Gal.+5.21 C. Julius Caesar, Gallic War, Book 5, chapter 21] ## [https://www.perseus.tufts.edu/hopper/text?doc=Caes.+Gal.+5.22 C. Julius Caesar, Gallic War, Book 5, chapter 22] ## [https://www.perseus.tufts.edu/hopper/text?doc=Caes.+Gal.+5.23 C. Julius Caesar, Gallic War, Book 5, chapter 23] ## [https://www.perseus.tufts.edu/hopper/text?doc=Caes.+Gal.+5.24 C. Julius Caesar, Gallic War, Book 5, chapter 24] ## [https://www.perseus.tufts.edu/hopper/text?doc=Caes.+Gal.+5.25 C. Julius Caesar, Gallic War, Book 5, chapter 25] ## [https://www.perseus.tufts.edu/hopper/text?doc=Caes.+Gal.+5.26 C. Julius Caesar, Gallic War, Book 5, chapter 26] ## [https://www.perseus.tufts.edu/hopper/text?doc=Caes.+Gal.+5.27 C. Julius Caesar, Gallic War, Book 5, chapter 27] ## [https://www.perseus.tufts.edu/hopper/text?doc=Caes.+Gal.+5.28 C. Julius Caesar, Gallic War, Book 5, chapter 28] ## [https://www.perseus.tufts.edu/hopper/text?doc=Caes.+Gal.+5.29 C. Julius Caesar, Gallic War, Book 5, chapter 29] ## [https://www.perseus.tufts.edu/hopper/text?doc=Caes.+Gal.+5.30 C. Julius Caesar, Gallic War, Book 5, chapter 30] ## [https://www.perseus.tufts.edu/hopper/text?doc=Caes.+Gal.+5.31 C. Julius Caesar, Gallic War, Book 5, chapter 31] ## [https://www.perseus.tufts.edu/hopper/text?doc=Caes.+Gal.+5.32 C. Julius Caesar, Gallic War, Book 5, chapter 32] ## [https://www.perseus.tufts.edu/hopper/text?doc=Caes.+Gal.+5.33 C. Julius Caesar, Gallic War, Book 5, chapter 33] ## [https://www.perseus.tufts.edu/hopper/text?doc=Caes.+Gal.+5.34 C. Julius Caesar, Gallic War, Book 5, chapter 34] ## [https://www.perseus.tufts.edu/hopper/text?doc=Caes.+Gal.+5.35 C. Julius Caesar, Gallic War, Book 5, chapter 35] ## [https://www.perseus.tufts.edu/hopper/text?doc=Caes.+Gal.+5.36 C. Julius Caesar, Gallic War, Book 5, chapter 36] ## [https://www.perseus.tufts.edu/hopper/text?doc=Caes.+Gal.+5.37 C. Julius Caesar, Gallic War, Book 5, chapter 37] ## [https://www.perseus.tufts.edu/hopper/text?doc=Caes.+Gal.+5.38 C. Julius Caesar, Gallic War, Book 5, chapter 38] ## [https://www.perseus.tufts.edu/hopper/text?doc=Caes.+Gal.+5.39 C. Julius Caesar, Gallic War, Book 5, chapter 39] <!-- ====Eastman, Frederick Carlos., D'Ooge, Benjamin L. 1860-1940.(1917)==== <span style="font-family:Times New Roman;font-style:normal;font-size:13pt;"> *[https://catalog.hathitrust.org/Record/001058370 Catalog Record: Caesar in Gaul and selections from the third... | HathiTrust Digital Library] (catalog.hathitrust.org) :[https://babel.hathitrust.org/cgi/pt?id=hvd.hn5cnb&view=1up&seq=7&skin=2021 #7 - Caesar in Gaul and selections from the third book of the Civil ... - Full View | HathiTrust Digital Library] (babel.hathitrust.org) :BOOK IV. [https://babel.hathitrust.org/cgi/pt?id=hvd.hn5cnb&view=1up&seq=393&skin=2021 #393 ] :IV.34,-38. [https://babel.hathitrust.org/cgi/pt?id=hvd.hn5cnb&view=1up&seq=403&skin=2021 #403 ] </span> --> ====Harkness, Albert (1889)==== <span style="font-family:Times New Roman;font-style:normal;"><span style="font-size:15pt;">Caesar's Commentaries on the Gallic War,  </span><span style="font-size:13pt;">with notes, dictionary, and a map of Gaul.</span><br>  <span style="font-size:15pt;">   edited by <u>[[w:en:Albert Harkness|Albert Harkness (1822-1907)]]</u> <ref>[http://onlinebooks.library.upenn.edu/webbin/book/lookupname?key=Harkness%2C%20Albert%2C%201822%2D1907 Harkness, Albert, 1822-1907 | The Online Books Page]</ref>, New York, [[w:en:D. Appleton & Company|D. Appleton and Company]], 1889 (Rivised Edition)</span></span> ::Caesar's commentaries on the Gallic war; with notes, dictionary, ... (Full View | HathiTrust Digital Library) ;  BOOK FIFTH :V. 1.-4.  [https://babel.hathitrust.org/cgi/pt?id=hvd.hn3hve&view=1up&seq=354 #354] :V. 8.-11. [https://babel.hathitrust.org/cgi/pt?id=hvd.hn3hve&view=1up&seq=356 #356] :V. 12-14.  [https://babel.hathitrust.org/cgi/pt?id=hvd.hn3hve&view=1up&seq=357 #357] :V. 15.-23. [https://babel.hathitrust.org/cgi/pt?id=hvd.hn3hve&view=1up&seq=358 #358] :V. 24.-37.  [https://babel.hathitrust.org/cgi/pt?id=hvd.hn3hve&view=1up&seq=359 #359] ====Incerti auctoris(編者不詳)==== ; [https://books.google.co.jp/books?id=uLA8AAAAIAAJ&lpg=PA98&dq=Caesar+to+Cicero.+Be+of+good+courage.+Expect+aid&pg=PP1&redir_esc=y#v=onepage&q&f=false Caesar Gallic War V with vocabulary](第5巻)-Google ブックス(プレビュー) ;[https://www.latein.me/ Latein-Wörterbuch - Latein.me] # [https://www.latein.me/text/3/Caesar/37/De+Bello+Gallico+%28V%29/p/0 De Bello Gallico (V) - Caesar - Latein.me] <span style="font-family:Times New Roman;font-style:normal;font-size:13pt;"></span> ;nodictionaries.com <!-- :[https://nodictionaries.com/caesar/de-bello-gallico-1/1 '''Caesar De Bello Gallico 1''' 1 in Latin, with adjustable running vocabulary] :[https://nodictionaries.com/caesar/de-bello-gallico-2/1 '''Caesar De Bello Gallico 2''' 1 in Latin, with adjustable running vocabulary] :[https://nodictionaries.com/caesar/de-bello-gallico-3/1 '''Caesar De Bello Gallico 3''' 1 in Latin, with adjustable running vocabulary] :[https://nodictionaries.com/caesar/de-bello-gallico-4/1 '''Caesar De Bello Gallico 4''' 1 in Latin, with adjustable running vocabulary] --> :[https://nodictionaries.com/caesar/de-bello-gallico-5/1 Caesar De Bello Gallico 5 1 in Latin, with adjustable running vocabulary] ==脚注== <references /> [[Category:ガリア戦記 第5巻|*#]] dun9tgguqr1gi8891j9aybq64lfts3r 利用者:ふゆくれ 2 39177 246662 244174 2024-04-13T13:42:55Z ふゆくれ 81958 wikitext text/x-wiki 2022年度施行新学習指導要領の初年度生です。 主に高等学校教科書のページを編集します。 == 所有教科書 == 高等学校教科書のみ挙げます。 #国語 ##現代の国語 ##言語文化 ##文学国語 ##古典探究(古文編) ##古典探究(漢文編) <!-- 論理国語・国語表現も入手したい --> #数学 ##数学Ⅰ ##数学A ##数学Ⅱ ##数学B ##数学Ⅲ ##数学C #英語 ##英語コミュニケーションⅠ ##英語コミュニケーションⅡ ##英語コミュニケーションⅢ ##論理・表現Ⅰ(2種類) ##論理・表現Ⅱ(2種類) ##論理・表現Ⅲ(2種類) #社会 ##地理総合 ##歴史総合 ##公共 ##日本史探究 ##世界史探究 ##政治・経済 #理科 ##生物基礎 ##化学基礎 ##物理基礎 ##化学 ##物理 <!-- 生物・地学基礎・地学も入手したい --> #副教科 ##保健 ##体育 ##家庭基礎 ##情報Ⅰ <!-- 情報Ⅱも入手したい --> ##音楽Ⅰ ##音楽Ⅱ ##探究 == 関わった記事 == #[[旧課程(-2012年度)高等学校数学C]] #[[旧課程(-2012年度)高等学校数学C/行列]] == 執筆中・執筆予定 == #[[高等学校数学A/数学と人間の活動]] #[[高等学校数学B/数列]] #[[高等学校数学B/数学と社会生活]] #[[高等学校数学C/数学的な表現の工夫]] #[[高等学校物理基礎/波動#音]] #[[高等学校 物理基礎/物理のための数学]] #[[高等学校音楽I]] #[[高等学校音楽II]] #[[高等学校情報I]] #[[高等学校理数数学]] bpyuc16hz795xh2zvliz77qawq5h1oi ガリア戦記 第5巻/注解/38節 0 39370 246700 246232 2024-04-14T11:54:37Z Linguae 449 /* 整形テキスト */ wikitext text/x-wiki <div style="font-family:Arial Black;font-style:normal;font-size:15pt;color:#990033;text-align:center;">C &middot; IVLII &middot; CAESARIS &middot; COMMENTARIORVM &middot; BELLI &middot; GALLICI</div> <div style="font-family:Arial Black;font-style:normal;font-size:30pt;color:#990033;text-align:center;">LIBER &middot; QVINTVS</div> <br> {| id="toc" style="align:center;clear:all;" align="center" cellpadding="5" |- ! style="background:#bbf; text-align:center;" |&nbsp; [[ガリア戦記/注解編|ガリア戦記 注解編]] &nbsp; | style="background:#ccf; text-align:center;" |&nbsp; [[ガリア戦記 第5巻/注解|第5巻]] &nbsp; | style="background:#eef; text-align:center;"| &nbsp;[[ガリア戦記 第5巻/注解/37節|37節]] | [[ガリア戦記 第5巻/注解/38節|38節]] | [[ガリア戦記 第5巻/注解/39節|39節]] &nbsp; |} __notoc__ == 原文テキスト == <div style="font-family:Times New Roman;font-style:normal;font-size:15pt;color:#333;text-align:left;"><ref>原文テキストについては[[ガリア戦記/注解編#原文テキスト]]を参照。</ref> 38. &nbsp;&nbsp; <!--❶--><sup>1</sup>Hac victoria sublatus Ambiorix statim cum equitatu in Aduatucos<!--Atuatucos-->, qui erant eius regno finitimi, proficiscitur; &nbsp;<!--●-->&nbsp; neque noctem neque diem intermittit peditatumque sese subsequi iubet. &nbsp;<!--●-->&nbsp; <!--❷--><sup>2</sup>Re demonstrata Aduatucisque<!--Atuatucisque--> concitatis, postero die in Nervios pervenit hortaturque<!--,--> ne sui in perpetuum liberandi atque ulciscendi Romanos pro eis<!--iis--> quas acceperint iniuriis occasionem dimittant: &nbsp;<!--●-->&nbsp; <!--❸--><sup>3</sup>interfectos esse legatos duo<!--duos--> magnamque partem exercitus interisse demonstrat; &nbsp;<!--●-->&nbsp; <!--❹--><sup>4</sup>nihil esse negoti<!--negotii--> subito oppressam legionem<!--,--> quae cum Cicerone hiemet<!--,--> interfici; &nbsp;<!--●-->&nbsp; se ad eam rem profitetur adiutorem. &nbsp;<!--●-->&nbsp; Facile hac oratione Nerviis persuadet. </div> <span style="background-color:#ffc;"></span> ---- ;テキスト引用についての注記 <span style="font-family:Times New Roman;font-style:normal;font-size:15pt;"></span> <span style="font-family:Times New Roman;font-style:oblique;font-size:15pt;"></span> <span style="font-family:Times New Roman;font-style:bold;font-size:15pt;"></span> == 整形テキスト == <div style="font-family:Times New Roman;font-style:normal;font-size:15pt;color:#333;text-align:left;"><ref>整形テキストについては[[ガリア戦記/注解編#凡例]]を参照。</ref> XXXVIII. &nbsp;&nbsp; <!--❶--><sup>①</sup>Hāc victōriā sublātus<!--,--> Ambiorīx statim cum equitātū in <span style="color:#800;">Atuatucōs</span><!--Aduatucōs-->, quī erant ēius rēgnō fīnitimī, proficīscitur; &nbsp;&nbsp;<!--●-->&nbsp;&nbsp; neque noctem neque diem intermittit peditātumque sēsē subsequī iubet. &nbsp;&nbsp;<!--●-->&nbsp;&nbsp; <!--❷--><sup>②</sup>Rē dēmōnstrātā <span style="color:#800;">Atuatucīs</span>que<!--Aduatucīsque--> concitātīs, posterō diē in Nerviōs pervenit hortāturque<!--,--> nē suī in perpetuum līberandī atque ulcīscendī Rōmānōs prō <span style="color:#800;">iīs</span><!--eīs--><!--,--> quās accēperint<!--,--> iniūriīs occāsiōnem dīmittant: &nbsp;<!--●-->&nbsp; <!--❸--><sup>③</sup>interfectōs esse lēgātōs duo<!--duōs--> magnamque partem exercitūs interīsse dēmōnstrat; &nbsp;<!--●-->&nbsp; <!--❹--><sup>④</sup>nihil esse <span style="color:#800;">negōtiī</span><!--negōtī--><!--,--> subitō oppressam legiōnem<!--,--> quae cum Cicerōne hiemet<!--,--> interficī; &nbsp;<!--●-->&nbsp; sē ad eam rem profitētur adiūtōrem. &nbsp;<!--●-->&nbsp; Facile hāc ōrātiōne Nerviīs persuādet. </div> <span style="color:#800;"></span> ---- ;注記 *原文の <span style="font-family:Times New Roman;font-style:normal;font-size:15pt;">[[wikt:en:Aduatucis|Aduatucīs]], [[wikt:en:Aduatucos|Aduatucōs]], [[wikt:en:eis#Latin|eīs]], [[wikt:en:negoti|negōtī]] <!--[[wikt:en:accommodatae|accommodātae]], [[wikt:en:Aduatuci|Aduatucī]], [[wikt:en:Aeduae|Aeduae]], [[wikt:en:Aedui#Latin|Aeduī]], [[wikt:en:Aeduorum|Aeduōrum]], [[wikt:en:Aeduus#Latin|Aeduus]], [[wikt:en:aequinocti|aequinoctī]], [[wikt:en:aggregabat|aggregābat]], [[wikt:en:Alpis#Latin|Alpīs]], [[wikt:en:appelluntur|appelluntur]], [[wikt:en:apportari|apportārī]], [[wikt:en:appropinquabat|appropinquābat]], [[wikt:en:appropinquare#Latin|appropinquāre]], [[wikt:en:appropinquarent|appropinquārent]], [[wikt:en:appropinquaverunt|appropinquāvērunt]] ([[wikt:en:appropinquarunt|appropinquārunt]]), [[wikt:en:appropinquavit|appropinquāvit]], [[wikt:en:appulso#Latin|appulsō]], [[wikt:en:arripere|arripere]], [[wikt:en:ascendissent#Latin|ascendissent]], [[wikt:en:ascensu#Noun|ascēnsū]], [[wikt:en:assuefacti|assuēfactī]], [[wikt:en:auxili#Latin|auxilī]], [[wikt:en:cedentis|cēdentīs]], [[wikt:en:cohortis|cohortīs]], [[wikt:en:coicere|coicere]], [[wikt:en:coicerent|coicerent]], [[wikt:en:coici|coicī]], [[wikt:en:coiciant|coiciant]], [[wikt:en:coiciebant|coiciēbant]], [[wikt:en:coiciunt|coiciunt]], [[wikt:en:coiecerant|coiēcerant]], [[wikt:en:coiecerunt|coiēcērunt]], [[wikt:en:coiecisse|coiēcisse]], [[wikt:en:coiecta|coiecta]], [[wikt:en:collatis|collātīs]], [[wikt:en:collaudatis#Participle|collaudātīs]], [[wikt:en:collis#Latin|collīs]], [[wikt:en:collocabant|collocābant]], [[wikt:en:collocabat|collocābat]], [[wikt:en:collocandis|collocandīs]], [[wikt:en:collocant#Latin|collocant]], [[wikt:en:collocarat|collocārat]], [[wikt:en:collocare#Latin|collocāre]], [[wikt:en:collocaret|collocāret]], [[wikt:en:collocari|collocārī]], [[wikt:en:collocatas|collocātās]], [[wikt:en:collocati#Latin|collocātī]], [[wikt:en:collocatis#Participle|collocātīs]], [[wikt:en:collocavit|collocāvit]], [[wikt:en:collocuti|collocūtī]], [[wikt:en:colloquantur|colloquantur]], [[wikt:en:colloquendi|colloquendī]], [[wikt:en:colloqui#Latin|colloquī]], [[wikt:en:colloquium#Latin|colloquium]], [[wikt:en:compluris|complūrīs]], [[wikt:en:conantis|cōnantīs]], [[wikt:en:consili|cōnsilī]], [[wikt:en:egredientis#Etymology_2|ēgredientīs]], [[wikt:en:ei#Latin|eī]], [[wikt:en:finis#Latin|fīnīs]], [[wikt:en:hostis#Latin|hostīs]], [[wikt:en:imperi#Latin|imperī]], [[wikt:en:incolumis#Latin|incolumīs]], [[wikt:en:irridere#Latin|irrīdēre]], [[wikt:en:irruperunt|irrūpērunt]], [[wikt:en:laborantis#Etymology_2|labōrantīs]], [[wikt:en:montis|montīs]], [[wikt:en:navis#Latin|nāvīs]], nōn nūllae, nōn nūllōs, [[wikt:en:offici#Noun_2|officī]], [[wikt:en:omnis#Latin|omnīs]], [[wikt:en:partis#Latin|partīs]], [[wikt:en:periclum#Latin|perīclum]], plūrīs, [[wikt:en:proeli|proelī]], proficīscentīs, [[wikt:en:resistentis|resistentīs]], [[wikt:en:singularis#Latin|singulārīs]], [[wikt:en:spati#Latin|spatī]], [[wikt:en:subeuntis|subeuntīs]], [[wikt:en:suffossis|suffossīs]], [[wikt:en:sumministrata|sumministrāta]], [[wikt:en:summissis|summissīs]], [[wikt:en:summittebat|summittēbat]], [[wikt:en:summoveri|summovērī]], [[wikt:en:Trinobantes#Latin|Trinobantēs]], trīs, [[wikt:en:utilis#Latin|ūtilīs]], [[wikt:en:vectigalis#Latin|vectīgālīs]] --></span> などは、<br>それぞれ <span style="font-family:Times New Roman;font-style:normal;font-size:15pt;">Atuatucīs, Atuatucōs, [[wikt:en:iis#Latin|iīs]], [[wikt:en:negotii|negōtiī]] <!--[[wikt:en:adcommodatae|adcommodātae]], [[wikt:de:Atuatuci|Atuatucī]], Haeduae, Haeduī, Haeduōrum, Haeduus, [[wikt:en:aequinoctii|aequinoctiī]], [[wikt:en:adgregabat|adgregābat]], [[wikt:en:Alpes#Latin|Alpēs]], [[wikt:en:adpelluntur|adpelluntur]], [[wikt:en:adportari|adportārī]], [[wikt:en:adpropinquabat|adpropinquābat]], [[wikt:en:adpropinquare|adpropinquāre]], [[wikt:en:adpropinquarent|adpropinquārent]], [[wikt:en:adpropinquaverunt|adpropinquāvērunt]] ([[wikt:en:adpropinquarunt|adpropinquārunt]]), [[wikt:en:adpropinquavit|adpropinquāvit]], [[wikt:en:adpulso|adpulsō]], [[wikt:en:adripere|adripere]], [[wikt:en:adscendissent|adscendissent]], [[wikt:en:adscensu#Noun|adscēnsū]], [[wikt:en:adsuefacti|adsuēfactī]], [[wikt:en:auxilii|auxiliī]], [[wikt:en:cedentes#Latin|cēdentēs]], [[wikt:en:cohortes#Latin|cohortēs]], [[wikt:en:conicere|conicere]], [[wikt:en:conicerent|conicerent]], [[wikt:en:conici#Latin|conicī]], [[wikt:en:coniciant|coniciant]], [[wikt:en:coniciebant|coniciēbant]], [[wikt:en:coniciunt|coniciunt]], [[wikt:en:coniecerant|coniēcerant]], [[wikt:en:coniecerunt|coniēcērunt]], [[wikt:en:coniecisse|coniēcisse]], [[wikt:en:coniecta|coniecta]], [[wikt:en:conlatis|conlātīs]], [[wikt:en:conlaudatis#Participle|conlaudātīs]], [[wikt:en:colles#Latin|collēs]], [[wikt:en:conlocabant|conlocābant]], [[wikt:en:conlocabat|conlocābat]], [[wikt:en:conlocandis|conlocandīs]], [[wikt:en:conlocant|conlocant]], [[wikt:en:conlocarat|conlocārat]], [[wikt:en:conlocare|conlocāre]], [[wikt:en:conlocaret|conlocāret]], [[wikt:en:conlocari|conlocārī]], [[wikt:en:conlocatas|conlocātās]], [[wikt:en:conlocati|conlocātī]], [[wikt:en:conlocatis#Participle|conlocātīs]], [[wikt:en:conlocavit|conlocāvit]], [[wikt:en:conlocuti|conlocūtī]], [[wikt:en:conloquantur|conloquantur]], [[wikt:en:conloquendi|conloquendī]], [[wikt:en:conloqui#Latin|conloquī]], [[wikt:en:conloquium#Latin|conloquium]], [[wikt:en:complures#Latin|complūrēs]], [[wikt:en:conantes|cōnantēs]], [[wikt:en:consilii|cōnsiliī]], [[wikt:en:egredientes|ēgredientēs]], [[wikt:en:ii#Latin|iī]], [[wikt:en:fines#Latin|fīnēs]], [[wikt:en:hostes#Latin|hostēs]], [[wikt:en:imperii#Latin|imperiī]], [[wikt:en:incolumes|incolumēs]], [[wikt:en:inridere|inrīdēre]], [[wikt:en:inruperunt|inrūpērunt]], [[wikt:en:laborantes#Latin|labōrantēs]], [[wikt:en:montes#Latin|montēs]], [[wikt:en:naves#Latin|nāvēs]], [[wikt:en:nonnullae|nōnnūllae]], [[wikt:en:nonnullos|nōnnūllōs]], [[wikt:en:officii#Latin|officiī]], [[wikt:en:omnes#Latin|omnēs]], [[wikt:en:partes#Latin|partēs]], [[wikt:en:periculum#Latin|perīculum]], [[wikt:en:plures|plūrēs]], [[wikt:en:proelii|proeliī]], [[wikt:en:proficiscentes|proficīscentēs]], [[wikt:en:resistentes#Latin|resistentēs]], [[wikt:en:singulares#Latin|singulārēs]], [[wikt:en:spatii#Latin|spatiī]], [[wikt:en:subeuntes|subeuntēs]], [[wikt:en:subfossis|subfossīs]], [[wikt:en:subministrata|subministrāta]], [[wikt:en:submissis|submissīs]], [[wikt:en:submittebat|submittēbat]], [[wikt:en:submoveri|submovērī]], [[wikt:en:Trinovantes#Latin|Trinovantēs]], [[wikt:en:tres#Latin|trēs]], [[wikt:en:utiles#Latin|ūtilēs]], [[wikt:en:vectigales|vectīgālēs]] --></span> などとした。 <span style="font-family:Times New Roman;font-style:normal;font-size:15pt;"></span> <span style="font-family:Times New Roman;font-style:oblique;font-size:15pt;"></span> <span style="color:#b00;"></span> <span style="color:#800;"></span> <span style="font-size:10pt;"></span> <span style="background-color:#ff0;"></span> == 注解 == === 1項 === <span style="font-family:Times New Roman;font-size:20pt;"></span> ;語釈 <span style="font-family:Times New Roman;font-size:15pt;background-color:#fff;"></span> <span style="font-family:Times New Roman;font-size:15pt;"></span> <span style="font-family:Times New Roman;font-size:15pt;"></span> <span style="background-color:#ccffcc;"></span> <!-- ;対訳 《 》 内は、訳者が説明のために補った語。<span style="font-family:Times New Roman;font-size:30pt;">{</span> <span style="font-family:Times New Roman;font-size:30pt;">}</span> 内は関係文。 <span style="font-family:Times New Roman;font-size:15pt;"></span> --> == 訳文 == *<span style="background-color:#dff;">訳文は、[[ガリア戦記_第5巻#38節]]</span> == 脚注 == {{Reflist}} == 解説 == <!-- {| class="wikitable" style="text-align:center" |- style="height:23em;" | | |} --> == 関連項目 == *[[ガリア戦記]] **[[ガリア戦記/注解編]] ***[[ガリア戦記 第5巻/注解]] **[[ガリア戦記/用例集]] == 関連記事 == == 外部リンク == *[https://babel.hathitrust.org/cgi/pt?id=hvd.hn1tp9&seq=206 #206 - C. Iuli Caesaris De bello gallico libri VII : Caesar's Gallic ... - Full View | HathiTrust Digital Library] *[https://dcc.dickinson.edu/caesar/book-5/chapter-5-38 Chapter 5.38 | Dickinson College Commentaries] [[Category:ガリア戦記 第5巻|38節]] 1iovyuoihbf6znxwpq0hc9x8ondsgo3 Forth 0 39400 246668 246643 2024-04-14T00:24:29Z Ef3 694 /*CREATE*/ Forthの CREATE は、新しい変数や配列をディクショナリに定義するためのワードです。CREATE を使うことで、任意の名前で参照可能なデータ領域を確保し、その領域に対する操作を定義することができます。 wikitext text/x-wiki == はじめに == Forthはスタック指向のプログラミング言語であり、そのシンプルさと柔軟性から広く用いられています。 本書は、プログラマがForthを効果的に使いこなすための手引書として設計されています。例示や実践的なヒントが豊富に盛り込まれており、読者は理論を理解しながら実際のプロジェクトに応用できるでしょう。 本書を通じて、Forthの魅力と実力を十分に体感し、その利用価値を最大限に引き出すことができるでしょう。 本書では、ForthのCore Word Setに準拠した標準的なForthシステムを題材とします。 == Forthプログラミングの基礎 == Forthはスタック指向のプログラミング言語であり、独自の特徴を持っています。以下では、Forthプログラミングの基礎を解説します。 === スタック操作 === [[スタック構造|スタック]]は、Forthにおける中心的なデータ構造です。ほとんどのワードは、スタックから値を取り出したり、スタックに値を代入したりします。スタックは、後入れ先出し(LIFO; Last In First Out)のデータ構造で、Forthの演算はスタック上で行われます。 === 例 === 以下は、Forthでの簡単な計算の例です: :<syntaxhighlight lang=forth> 3 4 + . </syntaxhighlight> : まず<code>3</code>をスタックに置き、<code>4 + .</code> を解釈します。 : 次に、<code>4</code>をスタックに置き、<code>3 4</code> となり、<code>+ .</code> が残ります。 : そして、<code>+</code> はスタックのトップの2つの要素を加算して結果を戻し、スタックには<code>7</code>だけが残ります。 : 最後に、<code>.</code>(ドット)はスタックから<code>7</code>を取り除いてそれを表示します。 :{| |- !コード!!style='width:3em'| 3 !!style='width:3em'| 4 !!style='width:3em'| + !!style='width:3em'| . |- !スタックトップ |style="border:1px solid black; text-align:center"| 3 ||style="border:1px solid black; text-align:center"| 4 ||style="border:1px solid black; text-align:center"| 7 || |- ! | ||style="border:1px solid black; text-align:center"| 3 || || |- !出力 | || || ||style="text-align:center; font-weight: bold"| 7 |} === コメント === Forthでは、コメントは括弧で囲んで表現されます。例えば: :<syntaxhighlight lang=forth> ( これはコメントです ) </syntaxhighlight> <code>/</code> から行末までもコメントです :<syntaxhighlight lang=forth> 3 4 + \ 3 + 4 の結果をスタックトップに残す </syntaxhighlight> コメントは、インタプリタの動作に影響を与えません。 === スタックエフェクト === Forthの各ワードは、スタック上で特定の操作を行います。ワードのドキュメントでは、それがスタックに対してどのような影響を与えるかを示す記述があります。例えば: :<syntaxhighlight lang=forth> + ( a b -- c ) </syntaxhighlight> この記述は、<code>+</code>ワードが2つの引数(<code>a</code>と<code>b</code>)を消費し、1つの結果(<code>c</code>)をスタックに残すことを意味します。 === Forthのワードとは?その定義と使用について === Forthにおける「ワード」とは、基本的には単語や言葉を意味しますが、Forthプログラミングでは、より具体的には次の2つの意味を持ちます。 # 定義済みの単語 #: ワードは、Forthの語彙において定義された単語や操作を指します。Forthでは、これらのワードはスタック操作や制御構造、算術演算などの基本的な機能を表します。例えば、<code>+</code>は2つの数値を取り出して足し合わせ、結果をスタックに戻すワードです。 # 新しい単語の定義 #: ワードは、Forthプログラム内で新しい単語を定義するための仕組みとしても使われます。これは、既存のワードを組み合わせて、新しい機能を持つ単語を定義することを意味します。例えば、<code>DOUBLE</code>というワードを定義して、与えられた数値を2倍にするような操作を定義することができます。 ワードの定義は、通常、次のような形式で行われます: :<syntaxhighlight lang=forth> : ワード名 ( 定義部分 ) ; </syntaxhighlight> ここで、<code>: ワード名</code>は新しいワードの定義を開始し、<code>;</code>は定義の終了を示します。定義部分には、既存のワードや操作を組み合わせて、新しい機能を実現するForthのコードが記述されます。 === ワードの定義と使用例 === Forthにおけるワードの定義と使用についてさらに詳しく説明します。 # ワードの定義 : #: ワードは、<code>:</code> と <code>;</code> の間に記述されたコードブロックで定義されます。 #: 例えば、<code>SQUARE</code>という新しいワードを定義してみましょう。 #:<syntaxhighlight lang=forth> : SQUARE ( n -- n*n ) DUP * ; </syntaxhighlight> #: ここでは、<code>SQUARE</code>というワードが定義されています。このワードは、スタックから1つの数値を取り出し、その数値を自乗して結果をスタックに戻します。 # ワードの使用 : #: 定義したワードは、Forthプログラム内で直接使用することができます。 #:<syntaxhighlight lang=forth> 5 SQUARE . \ スタックから5を取り出して自乗し、結果を表示する </syntaxhighlight> #:上記の例では、<code>5 SQUARE .</code> というForthコードが実行されます。まず、<code>5</code>がスタックに積まれ、次に<code>SQUARE</code>ワードが実行されて、<code>5</code>の自乗である<code>25</code>が計算されます。最後に<code>.</code>はスタックのトップの値を表示しますので、結果として<code>25</code>が表示されます。 # 組み込みワードとカスタムワード : #: Forthには組み込みのワード(<code>+</code>, <code>-</code>, <code>*</code>, <code>/</code>など)がありますが、ユーザーはこれに加えて独自のワードを定義することができます。カスタムワードを使うことで、プログラムをより効率的に構築できます。 # 再帰的なワード : #: Forthでは、ワードは自身の中で再帰的に呼び出すことができます。これにより、複雑な演算や制御構造を簡潔に表現することが可能です。 ワードの定義と使用は、Forthプログラムの中核的な部分を構成します。これにより、プログラムの再利用性、メンテナンス性、可読性が向上し、効率的なコーディングが実現されます。 === 基本的な制御構造 === Forthの制御構造は、他のプログラミング言語とは異なり「制御構造もワードの集合から定義する」という独自の特徴を持っています。Forthでは、基本的な制御構造として条件分岐とループが利用されます。 制御構造に関するワードは、コンパイル時(つまり <code>:</code> から <code>;</code> までの間)でのみ使用でき会話モードでは使用できません。 ==== 条件分岐 ==== Forthでは、条件分岐は主に <code>IF</code>, <code>ELSE</code>, <code>THEN</code> のワードを組み合わせて実現されます。 ; 例: :<syntaxhighlight lang=forth> : ABS ( n -- |n| ) DUP 0< IF NEGATE THEN ; </syntaxhighlight> この例では、<code>ABS</code>というワードを定義しています。このワードは、スタックから数値を取り出し、その絶対値を計算して結果をスタックに戻します。<code>DUP 0<</code> はスタックトップの値が0より小さいかどうかをチェックし、<code>IF</code> から <code>THEN</code> の間に記述されたブロックが条件を満たす場合に実行されます。つまり、もし数値が負の場合は <code>NEGATE</code> が実行されます。 ==== ループ ==== Forthでは、ループは <code>DO</code>, <code>LOOP</code> や <code>BEGIN</code>, <code>WHILE</code>, <code>REPEAT</code> のワードを使って実装されます。 ; 例: :<syntaxhighlight lang=forth> : COUNTDOWN ( n -- ) 0 DO I . LOOP ; </syntaxhighlight> 上記の例では、0から与えられた数値(<code>n</code>)までカウントダウンする<code>COUNTDOWN</code>というワードを定義しています。 ==== その他の制御構造 ==== Forthには他にも、<code>CASE</code>, <code>OF</code>, <code>ENDOF</code>, <code>ENDCASE</code> を使った条件分岐や、<code>IF-ELSE-ENDIF</code> 構造、<code>BEGIN-UNTIL</code>、<code>BEGIN-WHILE-REPEAT</code> など、さまざまな制御構造が存在し、新たな制御構造をユーザーが定義することすら出来ます。 Forthの制御構造は、スタック指向の特性に基づいてシンプルかつ柔軟に設計されており、独自のプログラミングスタイルを持つことが特徴です。 === スタック操作の基本命令 === Forthにはスタック上のデータを操作するための基本的な命令があります。 * <code>DUP</code>: ( n -- n n ) スタックのトップの要素を複製する * <code>DROP</code>: ( n -- ) スタックのトップの要素を削除する * <code>SWAP</code>: ( n1 n2 -- n2 n1 ) スタックのトップとその下の要素を交換する * <code>OVER</code>: (n1 n2 -- n1 n2 n1 ) スタックのトップの2つ下の要素を複製してトップに置く * <code>ROT</code>: ( n1 n2 n3 — n2 n3 n1 ) スタックのトップの3つ下の要素をトップに回転する === 基本的な演算 === Forthには、算術演算(<code>+</code>、<code>-</code>、<code>*</code>、<code>/</code>など)、論理演算(<code>AND</code>、<code>OR</code>、<code>NOT</code>)、比較(<code>=</code>、<code><></code>、<code>></code>、<code><</code>など)の基本ワードが用意されています。これらのワードは、スタック上の値を取り、演算結果をスタックに代入します。 === 再帰的呼び出し === Forthで再帰的呼び出しを行う場合、ワード <code>recurse</code> を使ってワード自身を表します。 再帰的なワードを定義する方法について説明します。 ==== 階乗 ==== 再帰的な階乗(factorial)を定義します。 :<syntaxhighlight lang=forth> : factorial ( n -- result ) dup 0= if \ スタックのトップの値が0かどうかをチェック drop 1 \ もし0ならば、結果は1として処理を終了 else dup 1 - \ スタックのトップの値から1を引いた値をコピー recurse * \ 再帰的に自身を呼び出して、その結果にスタックのトップの値を掛ける then ; </syntaxhighlight> この定義の内容を説明します。 * ワード <code>factorial</code> は、<code>( n -- result )</code> のスタックエフェクトを持ちます。<code>n</code> は階乗を計算する整数です。 * <code>dup 0=</code>: スタックのトップの値が0かどうかをチェックします。 ** もし0ならば、<code>drop 1</code> が実行されて、スタックのトップの値(<code>n</code>)が削除され、結果として <code>1</code> がスタックにプッシュされます。 * <code>else</code>: もしスタックのトップの値が0でない場合は、次の操作が実行されます。 ** <code>dup 1 -</code>: スタックのトップの値から <code>1</code> を引いた値をスタックにプッシュします。これは <code>n - 1</code> の計算です。 ** <code>recurse *</code>: 自身の <code>factorial</code> を再帰的に呼び出して、結果に対してスタックのトップの値(<code>n</code>)を掛けます。これにより、<code>n! = n * (n-1)!</code> の計算が行われます。 * <code>then</code>: <code>if</code> ブロックの終了を示します。 例えば、<code>5 factorial .</code> を実行すると、<code>5</code> の階乗(<code>5!</code>)が計算されます。 :<syntaxhighlight lang=forth> 5 factorial . </syntaxhighlight> この例では、<code>5!</code> の計算手順は以下の通りです: * <code>5</code> がスタックにプッシュされる。 * <code>factorial</code> が呼び出される。 ** <code>dup 0=</code>: スタックのトップの値が0でないので、次の処理が実行される。 ** <code>dup 1 -</code>: <code>5 - 1</code> が計算されて <code>4</code> がスタックにプッシュされる。 ** <code>recurse *</code>: <code>4</code> の階乗 (<code>4!</code>) が再帰的に計算される。 *** <code>dup 0=</code>: スタックのトップの値が0でないので、次の処理が実行される。 *** <code>dup 1 -</code>: <code>4 - 1</code> が計算されて <code>3</code> がスタックにプッシュされる。 *** <code>recurse *</code>: <code>3</code> の階乗 (<code>3!</code>) が再帰的に計算される。 **** ... ***** 最終的に、<code>1</code> の階乗 (<code>1!</code>) が計算されて <code>1</code> がスタックにプッシュされる。 **** <code>5 *</code>: <code>5</code> と <code>4!</code> の結果を掛けて <code>120</code> がスタックにプッシュされる。 *** <code>5 *</code>: <code>5</code> と <code>120</code> の結果を掛けて <code>120</code> がスタックにプッシュされる。 * <code>. (dot)</code> コンパイラワ ==== 最大公約数(GCD) ==== 再帰的にユークリッドのアルゴリズムを使用して最大公約数(Greatest Common Divisor, GCD)を計算します。 :<syntaxhighlight lang=forth> : gcd ( u1 u2 -- gcd ) dup 0= if \ スタックのトップの値が0かどうかをチェック drop \ スタックのトップの値が0ならば削除して終了 else swap over mod recurse \ スタックのトップと2番目の値を入れ替えて、modを計算し再帰的に呼び出す then ; </syntaxhighlight> このプログラムの動作をステップごとに説明します: # <code>dup 0=</code>: スタックのトップの値(<code>u1</code>)が0かどうかをチェックします。 #* もし0ならば、<code>drop</code> が実行されて、スタックのトップの値(<code>u1</code>)が削除されます。この場合は再帰の終了条件となります。 # <code>else</code>: もしスタックのトップの値(<code>u1</code>)が0でない場合は、次の操作が実行されます。 # <code>swap over mod recurse</code>: #* <code>swap</code>: スタックのトップと2番目の値を入れ替えます。これにより、<code>u1</code> と <code>u2</code> の値が入れ替わります。 #* <code>over</code>: スタックの2番目の値(入れ替え前の <code>u1</code>)をスタックのトップにコピーします。 #* <code>mod</code>: スタックのトップの2つの値を取り出して、<code>u1 % u2</code>(<code>u1</code> を <code>u2</code> で割った余り)を計算し、その結果をスタックにプッシュします。 #* <code>recurse</code>: 自身の <code>gcd</code> を再帰的に呼び出します。これにより、新しい <code>u1</code> と <code>u2</code> の値がスタックに積まれ、再帰的に最大公約数が計算されます。 # <code>then</code>: <code>if</code> ブロックの終了を示します。 例えば、<code>12 18 gcd .</code> を実行すると、以下のように動作します: * <code>12</code> と <code>18</code> がスタックにプッシュされます。 * <code>gcd</code> が呼び出されます。 ** <code>dup 0=</code>: <code>18</code> は0ではないので、次の処理に進みます。 ** <code>swap over mod recurse</code>: <code>18</code> と <code>12</code> が入れ替わり、<code>18 % 12</code> が計算されます(余りは <code>6</code>)。 ** <code>gcd</code> が再帰的に呼び出され、新しい値 <code>12</code> と <code>6</code> がスタックにプッシュされます。 *** <code>dup 0=</code>: <code>6</code> は0ではないので、次の処理に進みます。 *** <code>swap over mod recurse</code>: <code>6</code> と <code>12</code> が入れ替わり、<code>6 % 12</code> が計算されます(余りは <code>6</code>)。 *** <code>gcd</code> が再帰的に呼び出され、新しい値 <code>6</code> と <code>6</code> がスタックにプッシュされます。 **** <code>dup 0=</code>: <code>6</code> は0ではないので、次の処理に進みます。 **** <code>swap over mod recurse</code>: <code>6</code> と <code>6</code> が入れ替わり、<code>6 % 6</code> が計算されます(余りは <code>0</code>)。 **** <code>0=</code>: <code>0</code> が0なので、<code>drop</code> が実行されて、スタックのトップの値 <code>0</code> が削除されます。 * 最終的に、スタックのトップには <code>6</code> が残ります。これが <code>12</code> と <code>18</code> の最大公約数です。 したがって、<code>12 18 gcd .</code> を実行すると、<code>6</code> が表示されます。 === 変数の宣言・代入と参照 === Forthにおける <code>VARIABLE</code> は、変数を定義するためのワードです。Forthでは、変数はメモリ内のアドレスに名前を関連付ける方法で定義されます。 以下は、<code>VARIABLE</code> を使用して変数を定義する方法とその使い方の例です。 ==== <code>VARIABLE</code> の使用方法 ==== <code>VARIABLE</code> は以下のように使用します: :<syntaxhighlight lang=forth> VARIABLE my-var \ my-var という名前の変数を定義する </syntaxhighlight> この行は、名前が <code>my-var</code> の変数を定義します。この変数はメモリ内の特定のアドレスに関連付けられます。 ==== 変数の使用方法 ==== 定義された変数を使用するには、<code>@</code>(fetch)や <code>!</code>(store)などのワードを使います。これらのワードを使って変数の値を取得したり設定したりできます。 - <code>@</code> は、変数の値をスタックにプッシュします。 - <code>!</code> は、スタックのトップの値を変数に代入します。 例えば、次のように変数に値を設定して取得します: :<syntaxhighlight lang=forth> 123 my-var ! \ 変数 my-var に値 123 を代入する my-var @ . \ 変数 my-var の値を表示する </syntaxhighlight> この例では、変数 <code>my-var</code> に <code>123</code> を代入し、その後 <code>@</code> を使って変数の値を取得して表示しています。 ==== 実際の例 ==== 以下は、<code>VARIABLE</code> を使って変数を定義し、値を設定して取得する具体的な例です: :<syntaxhighlight lang=forth> VARIABLE my-var \ my-var という名前の変数を定義する 123 my-var ! \ 変数 my-var に値 123 を代入する my-var @ . \ 変数 my-var の値を表示する </syntaxhighlight> この例では、変数 <code>my-var</code> を定義し、<code>123</code> を代入してその値を表示しています。<code>!</code> で変数に値を設定し、<code>@</code> で変数の値を取得しています。 変数はプログラムでデータを保持する際に便利です。Forthでは、変数の値は直接メモリ上に代入されるため、効率的なデータ管理が可能です。 === 定数の定義と参照 === Forthの <code>CONSTANT</code> は、定数を定義するためのワードです。定数は変更されることのない値であり、プログラムの中で何度も使われる値を簡潔に表現するために使用されます。 ==== <code>CONSTANT</code> の使用方法 ==== <code>CONSTANT</code> は以下のように使用します: :<syntaxhighlight lang=forth> 123 CONSTANT my-const \ my-const という名前の定数を定義する </syntaxhighlight> この行は、名前が <code>my-const</code> の定数を定義し、その値を <code>123</code> に設定します。定数はプログラム中で使用される値を一元管理し、可読性を向上させます。 ==== 定数の使用方法 ==== 定義された定数は、その名前を使ってプログラム中で値を参照することができます。 :<syntaxhighlight lang=forth> my-const . \ 定数 my-const の値を表示する </syntaxhighlight> この例では、定数 <code>my-const</code> の値が表示されます。 ==== 実際の例 ==== 以下は、<code>CONSTANT</code> を使って定数を定義し、その定数を使用する具体的な例です: :<syntaxhighlight lang=forth> 123 CONSTANT my-const \ my-const という名前の定数を定義する my-const . \ 定数 my-const の値を表示する </syntaxhighlight> この例では、定数 <code>my-const</code> を <code>123</code> に設定し、その後定数の値を表示しています。 定数はプログラム中で共通の値を使い回す際に便利です。Forthの定数は一度定義されると値が変更されることはなく、プログラム全体で一貫性のある値を提供します。 === 基数 === Forthの <code>BASE</code> は、数値の基数(n進数のn)を設定するための変数です。Forthでは、数値の表現において基数を変更することができます。通常、Forthはデフォルトで10進数を使用しますが、<code>BASE</code> を変更することで他の基数(2進数、16進数など)で数値を表現することが可能です。 ==== <code>BASE</code> の使用方法 ==== <code>BASE</code> は以下のように使用します: :<syntaxhighlight lang=forth> 16 BASE ! \ 基数を16進数に設定する </syntaxhighlight> この行は、<code>BASE</code> の値を <code>16</code> に設定しています。これにより、その後の数値の表示や入力が16進数で行われるようになります。 ==== 基数の変更と数値の表現 ==== <code>BASE</code> を変更することで、その後の数値リテラルの表現が変わります。例えば、<code>BASE</code> を16進数に設定した場合、数値リテラルは16進数として解釈されます。 :<syntaxhighlight lang=forth> 16 BASE ! \ 基数を16進数に設定する FF . \ 16進数の255を表示する </syntaxhighlight> この例では、<code>BASE</code> を16進数に設定してから、<code>FF</code> を表示すると、16進数の <code>FF</code> (10進数の <code>255</code>)が表示されます。 ==== デフォルトの基数と再設定 ==== Forthのデフォルトの基数は10進数です。基数を変更した後は、必要に応じて再度基数を10進数に戻すことができます。 :<syntaxhighlight lang=forth> DECIMAL BASE ! \ 基数を10進数に戻す </syntaxhighlight> この行は、<code>BASE</code> を10進数に再設定しています。これにより、数値リテラルは再び10進数として解釈されるようになります。 よくある間違い: :<syntaxhighlight lang=forth> 10 BASE ! \ 基数を16進数から10進数に戻す??? </syntaxhighlight> : として基数を10に戻そうとするミスがあります。 : コードの 10 は16進数として解釈されるので基数は16のままです。 ==== 注意点 ==== <code>BASE</code> を変更すると、数値の解釈や表示が変わるため、基数の変更後には適切な基数に戻すことが重要です。また、<code>BASE</code> の値は変数として扱われるため、必要に応じて保存や復元することができます。 基数を変更することで、特定の基数で数値を扱うプログラムを簡単に記述することができます。 === イミディエイトワード === イミディエイトワード(immediate word)は、Forthプログラミング言語において特定の動作を持つワードの一種です。イミディエイトワードは、通常のワードとは異なり、コンパイル時ではなく実行時に直ちに処理されます。 以下は、イミディエイトワードの特性について詳しく説明します: # 実行時処理: #* イミディエイトワードは、定義された時点ではコンパイルされず、実行時に直ちに解釈および実行されます。 #* 通常のワード(コンパイルワード)は、単なるコンパイル時にスタックに動作を積むだけであり、後で実行されますが、イミディエイトワードは定義された時点ですぐに実行されます。 # 定義方法: #* イミディエイトワードは、<code>IMMEDIATE</code> を使用して定義されます。 #* これにより、そのワードが定義された直後に実行されるようにマークされます。 # 使用例: #* 例えば、<code>."</code>(ダブルクォートピリオド)はイミディエイトワードです。これは、コンパイル時ではなく実行時に文字列を表示します。 #* <code>: greeting ." Hello, world!" ;</code> という定義では、<code>. "</code>Hello, world!"<code> はコンパイル時に実行されず、</code>greeting` を実行したときに実行されます。 # 動的な挙動: #* イミディエイトワードは、通常のワードとは異なり、実行時の環境やスタックの状態に応じて動的に振る舞います。 #* これにより、実行時に動的なテキストや操作を生成するために使用することができます。 イミディエイトワードは、Forthの柔軟性と強力な動的な特性を提供します。コンパイル時に制御構造や動作を決定するだけでなく、実行時に動的な挙動を持つことができます。 {{コラム|Forthの文法|2=Forthのプログラムは、空白文字で区切られた「ワード」の並びで構成されます。ワードには、数値リテラル、制御構造、演算子、そして他のワードを呼び出す構文などがあります。Forthには高水準の構文がなく、基本的な構文要素は非常にシンプルです。 例えば、<code>2 3 +</code> と入力すると、2と3がスタックにプッシュされ、最後の<code>+</code>がスタック上の2つの数値を加算します。この結果である5がスタックに残ります。つまり、Forthではプログラムの実行とデータ操作が、ワードの解釈とスタック操作によって行われるのです。 Forthは、基本的に行指向の言語です。プログラムは複数行に分割できますが、改行の前後で文が継続する場合は、スペースを入れる必要があります。このため、適切なインデントを使ってプログラムの構造をわかりやすくすることが重要です。 }} == データ構造とメモリ管理 == Forthは組み込みシステムなどのリソース制約の厳しい用途を想定して設計されているため、メモリの効率的な利用が重視されています。この章では、Forthにおけるデータ構造とメモリ管理の方法を説明します。 === コントロールフロースタック === コントロールフロースタックとは、Forthのプログラムの制御フローを管理するために使用される仮想的なスタックです。 その主な役割は以下の通りです: # 制御フロー命令の対応関係の管理 #* 制御フロー命令(<code>IF</code>, <code>THEN</code>, <code>ELSE</code>, <code>BEGIN</code>, <code>WHILE</code>, <code>REPEAT</code> など)の対応関係を管理します。 #* 開始と終了の命令が適切に対応していることを確認します。 # 制御フロー中のデータスタック操作の制約 #* 制御フロー中のデータスタックの使用方法に制約を課します。 #* 制御フロー命令の入れ子関係に応じて、適切なデータスタックの状態が維持されるようにします。 コントロールフロースタックは物理的に実装されていなくても良いと仕様で定められています。 代わりに、システムはコンパイル時や実行時にこのスタックの挙動を模倣する方法を採ることができます。 つまり、コントロールフロースタックはForthの制御構造の妥当性を保証する上で重要な概念であり、プログラムの正しい実行を支えているのです。 通常のプログラミングでコントロールフロースタックを強く意識することはありませんが、制御構造を自らワードとして定義しようとする場合、コントロールフロースタックの振る舞いに注意する必要があります。 === リターンスタック === Forthには、データスタックとは別に、リターンスタックと呼ばれる重要なスタックが存在します。リターンスタックの主な役割は以下の通りです: # 関数呼び出しとリターン #* 関数を呼び出すとき、その関数の呼び出し元の命令アドレスがリターンスタックにプッシュされます。 #* 関数から抜け出すときは、リターンスタックからアドレスがポップされ、その場所に制御が戻されます。 #* これによって、関数呼び出しの際の制御の移動を管理することができます。 # 一時的データ保管 #* リターンスタックは、データを一時的に保管する場所としても使えます。 #* データスタックからデータを>Rでリターンスタックにプッシュし、後でR>で取り出すことができます。 #* これにより、データスタックの状態を一時的に変更せずに、値を保持しておくことができます。 リターンスタックの使用には注意点があります: * ワード内やループ内では、<code>>R</code>と <code>R></code>の回数が一致している必要があります。 * リターンスタックの値は、同じブロック内でのみ参照・取り出しできます。 * ループの脱出時やDO-ループ内からは、リターンスタックの値を取り出せません。 つまり、リターンスタックは制御フローの管理と一時的なデータ保管に使われますが、その使い方には一定の制限があるため、注意深く扱う必要があります。 プログラムの複雑さが増すと、リターンスタックの状態を適切に管理することが難しくなるため、できるだけ単純な使い方に留めるのが賢明です。 ; <code>>R ( x -- ) ( R: -- x )</code> : データスタックから値をポップしリターンスタックにプッシュする ; <code>R> ( R: -- x ) ( x -- )</code> : リターンスタックから値をポップしデータスタックにプッシュする ; <code>R@ ( -- x ) ( R: x -- x )</code> : リターンスタックのスタックトップをデータスタックにコピーする ; <code>2>R ( x1 x2 -- ) ( R: -- x1 x2 )</code> ; <code>2R> ( -- x1 x2 ) ( R: x1 x2 -- )</code> ; <code>2R@ ( -- x1 x2 ) ( R: x1 x2 -- x1 x2 )</code> スタックエフェクトに <code>R:</code> という新しい記号が出てきましたが、これはリターンスタックへの操作をしまします。このためリターンスタックはRスタックとも呼ばれています。 === 変数とアドレス指定 === Forthには、グローバル変数やローカル変数の概念がありません。代わりに、値を格納するためのメモリ領域を確保し、そのアドレスを使ってアクセスします。<code>VARIABLE</code>ワードを使うと、新しい変数領域が確保され、その開始アドレスがスタックに置かれます。 :<syntaxhighlight lang=forth> VARIABLE COUNTER \ カウンター変数を定義 COUNTER @ . \ 変数の値を表示(初期値は0) 1 COUNTER +! \ 変数にインクリメント </syntaxhighlight> 変数の値を取り出すには<code>@</code>(フェッチ)、格納するには<code>!</code>(ストア)を使います。<code>+!</code>のように算術演算と<code>!</code>を組み合わせたワードもあります。 Forthではアドレスを直接スタックに置いて操作することもできます。<code>HERE</code>はディクショナリの次の空きアドレスを取得し、<code>ALLOT</code>はディクショナリ領域を確保します。 ==== データスペース(Data Space) ==== Forthのデータスペースとは、メモリ内の連続した領域を指し、データやワードの定義などが格納される場所です。Forthでは、データスペースは主に '''ヒープ(heap)''' と '''ディクショナリ(dictionary)''' の2つの領域に分かれています。 * '''ヒープ''': データスタックやワードの実行時に使用される一時的な領域です。ここでは、動的に割り当てられたデータや一時的な計算に使用されるデータが保持されます。 * '''ディクショナリ''': ワード(単語)の定義やその実装が格納される領域です。Forthのディクショナリはワードの名前とそれに対応する実行可能なコードへのポインタを保持します。 ==== <code>HERE</code> ワード ==== <code>HERE</code> はForthで使用される特定のワードであり、現在のデータスペース内の「ここ(here)」の位置を示します。具体的には、ディクショナリ内の次の空き領域の先頭アドレスを指します。 <code>HERE</code> を使用すると、新しいワードやデータをデータスペースに格納する際に位置を特定することができます。主にワードの定義やデータの動的な確保に使用されます。 例えば、新しい変数や配列を定義する場合、<code>HERE</code> の値を参照して適切なメモリ領域を割り当て、その後 <code>HERE</code> を更新します。 具体的な使用例を示します: :<syntaxhighlight lang=forth> HERE . \ 現在のHEREの値を表示(ディクショナリ内の次の空き領域のアドレス) 10 ALLOT \ 10バイトの領域を確保 HERE . \ 確保後のHEREの値を表示 </syntaxhighlight> この例では、まず <code>HERE</code> の値が表示され、次に <code>10 ALLOT</code> によって10バイトの領域が確保されます。その後、再度 <code>HERE</code> の値が表示され、確保された領域の終端アドレスが示されます。 <code>HERE</code> を適切に使用することで、動的なメモリ管理やデータスペースの操作が行えます。 ==== HEREを利用したデータスペースの活用例 ==== ; sieve.fr :<syntaxhighlight lang=forth> : prime? ( n -- ? ) here + c@ 0= ; : composite! ( n -- ) here + 1 swap c! ; : sieve ( n -- ) here over erase 2 begin 2dup dup * > while dup prime? if 2dup dup * do i composite! dup +loop then 1+ repeat drop ." Primes: " 2 do i prime? if i . then loop ; 100 sieve / Primes: 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 </syntaxhighlight> このForthのコードは、エラトステネスの篩(Sieve of Eratosthenes)アルゴリズムを実装しています。このアルゴリズムは、与えられた数 <code>n</code> 以下のすべての素数を見つけるために使用されます。以下では、与えられたコードの各部分を詳しく説明します。 ; <code>prime?</code> ワード :<syntaxhighlight lang=forth> : prime? ( n -- ? ) here + c@ 0= ; </syntaxhighlight> :; <code>( n -- ? )</code>: スタックから整数 <code>n</code> を取り出し、その数が素数であるかどうかの真偽値 <code>?</code> をスタックに積む。 :* <code>here + c@</code>: <code>here</code> は現在のデータスペースの末尾を示し、それに <code>+</code> を使ってワードの<code>n</code>番目のアドレスを取得する。そして <code>c@</code> はそのアドレスの内容(1バイトの文字)を取得する。 :* <code>0=</code>: 取得したバイトが0かどうかをチェックし、0ならば真(素数)を返す。 ; <code>composite!</code> ワード :<syntaxhighlight lang=forth> : composite! ( n -- ) here + 1 swap c! ; </syntaxhighlight> :; <code>( n -- )</code>: スタックから整数 <code>n</code> を取り出す。 :* <code>here + 1 swap c!</code>: <code>here</code> から<code>n</code>のアドレスにを1を1バイトで書き込む。 ; <code>sieve</code> ワード :<syntaxhighlight lang=forth> : sieve ( n -- ) here over erase 2 begin 2dup dup * > while dup prime? if 2dup dup * do i composite! dup +loop then 1+ repeat drop ." Primes: " 2 do i prime? if i . then loop ; </syntaxhighlight> :; <code>( n -- )</code>: スタックから整数 <code>n</code> を取り出す。 :* <code>here over erase</code>: 現在のデータスペース(<code>here</code> から先)を <code>n</code> バイト分消去する。 :* <code>2 begin ... repeat</code>: メインのループ。2から始めて、以下の条件に基づいて処理を繰り返す。 :** <code>2dup dup * ></code>: 現在の値を2つコピーし、2つを掛けた値が <code>n</code> を超えるまで続ける。 :** <code>dup prime? if ... then</code>: 現在の値が素数かどうかをチェックし、素数ならば以下を実行。 :*** <code>2dup dup * do ... dup +loop</code>: 素数の場合、その数の倍数を篩い落とす。内側のループで、その数の倍数を全て <code>composite!</code> でマークする。 :** <code>1+</code>: 現在の数値を1増やす。 :* <code>drop</code>: 最後の数値を削除する。 :* <code>." Primes: " 2 do i prime? if i . then loop</code>: 素数を表示するループ。2から始まり、<code>n</code> まで続ける。各数値が素数ならば表示する。 ; 実行 :<syntaxhighlight lang=forth> 100 sieve </syntaxhighlight> :100以下の素数を見つけるために <code>sieve</code> ワードが実行されます。 === CREATEを使った変数と配列の定義 === Forthの <code>CREATE</code> は、新しい変数や配列をディクショナリに定義するためのワードです。<code>CREATE</code> を使うことで、任意の名前で参照可能なデータ領域を確保し、その領域に対する操作を定義することができます。 以下に、<code>CREATE</code> ワードの基本的な構文と使用方法を示します。 ==== 構文 ==== :<syntaxhighlight lang=forth> CREATE name </syntaxhighlight> * <code>name</code>: 定義する変数や配列の名前を指定します。 ==== 使用方法 ==== # 変数の定義 #:<code>CREATE</code> を使って変数を定義する場合、単に変数の初期値を指定します。 #:<syntaxhighlight lang=forth> CREATE my-var 42 , </syntaxhighlight> #:上記の例では、<code>my-var</code> という名前の変数が定義され、初期値として <code>42</code> が設定されています。<code>,</code> はスタックのトップの値を <code>my-var</code> の定義領域に格納するワードです。 # 配列の定義 #: <code>CREATE</code> を使って配列を定義する場合、配列の要素数や初期値を指定します。 #:<syntaxhighlight lang=forth> CREATE my-array 5 ALLOT </syntaxhighlight> #: 上記の例では、<code>my-array</code> という名前の配列が定義され、5つの要素分の領域が確保されます。各要素には初期値が与えられていないため、初期化が必要な場合は別途行います。 ==== 使用例 ==== このForthのコードは、<code>CREATE</code> を使って変数と配列を定義し、それらに値を格納・表示する例です。 ; 変数の定義と使用 :<syntaxhighlight lang=forth> CREATE x \ 変数 x を定義 100 x ! \ x に 100 を代入 x @ . CR \ x の値を表示 </syntaxhighlight> * <code>CREATE x</code>: <code>x</code> という名前の変数を定義します。<code>CREATE</code> はディクショナリに新しいワードを登録しますが、データスペース自体は確保しません。 * <code>100 x !</code>: <code>x</code> のデータフィールドに <code>100</code> を格納します。 * <code>x @ . CR</code>: <code>x</code> のデータフィールドから値を読み取って表示します。<code>CR</code> は改行を出力します。 ; 配列の定義と使用 :<syntaxhighlight lang=forth> CREATE MY-ARY 100 ALLOT \ 100セルの配列を作成 42 MY-ARY 10 + ! \ 11番目の要素に42を代入 MY-ARY 10 + @ . \ 11番目の要素の値を表示 </syntaxhighlight> * <code>CREATE MY-ARY 100 ALLOT</code>: <code>MY-ARY</code> という名前の配列を定義し、100セル分のデータスペースを確保します。 * <code>42 MY-ARY 10 + !</code>: <code>MY-ARY</code> の11番目の要素(0から始まるインデックスなので、10を足します)に <code>42</code> を代入します。 * <code>MY-ARY 10 + @ .</code>: <code>MY-ARY</code> の11番目の要素の値を読み取って表示します。 この例では、<code>CREATE</code> を使って変数 <code>x</code> と配列 <code>MY-ARY</code> を定義し、それぞれに値を設定しています。<code>x</code> は単一の値を格納する変数であり、<code>MY-ARY</code> は複数の要素を持つ配列です。<code>!</code> を使ってデータを代入し、<code>@</code> を使ってデータを取得しています。 Forthの特性として、変数や配列の定義はディクショナリに登録されるため、名前に対して対応するデータ領域へのアクセスが可能となります。これにより、動的なデータ構造を効率的に管理することができます。 == 入出力と組み込みワード == Forthには標準の入出力ワードがあり、コンソールやファイルからの入出力を行えます。また、様々な組み込みワードが用意されており、これらを活用することでForthの機能を拡張できます。 === 標準入出力 === Forthには、キーボードからの文字入力や、コンソールへの文字出力を行うためのワードが用意されています。 :<syntaxhighlight lang=forth> KEY \ キーボードから1文字読み込む EMIT \ スタック上の値(文字コード)を出力する ." \ 文字列を直接出力する </syntaxhighlight> <code>KEY</code>はキーボード入力を待ち、押された文字のASCIIコードをスタックに置きます。<code>EMIT</code>は逆に、スタック上の値を文字コードとして解釈し、コンソールに出力します。<code>." Hello"</code>のように、<code>."</code> の後に文字列を続けると、その文字列がコンソール出力されます。 数値入出力には、<code>?</code>、<code>U.</code>、<code>U.R</code>などのワードが使えます。<code>?</code>は数値を入力受け付け、<code>U.</code>は符号なし数値を、<code>U.R</code>は数値を指定した基数(2進数、16進数など)で出力します。 === ファイルアクセス === ファイル入出力には、様々なワードが用意されています。<code>OPEN-FILE</code>でファイルを開き、<code>READ-FILE</code>や<code>WRITE-FILE</code>でデータの読み書きができます。 :<syntaxhighlight lang=forth> S" data.txt" R/O OPEN-FILE THROW VALUE HANDLE \ ファイルを読み取りモードで開く HANDLE READ-FILE ABORT" READ ERROR" \ ファイルを読み込む HANDLE CLOSE-FILE THROW \ ファイルを閉じる </syntaxhighlight> ファイル名は、<code>S"</code> で文字列をスタックに置いた後、<code>R/O</code>(読み取り専用)や<code>W/O</code>(書き込み専用)といったモードを指定してファイルを開きます。<code>THROW</code>はエラーがあれば例外を発生させます。 <code>READ-FILE</code>や<code>WRITE-FILE</code>では、バッファ領域のアドレスと読み書きするバイト数をスタックに置く必要があります。 === 組み込みワードの利用 === Forthには、数学関数や論理演算、メモリ操作など、様々な組み込みワードが用意されています。必要に応じてこれらのワードを活用することで、プログラムにさまざまな機能を付加できます。 :<syntaxhighlight lang=forth> 2 3 MAX . \ 最大値(3)を出力 S" HELLO" SWAP DROP \ スタック操作サンプル HEX 1F20 4 DUMP \ メモリダンプ </syntaxhighlight> <code>MAX</code>は2つの数値の最大値を、<code>SWAP</code>は2つの値の順序を入れ替え、<code>DROP</code>は最上位の値を捨てます。<code>DUMP</code>は指定したアドレスからのメモリ内容をダンプ出力します。 組み込みワードには、浮動小数点演算、文字列処理、マルチタスク、IPCなど、様々な分野のものがあります。また、必要に応じてワードを自作したり、外部ライブラリからリンクしたりできます。Forthはコンパクトなシステムながら、組み込みワードの充実により高い機能性を発揮します。 == アプリケーション開発 == Forthは小規模な組み込みシステムから大規模なアプリケーションまで、幅広い用途に使用できる言語です。この章では、Forthにおけるアプリケーション開発の手法と、実例について解説します。 === モジュール化とワード管理 === Forthはワードをベースとしたモジュール性の高いプログラミングができます。大きなアプリケーションを開発する際は、適切にモジュール分割してワードを設計・管理することが重要です。 Forthにはネームスペースの概念がありません。そのため、ワード名の重複を避けるためには、プレフィックスなどの命名規則を定めることが一般的です。たとえば<code>STRING-LENGTH</code>のように、ワードの役割がわかるよう名前を付けます。 また、ワードをまとめてファイルに保存し、必要に応じて読み込む方法があります。Forthの多くの処理系は、ワードの定義をソースファイルに保存したり、メモリイメージを永続化したりできます。 :<syntaxhighlight lang=forth> MARKER MODULE>STRING : STRING-LENGTH \ 文字列の長さを求める ... ; : STRING-REVERSE \ 文字列を反転する ... ; STRING-REVERSESTRING-LENGTH +MODULE </syntaxhighlight> 作成したワードは<code>MODULE>NAME</code>でモジュール名を付け、<code>+MODULE</code>でモジュールを完成させることができます。他のソースから<code>USE MODULE>NAME</code>とすれば、そのモジュールのワードが使用可能になります。 大規模なシステムでは、このようなソースレベルの分割に加え、オーバーレイ、仮想メモリ、マルチタスク機能を活用することで、メモリの効率的な使用が可能です。 === グラフィックス処理 === Forthでもグラフィック処理が可能ですが、組み込みの機能は限られています。ほとんどの処理はユーザ定義ワードとして実装する必要があります。 ビットマップ画像の表示や、ウィンドウ、マウスカーソルなどの基本的なGUIの作成はある程度可能です。高度な3Dグラフィックスなどを実現するには、外部ライブラリを利用する必要があります。 :<syntaxhighlight lang=forth> NEED FRAMEBUFFER \ フレームバッファへのアクセスモジュール : DRAW-LINE ( x1 y1 x2 y2 -- ) \ ブレザンハムのアルゴリズムでライン描画 ... ; : DRAW-RECT ( x y w h -- ) 2SWAP 2>R 2R> \ (x y w h -- x y x+w y+h) DRAW-LINE 2>R 2R> DRAW-LINE 2SWAP DRAW-LINE 2SWAP DRAW-LINE ; FRAMEBUFFER-INIT \ グラフィックスサブシステムの初期化 100 100 300 200 DRAW-RECT \ 長方形を描画 </syntaxhighlight> 上記では、フレームバッファの制御関数がロードされた前提で、<code>DRAW-LINE</code>を使って<code>DRAW-RECT</code>(長方形描画)を実装しています。スタックを活用して座標値を受け渡し、基本的な幾何図形を描画しています。 Forthはグラフィックスパイプラインなどの高度な機能を組み込んでいませんが、スタックベースの処理により、低レベルのデバイスアクセスが可能です。組み込みシステムのディスプレイやLED制御など、グラフィックス関連の処理に適しています。 === システムプログラミング === Forthの本質的な特性として、システムプログラミングに適していることがあげられます。小規模でコンパクト、高速動作、低レベルなメモリアクセスが可能というメリットがあります。 OSカーネル、デバイスドライバ、BIOS、ブートローダなどの開発にForthは広く使われてきました。組み込みシステムでは、センサーやI/Oデバイスの制御に最適です。スタック指向のモデルにより、レジスタレベルの処理が直接かけるのも特徴です。 例えば、Forthを使ってブートローダを実装する場合には、次のようなプログラムになります。 :<syntaxhighlight lang=forth> HEX 07C0 INPORT DROP \ DOSデータ領域クリア 0800 0 20 MOVE \ リセットベクタ設定 KERNEL.IMG LOAD \ カーネル読み込み A000 OUTPORT \ VGAモードへ切り替え 1000 JMP \ カーネル実行 ... \ BIOSブート用の簡単なForth読み込みコード :KERNEL.IMG LOAD CORE SWAP CPU KERNEL ; </syntaxhighlight> BIOSなどの低レベル機能を呼び出してブートローダを構築する処理が、Forthの文法でコンパクトに記述できる様子がわかります。 また、Forth自身が小規模で可搬性が高いため、Forth処理系そのものもForthで書かれた簡単なコアを、ホストOSやアーキテクチャに合わせてセルフホスト (移植) する手法が一般的です。これは、アプリケーションと実行環境を一体化して開発できる利点があります。 == 高度なトピック == ここまでForthの基本的な構文と概念、データ構造、アプリケーション開発の実例などを解説してきました。この章では、Forthの高度な利用方法としてパフォーマンス最適化、マルチスレッド・マルチタスク、メタプログラミングについて取り上げます。 === 最適化とパフォーマンス === Forthはコンパクトで高速な言語ですが、さらなる最適化の余地があります。ワードの定義を工夫したり、ネイティブコードコンパイラを使ったりすることで、パフォーマンスを向上できます。 ワード定義の最適化では、冗長な演算を排除したり、インラインコーディングの手法を用いたりします。例えば、次のようなワード定義があるとします。 :<syntaxhighlight lang=forth> : MAX2 ( n1 n2 -- max ) 2DUP > IF SWAP DROP ELSE NIP THEN ; </syntaxhighlight> この<code>MAX2</code>は一時的に2つの値を複製(<code>2DUP</code>)し、<code>IF</code>..<code>ELSE</code>..<code>THEN</code>の条件分岐で最大値を選びます。しかし、この一時複製が無駄な演算となっています。次のように書くとコードがシンプルになります。 :<syntaxhighlight lang=forth> : MAX2 ( n1 n2 -- max ) OVER OVER > IF SWAP THEN ; </syntaxhighlight> ワードの最適化には一般的なテクニックがあり、Forthのコンパイラ作者から提案されているものを参考にするとよいでしょう。 また、Forthにはネイティブコードコンパイラと呼ばれるもので、ワードの実行コードをネイティブマシン語に変換できるものがあります。Forthの対話的な実行環境は便利ですが、ネイティブコードの方が高速に動作します。こうした最適化手法を使い分けることで、Forthのパフォーマンスを飛躍的に向上できます。 === マルチスレッドとマルチタスク === Forthには並列実行の機構が組み込まれていないため、マルチスレッドやマルチタスク処理を実現するにはユーザ定義の実装が必要です。しかし、Forthの言語特性を活かせばきわめてコンパクトな並列処理ができます。 マルチスレッドでは、スタックを分離し、スレッド毎にスタックのコピーを持つ手法が一般的です。スレッドの切り替えはスタックのコンテキストスイッチで実現できます。また、Forthのデータストアクセス方式を応用すれば、IPC(プロセス間通信)の仕組みを作ることもできます。 :<syntaxhighlight lang=forth> : NEW-TASK ( -- ) HERE CURRENT-STACK >R CREATE-STACK SWAP [: DO-SOME-WORK ;] ( compile: word behavior ) R> SET-CURRENT ; </syntaxhighlight> この例では、新しいタスクを作成するワード<code>NEW-TASK</code>を定義しています。<code>CREATE-STACK</code>でスタックを新しく割り当て、<code>DO-SOME-WORK</code>のようなワード定義をタスクとして登録します。実行時にはスケジューラによってこれらのタスクが実行されます。 マルチタスク機構を実装する例は多数あり、スレッド単位でデータを扱う方式、メッセージキューによる方式、それぞれ長所と短所があります。並列処理にはデッドロックなどの問題点もありますが、Forthではコンパクトでシンプルなコード記述が可能です。 === メタプログラミング === Forthにはプログラムを生成・変更するメタプログラミングの機能があり、コードを自動生成したり、プログラムを動的に変更したりできます。この機能は、Forthをドメイン固有言語(DSL)の開発などに適用できることを意味しています。 メタプログラミングには、コンパイル時に評価される構文<code>[...]</code>と実行時構文<code>EVAL</code>があります。どちらもプログラムをデータとして扱えるため、動的にプログラムを生成・変更できます。 :<syntaxhighlight lang=forth> : HILBERT-CURVE ( n -- ) 0 ?DO [: 2DUP RECURSE >R >R 1 HCURVE R> R> RECURSE 3 HCURVE ;] POSTPONE LITERAL POSTPONE HCURVE LOOP ; </syntaxhighlight> この例では、ヒルベルト曲線を描画するコードを動的に生成しています。<code>POSTPONE</code>はワードのコンパイルを遅延させ、<code>[: ... ;]</code>の構文はその間のテキストを実行可能なコードとしてコンパイルします。この手法により、 Hilbertカーブの次元(<code>n</code>)に応じて、その描画コードを生成しています。 Forthのメタプログラミング機能は、高度な用途に役立ちます。例えば、ユーザインターフェースビルダー、コードジェネレーター、プログラムシンセサイザなどでその力を発揮できます。Forthの柔軟性を最大限に活かせる側面といえるでしょう。 == サンプルプログラムとプロジェクト == Forthの理解を深めるには、実際にコードを書いて動作を確認することが大切です。この章では、様々なサンプルコードを紹介するとともに、実践的なForthプロジェクトの例を示します。 === 様々なサンプルコード === 以下はForthの基本的な機能を示すサンプルコード集です。 ; 再帰によるフィボナッチ数列 :<syntaxhighlight lang=forth> : FIB ( n -- fib-n ) DUP 0= IF DROP 1 EXIT THEN DUP 1 = IF DROP 1 EXIT THEN DUP 1- RECURSE SWAP 2 - RECURSE + ; </syntaxhighlight> ; 文字列操作 :<syntaxhighlight lang=forth> : UPPERCASE ( addr n -- addr n ) OVER + SWAP ?DO I C@ [CHAR] a [CHAR] z 1+ WITHIN IF [CHAR] A [CHAR] a - + THEN I C! LOOP ; : REVERSE-WORDS ( addr n -- ) [CHAR] \ SKIP SPACES OVER >R BEGIN OVER C@ [CHAR] \ <> WHILE [CHAR] \ PARSE DUP >R REVERSE R> OVER C! CHAR+ REPEAT R> DROP 2DROP ; </syntaxhighlight> ; ベクトル・行列計算 :<syntaxhighlight lang=forth> REQUIRE DOUBLE \ 倍精度浮動小数点サポート : VZEROS ( n -- addr ) \ n要素のゼロベクトルを生成 CREATE HERE 0 SWAP 8 * DUP ALLOT FILL ; : MZEROS ( rows cols -- addr ) \ rows x cols の零行列を生成 SWAP VZEROS SWAP 0 ?DO OVER VZEROS COLS + LOOP ; </syntaxhighlight> ; 簡易グラフィックス :<syntaxhighlight lang=forth> VARIABLE FRAMEBUF \ フレームバッファアドレス : PIXEL ( x y color -- ) \ 1ピクセル書き込み FRAMEBUF @ >R 2 * R@ + 3 * RP@ C!+ RP@ C!+ RDROP ; : LINE ( x1 y1 x2 y2 c -- ) \ ラインの描画 >R 2SWAP R> 2>R 2R@ PIXEL 2R> PIXELLINE ; </syntaxhighlight> これらの例は、スタックを使った処理の流れ、ユーザ定義ワードの作成、再帰など、Forthのプログラミング手法の基本を示しています。コンパクトながらも表現力の高さがわかるでしょう。 === 実践的なプロジェクト例 === 次に、もう少し大がかりなForthプロジェクトの例を紹介します。 ; Forth Chip-8 エミュレーター Chip-8はレトロなゲームコンソールで、Forthでその命令セットをエミュレートするプロジェクトです。グラフィックス、入力処理、命令デコーダなどを実装します。 ; カーネルとブートローダ ForthでOSカーネルの基本部分を実装し、ブートローダと合わせてシステムを構築するプロジェクト。メモリ管理、タスク管理、ファイルシステム、ドライバなどの機能が実装できます。 ; Webサーバー ForthでHTTPリクエストを処理するWebサーバーを作成。ソケット通信、文字列処理、ファイル入出力などの機能が必要になります。追加してWebアプリケーションフレームワークなども作れます。 ; オープンソースForthプロセッサ Forthを使ってCPU命令セットを記述し、ゲートレベルまでFPGAに実装するプロセッサの設計プロジェクト。ハードウェア記述言語との連携が重要です。 このようなプロジェクトを通して、Forthの実用性とシステムプログラミングでの可能性を体験できます。Forthという言語自体を使って、OSやハードウェアコンポーネントを実装できるのが最大の特徴です。いずれのプロジェクトも一般的な規模になると、モジュール分割やワード管理、ツール活用などの工夫が必要になります。 == 参考資料 == Forthについてより深く学ぶには、書籍や公開されているオンラインリソースを参照するのが有効な方法です。また、活発なForthコミュニティに参加することで、他の開発者からの助言を得られます。 === 関連書籍の紹介 === Forthの入門書から応用、さらには処理系の実装に至るまで、多くの優れた書籍が出版されています。 * 「Forth入門」レオ・ブロディ (ISBN:978-4875930297 工学社) ** Forth言語の基本から、アプリケーション開発までをカバーした長年の定番書。 * 「Thinking Forth」Leo Brodie (Punchy Publishing) / Forth思考 ―問題解決のための言語と哲学― レオ・ブロディー著 ** Forth哲学に重きを置いた名著。Forthの考え方を深く解説。 * 「Forth Programmer's Handbook」(ISBN:978-1419675492 Forth Inc.) ** ANS Forthの規格書で、WordSetの詳細が書かれている。 これらの書籍を手に入れられれば、Forthの理解が格段に進むはずです。電子書籍としても出版されているものがあります。 === オンラインリソース === {{Wikipedia}} インターネット上にも無料で参照できるForth関連の豊富なリソースが存在します。 * Forth Interest Group ( https://www.forth.org/ ) ** Forthに関する書籍、記事、リソースなどが集まるポータル。 * Forth-Standard-Committee 公式サイト( https://forth-standard.org/ ) Webサイト、ソースコード、ニュースレターなど、さまざまな形でリソースが公開されているので、活用していきたいものです。 === Forthコミュニティ === 長年にわたりForth言語を支える活発なコミュニティが存在し、開発者同士が支え合う環境があります。 * Newsgroups: comp.lang.forth ** ディスカッションの場となるForth専用のニュースグループ。 * 地域 Forth グループ ** ヨーロッパ、アメリカ、アジアなどの地域Forthグループ。 オンラインフォーラムやメーリングリスト、対面の勉強会など、様々な形でForth開発者同士が交流を深めています。初心者でもこうしたコミュニティに参加することで、サポートを受けられます。Forthの小さな世界ですが、地域を越えて開発が行われているのが特徴です。 Forthの参考文献やオンラインリソース、そしてコミュニティを上手く活用することで、この独特な言語の理解が一層深まるはずです。 == 脚註 == <references /> [[Category:Forth|*]] [[Category:プログラミング言語]] 62vywuj012e4no8ch0tc5jtldj74t5g 246669 246668 2024-04-14T00:36:52Z Ef3 694 /*アライメント*/ Forthの ALIGN ワードは、データ領域のアラインメントを行うためのワードです。アラインメントとは、データがメモリ上で配置される位置を調整することであり、特定のアドレス境界にデータを配置することを指します。アラインメントは、プロセッサの性能やメモリアクセスの効率性に影響を与える重要な要素です。 wikitext text/x-wiki == はじめに == Forthはスタック指向のプログラミング言語であり、そのシンプルさと柔軟性から広く用いられています。 本書は、プログラマがForthを効果的に使いこなすための手引書として設計されています。例示や実践的なヒントが豊富に盛り込まれており、読者は理論を理解しながら実際のプロジェクトに応用できるでしょう。 本書を通じて、Forthの魅力と実力を十分に体感し、その利用価値を最大限に引き出すことができるでしょう。 本書では、ForthのCore Word Setに準拠した標準的なForthシステムを題材とします。 == Forthプログラミングの基礎 == Forthはスタック指向のプログラミング言語であり、独自の特徴を持っています。以下では、Forthプログラミングの基礎を解説します。 === スタック操作 === [[スタック構造|スタック]]は、Forthにおける中心的なデータ構造です。ほとんどのワードは、スタックから値を取り出したり、スタックに値を代入したりします。スタックは、後入れ先出し(LIFO; Last In First Out)のデータ構造で、Forthの演算はスタック上で行われます。 === 例 === 以下は、Forthでの簡単な計算の例です: :<syntaxhighlight lang=forth> 3 4 + . </syntaxhighlight> : まず<code>3</code>をスタックに置き、<code>4 + .</code> を解釈します。 : 次に、<code>4</code>をスタックに置き、<code>3 4</code> となり、<code>+ .</code> が残ります。 : そして、<code>+</code> はスタックのトップの2つの要素を加算して結果を戻し、スタックには<code>7</code>だけが残ります。 : 最後に、<code>.</code>(ドット)はスタックから<code>7</code>を取り除いてそれを表示します。 :{| |- !コード!!style='width:3em'| 3 !!style='width:3em'| 4 !!style='width:3em'| + !!style='width:3em'| . |- !スタックトップ |style="border:1px solid black; text-align:center"| 3 ||style="border:1px solid black; text-align:center"| 4 ||style="border:1px solid black; text-align:center"| 7 || |- ! | ||style="border:1px solid black; text-align:center"| 3 || || |- !出力 | || || ||style="text-align:center; font-weight: bold"| 7 |} === コメント === Forthでは、コメントは括弧で囲んで表現されます。例えば: :<syntaxhighlight lang=forth> ( これはコメントです ) </syntaxhighlight> <code>/</code> から行末までもコメントです :<syntaxhighlight lang=forth> 3 4 + \ 3 + 4 の結果をスタックトップに残す </syntaxhighlight> コメントは、インタプリタの動作に影響を与えません。 === スタックエフェクト === Forthの各ワードは、スタック上で特定の操作を行います。ワードのドキュメントでは、それがスタックに対してどのような影響を与えるかを示す記述があります。例えば: :<syntaxhighlight lang=forth> + ( a b -- c ) </syntaxhighlight> この記述は、<code>+</code>ワードが2つの引数(<code>a</code>と<code>b</code>)を消費し、1つの結果(<code>c</code>)をスタックに残すことを意味します。 === Forthのワードとは?その定義と使用について === Forthにおける「ワード」とは、基本的には単語や言葉を意味しますが、Forthプログラミングでは、より具体的には次の2つの意味を持ちます。 # 定義済みの単語 #: ワードは、Forthの語彙において定義された単語や操作を指します。Forthでは、これらのワードはスタック操作や制御構造、算術演算などの基本的な機能を表します。例えば、<code>+</code>は2つの数値を取り出して足し合わせ、結果をスタックに戻すワードです。 # 新しい単語の定義 #: ワードは、Forthプログラム内で新しい単語を定義するための仕組みとしても使われます。これは、既存のワードを組み合わせて、新しい機能を持つ単語を定義することを意味します。例えば、<code>DOUBLE</code>というワードを定義して、与えられた数値を2倍にするような操作を定義することができます。 ワードの定義は、通常、次のような形式で行われます: :<syntaxhighlight lang=forth> : ワード名 ( 定義部分 ) ; </syntaxhighlight> ここで、<code>: ワード名</code>は新しいワードの定義を開始し、<code>;</code>は定義の終了を示します。定義部分には、既存のワードや操作を組み合わせて、新しい機能を実現するForthのコードが記述されます。 === ワードの定義と使用例 === Forthにおけるワードの定義と使用についてさらに詳しく説明します。 # ワードの定義 : #: ワードは、<code>:</code> と <code>;</code> の間に記述されたコードブロックで定義されます。 #: 例えば、<code>SQUARE</code>という新しいワードを定義してみましょう。 #:<syntaxhighlight lang=forth> : SQUARE ( n -- n*n ) DUP * ; </syntaxhighlight> #: ここでは、<code>SQUARE</code>というワードが定義されています。このワードは、スタックから1つの数値を取り出し、その数値を自乗して結果をスタックに戻します。 # ワードの使用 : #: 定義したワードは、Forthプログラム内で直接使用することができます。 #:<syntaxhighlight lang=forth> 5 SQUARE . \ スタックから5を取り出して自乗し、結果を表示する </syntaxhighlight> #:上記の例では、<code>5 SQUARE .</code> というForthコードが実行されます。まず、<code>5</code>がスタックに積まれ、次に<code>SQUARE</code>ワードが実行されて、<code>5</code>の自乗である<code>25</code>が計算されます。最後に<code>.</code>はスタックのトップの値を表示しますので、結果として<code>25</code>が表示されます。 # 組み込みワードとカスタムワード : #: Forthには組み込みのワード(<code>+</code>, <code>-</code>, <code>*</code>, <code>/</code>など)がありますが、ユーザーはこれに加えて独自のワードを定義することができます。カスタムワードを使うことで、プログラムをより効率的に構築できます。 # 再帰的なワード : #: Forthでは、ワードは自身の中で再帰的に呼び出すことができます。これにより、複雑な演算や制御構造を簡潔に表現することが可能です。 ワードの定義と使用は、Forthプログラムの中核的な部分を構成します。これにより、プログラムの再利用性、メンテナンス性、可読性が向上し、効率的なコーディングが実現されます。 === 基本的な制御構造 === Forthの制御構造は、他のプログラミング言語とは異なり「制御構造もワードの集合から定義する」という独自の特徴を持っています。Forthでは、基本的な制御構造として条件分岐とループが利用されます。 制御構造に関するワードは、コンパイル時(つまり <code>:</code> から <code>;</code> までの間)でのみ使用でき会話モードでは使用できません。 ==== 条件分岐 ==== Forthでは、条件分岐は主に <code>IF</code>, <code>ELSE</code>, <code>THEN</code> のワードを組み合わせて実現されます。 ; 例: :<syntaxhighlight lang=forth> : ABS ( n -- |n| ) DUP 0< IF NEGATE THEN ; </syntaxhighlight> この例では、<code>ABS</code>というワードを定義しています。このワードは、スタックから数値を取り出し、その絶対値を計算して結果をスタックに戻します。<code>DUP 0<</code> はスタックトップの値が0より小さいかどうかをチェックし、<code>IF</code> から <code>THEN</code> の間に記述されたブロックが条件を満たす場合に実行されます。つまり、もし数値が負の場合は <code>NEGATE</code> が実行されます。 ==== ループ ==== Forthでは、ループは <code>DO</code>, <code>LOOP</code> や <code>BEGIN</code>, <code>WHILE</code>, <code>REPEAT</code> のワードを使って実装されます。 ; 例: :<syntaxhighlight lang=forth> : COUNTDOWN ( n -- ) 0 DO I . LOOP ; </syntaxhighlight> 上記の例では、0から与えられた数値(<code>n</code>)までカウントダウンする<code>COUNTDOWN</code>というワードを定義しています。 ==== その他の制御構造 ==== Forthには他にも、<code>CASE</code>, <code>OF</code>, <code>ENDOF</code>, <code>ENDCASE</code> を使った条件分岐や、<code>IF-ELSE-ENDIF</code> 構造、<code>BEGIN-UNTIL</code>、<code>BEGIN-WHILE-REPEAT</code> など、さまざまな制御構造が存在し、新たな制御構造をユーザーが定義することすら出来ます。 Forthの制御構造は、スタック指向の特性に基づいてシンプルかつ柔軟に設計されており、独自のプログラミングスタイルを持つことが特徴です。 === スタック操作の基本命令 === Forthにはスタック上のデータを操作するための基本的な命令があります。 * <code>DUP</code>: ( n -- n n ) スタックのトップの要素を複製する * <code>DROP</code>: ( n -- ) スタックのトップの要素を削除する * <code>SWAP</code>: ( n1 n2 -- n2 n1 ) スタックのトップとその下の要素を交換する * <code>OVER</code>: (n1 n2 -- n1 n2 n1 ) スタックのトップの2つ下の要素を複製してトップに置く * <code>ROT</code>: ( n1 n2 n3 — n2 n3 n1 ) スタックのトップの3つ下の要素をトップに回転する === 基本的な演算 === Forthには、算術演算(<code>+</code>、<code>-</code>、<code>*</code>、<code>/</code>など)、論理演算(<code>AND</code>、<code>OR</code>、<code>NOT</code>)、比較(<code>=</code>、<code><></code>、<code>></code>、<code><</code>など)の基本ワードが用意されています。これらのワードは、スタック上の値を取り、演算結果をスタックに代入します。 === 再帰的呼び出し === Forthで再帰的呼び出しを行う場合、ワード <code>recurse</code> を使ってワード自身を表します。 再帰的なワードを定義する方法について説明します。 ==== 階乗 ==== 再帰的な階乗(factorial)を定義します。 :<syntaxhighlight lang=forth> : factorial ( n -- result ) dup 0= if \ スタックのトップの値が0かどうかをチェック drop 1 \ もし0ならば、結果は1として処理を終了 else dup 1 - \ スタックのトップの値から1を引いた値をコピー recurse * \ 再帰的に自身を呼び出して、その結果にスタックのトップの値を掛ける then ; </syntaxhighlight> この定義の内容を説明します。 * ワード <code>factorial</code> は、<code>( n -- result )</code> のスタックエフェクトを持ちます。<code>n</code> は階乗を計算する整数です。 * <code>dup 0=</code>: スタックのトップの値が0かどうかをチェックします。 ** もし0ならば、<code>drop 1</code> が実行されて、スタックのトップの値(<code>n</code>)が削除され、結果として <code>1</code> がスタックにプッシュされます。 * <code>else</code>: もしスタックのトップの値が0でない場合は、次の操作が実行されます。 ** <code>dup 1 -</code>: スタックのトップの値から <code>1</code> を引いた値をスタックにプッシュします。これは <code>n - 1</code> の計算です。 ** <code>recurse *</code>: 自身の <code>factorial</code> を再帰的に呼び出して、結果に対してスタックのトップの値(<code>n</code>)を掛けます。これにより、<code>n! = n * (n-1)!</code> の計算が行われます。 * <code>then</code>: <code>if</code> ブロックの終了を示します。 例えば、<code>5 factorial .</code> を実行すると、<code>5</code> の階乗(<code>5!</code>)が計算されます。 :<syntaxhighlight lang=forth> 5 factorial . </syntaxhighlight> この例では、<code>5!</code> の計算手順は以下の通りです: * <code>5</code> がスタックにプッシュされる。 * <code>factorial</code> が呼び出される。 ** <code>dup 0=</code>: スタックのトップの値が0でないので、次の処理が実行される。 ** <code>dup 1 -</code>: <code>5 - 1</code> が計算されて <code>4</code> がスタックにプッシュされる。 ** <code>recurse *</code>: <code>4</code> の階乗 (<code>4!</code>) が再帰的に計算される。 *** <code>dup 0=</code>: スタックのトップの値が0でないので、次の処理が実行される。 *** <code>dup 1 -</code>: <code>4 - 1</code> が計算されて <code>3</code> がスタックにプッシュされる。 *** <code>recurse *</code>: <code>3</code> の階乗 (<code>3!</code>) が再帰的に計算される。 **** ... ***** 最終的に、<code>1</code> の階乗 (<code>1!</code>) が計算されて <code>1</code> がスタックにプッシュされる。 **** <code>5 *</code>: <code>5</code> と <code>4!</code> の結果を掛けて <code>120</code> がスタックにプッシュされる。 *** <code>5 *</code>: <code>5</code> と <code>120</code> の結果を掛けて <code>120</code> がスタックにプッシュされる。 * <code>. (dot)</code> コンパイラワ ==== 最大公約数(GCD) ==== 再帰的にユークリッドのアルゴリズムを使用して最大公約数(Greatest Common Divisor, GCD)を計算します。 :<syntaxhighlight lang=forth> : gcd ( u1 u2 -- gcd ) dup 0= if \ スタックのトップの値が0かどうかをチェック drop \ スタックのトップの値が0ならば削除して終了 else swap over mod recurse \ スタックのトップと2番目の値を入れ替えて、modを計算し再帰的に呼び出す then ; </syntaxhighlight> このプログラムの動作をステップごとに説明します: # <code>dup 0=</code>: スタックのトップの値(<code>u1</code>)が0かどうかをチェックします。 #* もし0ならば、<code>drop</code> が実行されて、スタックのトップの値(<code>u1</code>)が削除されます。この場合は再帰の終了条件となります。 # <code>else</code>: もしスタックのトップの値(<code>u1</code>)が0でない場合は、次の操作が実行されます。 # <code>swap over mod recurse</code>: #* <code>swap</code>: スタックのトップと2番目の値を入れ替えます。これにより、<code>u1</code> と <code>u2</code> の値が入れ替わります。 #* <code>over</code>: スタックの2番目の値(入れ替え前の <code>u1</code>)をスタックのトップにコピーします。 #* <code>mod</code>: スタックのトップの2つの値を取り出して、<code>u1 % u2</code>(<code>u1</code> を <code>u2</code> で割った余り)を計算し、その結果をスタックにプッシュします。 #* <code>recurse</code>: 自身の <code>gcd</code> を再帰的に呼び出します。これにより、新しい <code>u1</code> と <code>u2</code> の値がスタックに積まれ、再帰的に最大公約数が計算されます。 # <code>then</code>: <code>if</code> ブロックの終了を示します。 例えば、<code>12 18 gcd .</code> を実行すると、以下のように動作します: * <code>12</code> と <code>18</code> がスタックにプッシュされます。 * <code>gcd</code> が呼び出されます。 ** <code>dup 0=</code>: <code>18</code> は0ではないので、次の処理に進みます。 ** <code>swap over mod recurse</code>: <code>18</code> と <code>12</code> が入れ替わり、<code>18 % 12</code> が計算されます(余りは <code>6</code>)。 ** <code>gcd</code> が再帰的に呼び出され、新しい値 <code>12</code> と <code>6</code> がスタックにプッシュされます。 *** <code>dup 0=</code>: <code>6</code> は0ではないので、次の処理に進みます。 *** <code>swap over mod recurse</code>: <code>6</code> と <code>12</code> が入れ替わり、<code>6 % 12</code> が計算されます(余りは <code>6</code>)。 *** <code>gcd</code> が再帰的に呼び出され、新しい値 <code>6</code> と <code>6</code> がスタックにプッシュされます。 **** <code>dup 0=</code>: <code>6</code> は0ではないので、次の処理に進みます。 **** <code>swap over mod recurse</code>: <code>6</code> と <code>6</code> が入れ替わり、<code>6 % 6</code> が計算されます(余りは <code>0</code>)。 **** <code>0=</code>: <code>0</code> が0なので、<code>drop</code> が実行されて、スタックのトップの値 <code>0</code> が削除されます。 * 最終的に、スタックのトップには <code>6</code> が残ります。これが <code>12</code> と <code>18</code> の最大公約数です。 したがって、<code>12 18 gcd .</code> を実行すると、<code>6</code> が表示されます。 === 変数の宣言・代入と参照 === Forthにおける <code>VARIABLE</code> は、変数を定義するためのワードです。Forthでは、変数はメモリ内のアドレスに名前を関連付ける方法で定義されます。 以下は、<code>VARIABLE</code> を使用して変数を定義する方法とその使い方の例です。 ==== <code>VARIABLE</code> の使用方法 ==== <code>VARIABLE</code> は以下のように使用します: :<syntaxhighlight lang=forth> VARIABLE my-var \ my-var という名前の変数を定義する </syntaxhighlight> この行は、名前が <code>my-var</code> の変数を定義します。この変数はメモリ内の特定のアドレスに関連付けられます。 ==== 変数の使用方法 ==== 定義された変数を使用するには、<code>@</code>(fetch)や <code>!</code>(store)などのワードを使います。これらのワードを使って変数の値を取得したり設定したりできます。 - <code>@</code> は、変数の値をスタックにプッシュします。 - <code>!</code> は、スタックのトップの値を変数に代入します。 例えば、次のように変数に値を設定して取得します: :<syntaxhighlight lang=forth> 123 my-var ! \ 変数 my-var に値 123 を代入する my-var @ . \ 変数 my-var の値を表示する </syntaxhighlight> この例では、変数 <code>my-var</code> に <code>123</code> を代入し、その後 <code>@</code> を使って変数の値を取得して表示しています。 ==== 実際の例 ==== 以下は、<code>VARIABLE</code> を使って変数を定義し、値を設定して取得する具体的な例です: :<syntaxhighlight lang=forth> VARIABLE my-var \ my-var という名前の変数を定義する 123 my-var ! \ 変数 my-var に値 123 を代入する my-var @ . \ 変数 my-var の値を表示する </syntaxhighlight> この例では、変数 <code>my-var</code> を定義し、<code>123</code> を代入してその値を表示しています。<code>!</code> で変数に値を設定し、<code>@</code> で変数の値を取得しています。 変数はプログラムでデータを保持する際に便利です。Forthでは、変数の値は直接メモリ上に代入されるため、効率的なデータ管理が可能です。 === 定数の定義と参照 === Forthの <code>CONSTANT</code> は、定数を定義するためのワードです。定数は変更されることのない値であり、プログラムの中で何度も使われる値を簡潔に表現するために使用されます。 ==== <code>CONSTANT</code> の使用方法 ==== <code>CONSTANT</code> は以下のように使用します: :<syntaxhighlight lang=forth> 123 CONSTANT my-const \ my-const という名前の定数を定義する </syntaxhighlight> この行は、名前が <code>my-const</code> の定数を定義し、その値を <code>123</code> に設定します。定数はプログラム中で使用される値を一元管理し、可読性を向上させます。 ==== 定数の使用方法 ==== 定義された定数は、その名前を使ってプログラム中で値を参照することができます。 :<syntaxhighlight lang=forth> my-const . \ 定数 my-const の値を表示する </syntaxhighlight> この例では、定数 <code>my-const</code> の値が表示されます。 ==== 実際の例 ==== 以下は、<code>CONSTANT</code> を使って定数を定義し、その定数を使用する具体的な例です: :<syntaxhighlight lang=forth> 123 CONSTANT my-const \ my-const という名前の定数を定義する my-const . \ 定数 my-const の値を表示する </syntaxhighlight> この例では、定数 <code>my-const</code> を <code>123</code> に設定し、その後定数の値を表示しています。 定数はプログラム中で共通の値を使い回す際に便利です。Forthの定数は一度定義されると値が変更されることはなく、プログラム全体で一貫性のある値を提供します。 === 基数 === Forthの <code>BASE</code> は、数値の基数(n進数のn)を設定するための変数です。Forthでは、数値の表現において基数を変更することができます。通常、Forthはデフォルトで10進数を使用しますが、<code>BASE</code> を変更することで他の基数(2進数、16進数など)で数値を表現することが可能です。 ==== <code>BASE</code> の使用方法 ==== <code>BASE</code> は以下のように使用します: :<syntaxhighlight lang=forth> 16 BASE ! \ 基数を16進数に設定する </syntaxhighlight> この行は、<code>BASE</code> の値を <code>16</code> に設定しています。これにより、その後の数値の表示や入力が16進数で行われるようになります。 ==== 基数の変更と数値の表現 ==== <code>BASE</code> を変更することで、その後の数値リテラルの表現が変わります。例えば、<code>BASE</code> を16進数に設定した場合、数値リテラルは16進数として解釈されます。 :<syntaxhighlight lang=forth> 16 BASE ! \ 基数を16進数に設定する FF . \ 16進数の255を表示する </syntaxhighlight> この例では、<code>BASE</code> を16進数に設定してから、<code>FF</code> を表示すると、16進数の <code>FF</code> (10進数の <code>255</code>)が表示されます。 ==== デフォルトの基数と再設定 ==== Forthのデフォルトの基数は10進数です。基数を変更した後は、必要に応じて再度基数を10進数に戻すことができます。 :<syntaxhighlight lang=forth> DECIMAL BASE ! \ 基数を10進数に戻す </syntaxhighlight> この行は、<code>BASE</code> を10進数に再設定しています。これにより、数値リテラルは再び10進数として解釈されるようになります。 よくある間違い: :<syntaxhighlight lang=forth> 10 BASE ! \ 基数を16進数から10進数に戻す??? </syntaxhighlight> : として基数を10に戻そうとするミスがあります。 : コードの 10 は16進数として解釈されるので基数は16のままです。 ==== 注意点 ==== <code>BASE</code> を変更すると、数値の解釈や表示が変わるため、基数の変更後には適切な基数に戻すことが重要です。また、<code>BASE</code> の値は変数として扱われるため、必要に応じて保存や復元することができます。 基数を変更することで、特定の基数で数値を扱うプログラムを簡単に記述することができます。 === イミディエイトワード === イミディエイトワード(immediate word)は、Forthプログラミング言語において特定の動作を持つワードの一種です。イミディエイトワードは、通常のワードとは異なり、コンパイル時ではなく実行時に直ちに処理されます。 以下は、イミディエイトワードの特性について詳しく説明します: # 実行時処理: #* イミディエイトワードは、定義された時点ではコンパイルされず、実行時に直ちに解釈および実行されます。 #* 通常のワード(コンパイルワード)は、単なるコンパイル時にスタックに動作を積むだけであり、後で実行されますが、イミディエイトワードは定義された時点ですぐに実行されます。 # 定義方法: #* イミディエイトワードは、<code>IMMEDIATE</code> を使用して定義されます。 #* これにより、そのワードが定義された直後に実行されるようにマークされます。 # 使用例: #* 例えば、<code>."</code>(ダブルクォートピリオド)はイミディエイトワードです。これは、コンパイル時ではなく実行時に文字列を表示します。 #* <code>: greeting ." Hello, world!" ;</code> という定義では、<code>. "</code>Hello, world!"<code> はコンパイル時に実行されず、</code>greeting` を実行したときに実行されます。 # 動的な挙動: #* イミディエイトワードは、通常のワードとは異なり、実行時の環境やスタックの状態に応じて動的に振る舞います。 #* これにより、実行時に動的なテキストや操作を生成するために使用することができます。 イミディエイトワードは、Forthの柔軟性と強力な動的な特性を提供します。コンパイル時に制御構造や動作を決定するだけでなく、実行時に動的な挙動を持つことができます。 {{コラム|Forthの文法|2=Forthのプログラムは、空白文字で区切られた「ワード」の並びで構成されます。ワードには、数値リテラル、制御構造、演算子、そして他のワードを呼び出す構文などがあります。Forthには高水準の構文がなく、基本的な構文要素は非常にシンプルです。 例えば、<code>2 3 +</code> と入力すると、2と3がスタックにプッシュされ、最後の<code>+</code>がスタック上の2つの数値を加算します。この結果である5がスタックに残ります。つまり、Forthではプログラムの実行とデータ操作が、ワードの解釈とスタック操作によって行われるのです。 Forthは、基本的に行指向の言語です。プログラムは複数行に分割できますが、改行の前後で文が継続する場合は、スペースを入れる必要があります。このため、適切なインデントを使ってプログラムの構造をわかりやすくすることが重要です。 }} == データ構造とメモリ管理 == Forthは組み込みシステムなどのリソース制約の厳しい用途を想定して設計されているため、メモリの効率的な利用が重視されています。この章では、Forthにおけるデータ構造とメモリ管理の方法を説明します。 === コントロールフロースタック === コントロールフロースタックとは、Forthのプログラムの制御フローを管理するために使用される仮想的なスタックです。 その主な役割は以下の通りです: # 制御フロー命令の対応関係の管理 #* 制御フロー命令(<code>IF</code>, <code>THEN</code>, <code>ELSE</code>, <code>BEGIN</code>, <code>WHILE</code>, <code>REPEAT</code> など)の対応関係を管理します。 #* 開始と終了の命令が適切に対応していることを確認します。 # 制御フロー中のデータスタック操作の制約 #* 制御フロー中のデータスタックの使用方法に制約を課します。 #* 制御フロー命令の入れ子関係に応じて、適切なデータスタックの状態が維持されるようにします。 コントロールフロースタックは物理的に実装されていなくても良いと仕様で定められています。 代わりに、システムはコンパイル時や実行時にこのスタックの挙動を模倣する方法を採ることができます。 つまり、コントロールフロースタックはForthの制御構造の妥当性を保証する上で重要な概念であり、プログラムの正しい実行を支えているのです。 通常のプログラミングでコントロールフロースタックを強く意識することはありませんが、制御構造を自らワードとして定義しようとする場合、コントロールフロースタックの振る舞いに注意する必要があります。 === リターンスタック === Forthには、データスタックとは別に、リターンスタックと呼ばれる重要なスタックが存在します。リターンスタックの主な役割は以下の通りです: # 関数呼び出しとリターン #* 関数を呼び出すとき、その関数の呼び出し元の命令アドレスがリターンスタックにプッシュされます。 #* 関数から抜け出すときは、リターンスタックからアドレスがポップされ、その場所に制御が戻されます。 #* これによって、関数呼び出しの際の制御の移動を管理することができます。 # 一時的データ保管 #* リターンスタックは、データを一時的に保管する場所としても使えます。 #* データスタックからデータを>Rでリターンスタックにプッシュし、後でR>で取り出すことができます。 #* これにより、データスタックの状態を一時的に変更せずに、値を保持しておくことができます。 リターンスタックの使用には注意点があります: * ワード内やループ内では、<code>>R</code>と <code>R></code>の回数が一致している必要があります。 * リターンスタックの値は、同じブロック内でのみ参照・取り出しできます。 * ループの脱出時やDO-ループ内からは、リターンスタックの値を取り出せません。 つまり、リターンスタックは制御フローの管理と一時的なデータ保管に使われますが、その使い方には一定の制限があるため、注意深く扱う必要があります。 プログラムの複雑さが増すと、リターンスタックの状態を適切に管理することが難しくなるため、できるだけ単純な使い方に留めるのが賢明です。 ; <code>>R ( x -- ) ( R: -- x )</code> : データスタックから値をポップしリターンスタックにプッシュする ; <code>R> ( R: -- x ) ( x -- )</code> : リターンスタックから値をポップしデータスタックにプッシュする ; <code>R@ ( -- x ) ( R: x -- x )</code> : リターンスタックのスタックトップをデータスタックにコピーする ; <code>2>R ( x1 x2 -- ) ( R: -- x1 x2 )</code> ; <code>2R> ( -- x1 x2 ) ( R: x1 x2 -- )</code> ; <code>2R@ ( -- x1 x2 ) ( R: x1 x2 -- x1 x2 )</code> スタックエフェクトに <code>R:</code> という新しい記号が出てきましたが、これはリターンスタックへの操作をしまします。このためリターンスタックはRスタックとも呼ばれています。 === 変数とアドレス指定 === Forthには、グローバル変数やローカル変数の概念がありません。代わりに、値を格納するためのメモリ領域を確保し、そのアドレスを使ってアクセスします。<code>VARIABLE</code>ワードを使うと、新しい変数領域が確保され、その開始アドレスがスタックに置かれます。 :<syntaxhighlight lang=forth> VARIABLE COUNTER \ カウンター変数を定義 COUNTER @ . \ 変数の値を表示(初期値は0) 1 COUNTER +! \ 変数にインクリメント </syntaxhighlight> 変数の値を取り出すには<code>@</code>(フェッチ)、格納するには<code>!</code>(ストア)を使います。<code>+!</code>のように算術演算と<code>!</code>を組み合わせたワードもあります。 Forthではアドレスを直接スタックに置いて操作することもできます。<code>HERE</code>はディクショナリの次の空きアドレスを取得し、<code>ALLOT</code>はディクショナリ領域を確保します。 ==== データスペース(Data Space) ==== Forthのデータスペースとは、メモリ内の連続した領域を指し、データやワードの定義などが格納される場所です。Forthでは、データスペースは主に '''ヒープ(heap)''' と '''ディクショナリ(dictionary)''' の2つの領域に分かれています。 * '''ヒープ''': データスタックやワードの実行時に使用される一時的な領域です。ここでは、動的に割り当てられたデータや一時的な計算に使用されるデータが保持されます。 * '''ディクショナリ''': ワード(単語)の定義やその実装が格納される領域です。Forthのディクショナリはワードの名前とそれに対応する実行可能なコードへのポインタを保持します。 ==== <code>HERE</code> ワード ==== <code>HERE</code> はForthで使用される特定のワードであり、現在のデータスペース内の「ここ(here)」の位置を示します。具体的には、ディクショナリ内の次の空き領域の先頭アドレスを指します。 <code>HERE</code> を使用すると、新しいワードやデータをデータスペースに格納する際に位置を特定することができます。主にワードの定義やデータの動的な確保に使用されます。 例えば、新しい変数や配列を定義する場合、<code>HERE</code> の値を参照して適切なメモリ領域を割り当て、その後 <code>HERE</code> を更新します。 具体的な使用例を示します: :<syntaxhighlight lang=forth> HERE . \ 現在のHEREの値を表示(ディクショナリ内の次の空き領域のアドレス) 10 ALLOT \ 10バイトの領域を確保 HERE . \ 確保後のHEREの値を表示 </syntaxhighlight> この例では、まず <code>HERE</code> の値が表示され、次に <code>10 ALLOT</code> によって10バイトの領域が確保されます。その後、再度 <code>HERE</code> の値が表示され、確保された領域の終端アドレスが示されます。 <code>HERE</code> を適切に使用することで、動的なメモリ管理やデータスペースの操作が行えます。 ==== HEREを利用したデータスペースの活用例 ==== ; sieve.fr :<syntaxhighlight lang=forth> : prime? ( n -- ? ) here + c@ 0= ; : composite! ( n -- ) here + 1 swap c! ; : sieve ( n -- ) here over erase 2 begin 2dup dup * > while dup prime? if 2dup dup * do i composite! dup +loop then 1+ repeat drop ." Primes: " 2 do i prime? if i . then loop ; 100 sieve / Primes: 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 </syntaxhighlight> このForthのコードは、エラトステネスの篩(Sieve of Eratosthenes)アルゴリズムを実装しています。このアルゴリズムは、与えられた数 <code>n</code> 以下のすべての素数を見つけるために使用されます。以下では、与えられたコードの各部分を詳しく説明します。 ; <code>prime?</code> ワード :<syntaxhighlight lang=forth> : prime? ( n -- ? ) here + c@ 0= ; </syntaxhighlight> :; <code>( n -- ? )</code>: スタックから整数 <code>n</code> を取り出し、その数が素数であるかどうかの真偽値 <code>?</code> をスタックに積む。 :* <code>here + c@</code>: <code>here</code> は現在のデータスペースの末尾を示し、それに <code>+</code> を使ってワードの<code>n</code>番目のアドレスを取得する。そして <code>c@</code> はそのアドレスの内容(1バイトの文字)を取得する。 :* <code>0=</code>: 取得したバイトが0かどうかをチェックし、0ならば真(素数)を返す。 ; <code>composite!</code> ワード :<syntaxhighlight lang=forth> : composite! ( n -- ) here + 1 swap c! ; </syntaxhighlight> :; <code>( n -- )</code>: スタックから整数 <code>n</code> を取り出す。 :* <code>here + 1 swap c!</code>: <code>here</code> から<code>n</code>のアドレスにを1を1バイトで書き込む。 ; <code>sieve</code> ワード :<syntaxhighlight lang=forth> : sieve ( n -- ) here over erase 2 begin 2dup dup * > while dup prime? if 2dup dup * do i composite! dup +loop then 1+ repeat drop ." Primes: " 2 do i prime? if i . then loop ; </syntaxhighlight> :; <code>( n -- )</code>: スタックから整数 <code>n</code> を取り出す。 :* <code>here over erase</code>: 現在のデータスペース(<code>here</code> から先)を <code>n</code> バイト分消去する。 :* <code>2 begin ... repeat</code>: メインのループ。2から始めて、以下の条件に基づいて処理を繰り返す。 :** <code>2dup dup * ></code>: 現在の値を2つコピーし、2つを掛けた値が <code>n</code> を超えるまで続ける。 :** <code>dup prime? if ... then</code>: 現在の値が素数かどうかをチェックし、素数ならば以下を実行。 :*** <code>2dup dup * do ... dup +loop</code>: 素数の場合、その数の倍数を篩い落とす。内側のループで、その数の倍数を全て <code>composite!</code> でマークする。 :** <code>1+</code>: 現在の数値を1増やす。 :* <code>drop</code>: 最後の数値を削除する。 :* <code>." Primes: " 2 do i prime? if i . then loop</code>: 素数を表示するループ。2から始まり、<code>n</code> まで続ける。各数値が素数ならば表示する。 ; 実行 :<syntaxhighlight lang=forth> 100 sieve </syntaxhighlight> :100以下の素数を見つけるために <code>sieve</code> ワードが実行されます。 === CREATEを使った変数と配列の定義 === Forthの <code>CREATE</code> は、新しい変数や配列をディクショナリに定義するためのワードです。<code>CREATE</code> を使うことで、任意の名前で参照可能なデータ領域を確保し、その領域に対する操作を定義することができます。 以下に、<code>CREATE</code> ワードの基本的な構文と使用方法を示します。 ==== 構文 ==== :<syntaxhighlight lang=forth> CREATE name </syntaxhighlight> * <code>name</code>: 定義する変数や配列の名前を指定します。 ==== 使用方法 ==== # 変数の定義 #:<code>CREATE</code> を使って変数を定義する場合、単に変数の初期値を指定します。 #:<syntaxhighlight lang=forth> CREATE my-var 42 , </syntaxhighlight> #:上記の例では、<code>my-var</code> という名前の変数が定義され、初期値として <code>42</code> が設定されています。<code>,</code> はスタックのトップの値を <code>my-var</code> の定義領域に格納するワードです。 # 配列の定義 #: <code>CREATE</code> を使って配列を定義する場合、配列の要素数や初期値を指定します。 #:<syntaxhighlight lang=forth> CREATE my-array 5 ALLOT </syntaxhighlight> #: 上記の例では、<code>my-array</code> という名前の配列が定義され、5つの要素分の領域が確保されます。各要素には初期値が与えられていないため、初期化が必要な場合は別途行います。 ==== 使用例 ==== このForthのコードは、<code>CREATE</code> を使って変数と配列を定義し、それらに値を格納・表示する例です。 ; 変数の定義と使用 :<syntaxhighlight lang=forth> CREATE x \ 変数 x を定義 100 x ! \ x に 100 を代入 x @ . CR \ x の値を表示 </syntaxhighlight> * <code>CREATE x</code>: <code>x</code> という名前の変数を定義します。<code>CREATE</code> はディクショナリに新しいワードを登録しますが、データスペース自体は確保しません。 * <code>100 x !</code>: <code>x</code> のデータフィールドに <code>100</code> を格納します。 * <code>x @ . CR</code>: <code>x</code> のデータフィールドから値を読み取って表示します。<code>CR</code> は改行を出力します。 ; 配列の定義と使用 :<syntaxhighlight lang=forth> CREATE MY-ARY 100 ALLOT \ 100セルの配列を作成 42 MY-ARY 10 + ! \ 11番目の要素に42を代入 MY-ARY 10 + @ . \ 11番目の要素の値を表示 </syntaxhighlight> * <code>CREATE MY-ARY 100 ALLOT</code>: <code>MY-ARY</code> という名前の配列を定義し、100セル分のデータスペースを確保します。 * <code>42 MY-ARY 10 + !</code>: <code>MY-ARY</code> の11番目の要素(0から始まるインデックスなので、10を足します)に <code>42</code> を代入します。 * <code>MY-ARY 10 + @ .</code>: <code>MY-ARY</code> の11番目の要素の値を読み取って表示します。 この例では、<code>CREATE</code> を使って変数 <code>x</code> と配列 <code>MY-ARY</code> を定義し、それぞれに値を設定しています。<code>x</code> は単一の値を格納する変数であり、<code>MY-ARY</code> は複数の要素を持つ配列です。<code>!</code> を使ってデータを代入し、<code>@</code> を使ってデータを取得しています。 Forthの特性として、変数や配列の定義はディクショナリに登録されるため、名前に対して対応するデータ領域へのアクセスが可能となります。これにより、動的なデータ構造を効率的に管理することができます。 === アライメント === Forthの <code>ALIGN</code> ワードは、データ領域のアラインメントを行うためのワードです。アラインメントとは、データがメモリ上で配置される位置を調整することであり、特定のアドレス境界にデータを配置することを指します。 アラインメントの必要性は、プロセッサアーキテクチャに依存しますが、多くのアーキテクチャでは特定のデータ型(例:4バイト整数など)は特定の境界に配置される必要があります。アラインメントが正しく行われないと、メモリアクセスの効率が低下したり、アドレスエラーなどの例外が発生し処理を中断する可能性があります。 ; 構文 :<syntaxhighlight lang=forth> ALIGN </syntaxhighlight> ; 動作 : <code>ALIGN</code> ワードは、データスペースポインタ (<code>HERE</code>) をアラインメント条件に従って調整します。具体的には、通常は2バイトまたは4バイトの境界に <code>HERE</code> を調整します。これにより、次に確保されるデータ領域が適切な境界に配置されます。 ; 使用例 :<syntaxhighlight lang=forth> HERE ALIGN </syntaxhighlight> : 上記の例では、<code>HERE</code> の値をアラインメントされた位置に調整します。これにより、次に確保されるデータ領域が適切な境界に配置されます。 :<syntaxhighlight lang=forth> CREATE my-var ALIGN 2 ALLOT </syntaxhighlight> : この例では、<code>my-var</code> という名前の変数を定義していますが、そのデータ領域が2バイト境界にアラインメントされて確保されます。これにより、<code>my-var</code> のデータ領域は適切な境界に配置され、メモリアクセスの効率が向上します。 <code>ALIGN</code> ワードは、特定のアーキテクチャで必要なメモリアラインメントを確保するために重要な役割を果たします。メモリアクセスの効率を最大化するために、適切なアラインメントが常に考慮されるべきです。 == 入出力と組み込みワード == Forthには標準の入出力ワードがあり、コンソールやファイルからの入出力を行えます。また、様々な組み込みワードが用意されており、これらを活用することでForthの機能を拡張できます。 === 標準入出力 === Forthには、キーボードからの文字入力や、コンソールへの文字出力を行うためのワードが用意されています。 :<syntaxhighlight lang=forth> KEY \ キーボードから1文字読み込む EMIT \ スタック上の値(文字コード)を出力する ." \ 文字列を直接出力する </syntaxhighlight> <code>KEY</code>はキーボード入力を待ち、押された文字のASCIIコードをスタックに置きます。<code>EMIT</code>は逆に、スタック上の値を文字コードとして解釈し、コンソールに出力します。<code>." Hello"</code>のように、<code>."</code> の後に文字列を続けると、その文字列がコンソール出力されます。 数値入出力には、<code>?</code>、<code>U.</code>、<code>U.R</code>などのワードが使えます。<code>?</code>は数値を入力受け付け、<code>U.</code>は符号なし数値を、<code>U.R</code>は数値を指定した基数(2進数、16進数など)で出力します。 === ファイルアクセス === ファイル入出力には、様々なワードが用意されています。<code>OPEN-FILE</code>でファイルを開き、<code>READ-FILE</code>や<code>WRITE-FILE</code>でデータの読み書きができます。 :<syntaxhighlight lang=forth> S" data.txt" R/O OPEN-FILE THROW VALUE HANDLE \ ファイルを読み取りモードで開く HANDLE READ-FILE ABORT" READ ERROR" \ ファイルを読み込む HANDLE CLOSE-FILE THROW \ ファイルを閉じる </syntaxhighlight> ファイル名は、<code>S"</code> で文字列をスタックに置いた後、<code>R/O</code>(読み取り専用)や<code>W/O</code>(書き込み専用)といったモードを指定してファイルを開きます。<code>THROW</code>はエラーがあれば例外を発生させます。 <code>READ-FILE</code>や<code>WRITE-FILE</code>では、バッファ領域のアドレスと読み書きするバイト数をスタックに置く必要があります。 === 組み込みワードの利用 === Forthには、数学関数や論理演算、メモリ操作など、様々な組み込みワードが用意されています。必要に応じてこれらのワードを活用することで、プログラムにさまざまな機能を付加できます。 :<syntaxhighlight lang=forth> 2 3 MAX . \ 最大値(3)を出力 S" HELLO" SWAP DROP \ スタック操作サンプル HEX 1F20 4 DUMP \ メモリダンプ </syntaxhighlight> <code>MAX</code>は2つの数値の最大値を、<code>SWAP</code>は2つの値の順序を入れ替え、<code>DROP</code>は最上位の値を捨てます。<code>DUMP</code>は指定したアドレスからのメモリ内容をダンプ出力します。 組み込みワードには、浮動小数点演算、文字列処理、マルチタスク、IPCなど、様々な分野のものがあります。また、必要に応じてワードを自作したり、外部ライブラリからリンクしたりできます。Forthはコンパクトなシステムながら、組み込みワードの充実により高い機能性を発揮します。 == アプリケーション開発 == Forthは小規模な組み込みシステムから大規模なアプリケーションまで、幅広い用途に使用できる言語です。この章では、Forthにおけるアプリケーション開発の手法と、実例について解説します。 === モジュール化とワード管理 === Forthはワードをベースとしたモジュール性の高いプログラミングができます。大きなアプリケーションを開発する際は、適切にモジュール分割してワードを設計・管理することが重要です。 Forthにはネームスペースの概念がありません。そのため、ワード名の重複を避けるためには、プレフィックスなどの命名規則を定めることが一般的です。たとえば<code>STRING-LENGTH</code>のように、ワードの役割がわかるよう名前を付けます。 また、ワードをまとめてファイルに保存し、必要に応じて読み込む方法があります。Forthの多くの処理系は、ワードの定義をソースファイルに保存したり、メモリイメージを永続化したりできます。 :<syntaxhighlight lang=forth> MARKER MODULE>STRING : STRING-LENGTH \ 文字列の長さを求める ... ; : STRING-REVERSE \ 文字列を反転する ... ; STRING-REVERSESTRING-LENGTH +MODULE </syntaxhighlight> 作成したワードは<code>MODULE>NAME</code>でモジュール名を付け、<code>+MODULE</code>でモジュールを完成させることができます。他のソースから<code>USE MODULE>NAME</code>とすれば、そのモジュールのワードが使用可能になります。 大規模なシステムでは、このようなソースレベルの分割に加え、オーバーレイ、仮想メモリ、マルチタスク機能を活用することで、メモリの効率的な使用が可能です。 === グラフィックス処理 === Forthでもグラフィック処理が可能ですが、組み込みの機能は限られています。ほとんどの処理はユーザ定義ワードとして実装する必要があります。 ビットマップ画像の表示や、ウィンドウ、マウスカーソルなどの基本的なGUIの作成はある程度可能です。高度な3Dグラフィックスなどを実現するには、外部ライブラリを利用する必要があります。 :<syntaxhighlight lang=forth> NEED FRAMEBUFFER \ フレームバッファへのアクセスモジュール : DRAW-LINE ( x1 y1 x2 y2 -- ) \ ブレザンハムのアルゴリズムでライン描画 ... ; : DRAW-RECT ( x y w h -- ) 2SWAP 2>R 2R> \ (x y w h -- x y x+w y+h) DRAW-LINE 2>R 2R> DRAW-LINE 2SWAP DRAW-LINE 2SWAP DRAW-LINE ; FRAMEBUFFER-INIT \ グラフィックスサブシステムの初期化 100 100 300 200 DRAW-RECT \ 長方形を描画 </syntaxhighlight> 上記では、フレームバッファの制御関数がロードされた前提で、<code>DRAW-LINE</code>を使って<code>DRAW-RECT</code>(長方形描画)を実装しています。スタックを活用して座標値を受け渡し、基本的な幾何図形を描画しています。 Forthはグラフィックスパイプラインなどの高度な機能を組み込んでいませんが、スタックベースの処理により、低レベルのデバイスアクセスが可能です。組み込みシステムのディスプレイやLED制御など、グラフィックス関連の処理に適しています。 === システムプログラミング === Forthの本質的な特性として、システムプログラミングに適していることがあげられます。小規模でコンパクト、高速動作、低レベルなメモリアクセスが可能というメリットがあります。 OSカーネル、デバイスドライバ、BIOS、ブートローダなどの開発にForthは広く使われてきました。組み込みシステムでは、センサーやI/Oデバイスの制御に最適です。スタック指向のモデルにより、レジスタレベルの処理が直接かけるのも特徴です。 例えば、Forthを使ってブートローダを実装する場合には、次のようなプログラムになります。 :<syntaxhighlight lang=forth> HEX 07C0 INPORT DROP \ DOSデータ領域クリア 0800 0 20 MOVE \ リセットベクタ設定 KERNEL.IMG LOAD \ カーネル読み込み A000 OUTPORT \ VGAモードへ切り替え 1000 JMP \ カーネル実行 ... \ BIOSブート用の簡単なForth読み込みコード :KERNEL.IMG LOAD CORE SWAP CPU KERNEL ; </syntaxhighlight> BIOSなどの低レベル機能を呼び出してブートローダを構築する処理が、Forthの文法でコンパクトに記述できる様子がわかります。 また、Forth自身が小規模で可搬性が高いため、Forth処理系そのものもForthで書かれた簡単なコアを、ホストOSやアーキテクチャに合わせてセルフホスト (移植) する手法が一般的です。これは、アプリケーションと実行環境を一体化して開発できる利点があります。 == 高度なトピック == ここまでForthの基本的な構文と概念、データ構造、アプリケーション開発の実例などを解説してきました。この章では、Forthの高度な利用方法としてパフォーマンス最適化、マルチスレッド・マルチタスク、メタプログラミングについて取り上げます。 === 最適化とパフォーマンス === Forthはコンパクトで高速な言語ですが、さらなる最適化の余地があります。ワードの定義を工夫したり、ネイティブコードコンパイラを使ったりすることで、パフォーマンスを向上できます。 ワード定義の最適化では、冗長な演算を排除したり、インラインコーディングの手法を用いたりします。例えば、次のようなワード定義があるとします。 :<syntaxhighlight lang=forth> : MAX2 ( n1 n2 -- max ) 2DUP > IF SWAP DROP ELSE NIP THEN ; </syntaxhighlight> この<code>MAX2</code>は一時的に2つの値を複製(<code>2DUP</code>)し、<code>IF</code>..<code>ELSE</code>..<code>THEN</code>の条件分岐で最大値を選びます。しかし、この一時複製が無駄な演算となっています。次のように書くとコードがシンプルになります。 :<syntaxhighlight lang=forth> : MAX2 ( n1 n2 -- max ) OVER OVER > IF SWAP THEN ; </syntaxhighlight> ワードの最適化には一般的なテクニックがあり、Forthのコンパイラ作者から提案されているものを参考にするとよいでしょう。 また、Forthにはネイティブコードコンパイラと呼ばれるもので、ワードの実行コードをネイティブマシン語に変換できるものがあります。Forthの対話的な実行環境は便利ですが、ネイティブコードの方が高速に動作します。こうした最適化手法を使い分けることで、Forthのパフォーマンスを飛躍的に向上できます。 === マルチスレッドとマルチタスク === Forthには並列実行の機構が組み込まれていないため、マルチスレッドやマルチタスク処理を実現するにはユーザ定義の実装が必要です。しかし、Forthの言語特性を活かせばきわめてコンパクトな並列処理ができます。 マルチスレッドでは、スタックを分離し、スレッド毎にスタックのコピーを持つ手法が一般的です。スレッドの切り替えはスタックのコンテキストスイッチで実現できます。また、Forthのデータストアクセス方式を応用すれば、IPC(プロセス間通信)の仕組みを作ることもできます。 :<syntaxhighlight lang=forth> : NEW-TASK ( -- ) HERE CURRENT-STACK >R CREATE-STACK SWAP [: DO-SOME-WORK ;] ( compile: word behavior ) R> SET-CURRENT ; </syntaxhighlight> この例では、新しいタスクを作成するワード<code>NEW-TASK</code>を定義しています。<code>CREATE-STACK</code>でスタックを新しく割り当て、<code>DO-SOME-WORK</code>のようなワード定義をタスクとして登録します。実行時にはスケジューラによってこれらのタスクが実行されます。 マルチタスク機構を実装する例は多数あり、スレッド単位でデータを扱う方式、メッセージキューによる方式、それぞれ長所と短所があります。並列処理にはデッドロックなどの問題点もありますが、Forthではコンパクトでシンプルなコード記述が可能です。 === メタプログラミング === Forthにはプログラムを生成・変更するメタプログラミングの機能があり、コードを自動生成したり、プログラムを動的に変更したりできます。この機能は、Forthをドメイン固有言語(DSL)の開発などに適用できることを意味しています。 メタプログラミングには、コンパイル時に評価される構文<code>[...]</code>と実行時構文<code>EVAL</code>があります。どちらもプログラムをデータとして扱えるため、動的にプログラムを生成・変更できます。 :<syntaxhighlight lang=forth> : HILBERT-CURVE ( n -- ) 0 ?DO [: 2DUP RECURSE >R >R 1 HCURVE R> R> RECURSE 3 HCURVE ;] POSTPONE LITERAL POSTPONE HCURVE LOOP ; </syntaxhighlight> この例では、ヒルベルト曲線を描画するコードを動的に生成しています。<code>POSTPONE</code>はワードのコンパイルを遅延させ、<code>[: ... ;]</code>の構文はその間のテキストを実行可能なコードとしてコンパイルします。この手法により、 Hilbertカーブの次元(<code>n</code>)に応じて、その描画コードを生成しています。 Forthのメタプログラミング機能は、高度な用途に役立ちます。例えば、ユーザインターフェースビルダー、コードジェネレーター、プログラムシンセサイザなどでその力を発揮できます。Forthの柔軟性を最大限に活かせる側面といえるでしょう。 == サンプルプログラムとプロジェクト == Forthの理解を深めるには、実際にコードを書いて動作を確認することが大切です。この章では、様々なサンプルコードを紹介するとともに、実践的なForthプロジェクトの例を示します。 === 様々なサンプルコード === 以下はForthの基本的な機能を示すサンプルコード集です。 ; 再帰によるフィボナッチ数列 :<syntaxhighlight lang=forth> : FIB ( n -- fib-n ) DUP 0= IF DROP 1 EXIT THEN DUP 1 = IF DROP 1 EXIT THEN DUP 1- RECURSE SWAP 2 - RECURSE + ; </syntaxhighlight> ; 文字列操作 :<syntaxhighlight lang=forth> : UPPERCASE ( addr n -- addr n ) OVER + SWAP ?DO I C@ [CHAR] a [CHAR] z 1+ WITHIN IF [CHAR] A [CHAR] a - + THEN I C! LOOP ; : REVERSE-WORDS ( addr n -- ) [CHAR] \ SKIP SPACES OVER >R BEGIN OVER C@ [CHAR] \ <> WHILE [CHAR] \ PARSE DUP >R REVERSE R> OVER C! CHAR+ REPEAT R> DROP 2DROP ; </syntaxhighlight> ; ベクトル・行列計算 :<syntaxhighlight lang=forth> REQUIRE DOUBLE \ 倍精度浮動小数点サポート : VZEROS ( n -- addr ) \ n要素のゼロベクトルを生成 CREATE HERE 0 SWAP 8 * DUP ALLOT FILL ; : MZEROS ( rows cols -- addr ) \ rows x cols の零行列を生成 SWAP VZEROS SWAP 0 ?DO OVER VZEROS COLS + LOOP ; </syntaxhighlight> ; 簡易グラフィックス :<syntaxhighlight lang=forth> VARIABLE FRAMEBUF \ フレームバッファアドレス : PIXEL ( x y color -- ) \ 1ピクセル書き込み FRAMEBUF @ >R 2 * R@ + 3 * RP@ C!+ RP@ C!+ RDROP ; : LINE ( x1 y1 x2 y2 c -- ) \ ラインの描画 >R 2SWAP R> 2>R 2R@ PIXEL 2R> PIXELLINE ; </syntaxhighlight> これらの例は、スタックを使った処理の流れ、ユーザ定義ワードの作成、再帰など、Forthのプログラミング手法の基本を示しています。コンパクトながらも表現力の高さがわかるでしょう。 === 実践的なプロジェクト例 === 次に、もう少し大がかりなForthプロジェクトの例を紹介します。 ; Forth Chip-8 エミュレーター Chip-8はレトロなゲームコンソールで、Forthでその命令セットをエミュレートするプロジェクトです。グラフィックス、入力処理、命令デコーダなどを実装します。 ; カーネルとブートローダ ForthでOSカーネルの基本部分を実装し、ブートローダと合わせてシステムを構築するプロジェクト。メモリ管理、タスク管理、ファイルシステム、ドライバなどの機能が実装できます。 ; Webサーバー ForthでHTTPリクエストを処理するWebサーバーを作成。ソケット通信、文字列処理、ファイル入出力などの機能が必要になります。追加してWebアプリケーションフレームワークなども作れます。 ; オープンソースForthプロセッサ Forthを使ってCPU命令セットを記述し、ゲートレベルまでFPGAに実装するプロセッサの設計プロジェクト。ハードウェア記述言語との連携が重要です。 このようなプロジェクトを通して、Forthの実用性とシステムプログラミングでの可能性を体験できます。Forthという言語自体を使って、OSやハードウェアコンポーネントを実装できるのが最大の特徴です。いずれのプロジェクトも一般的な規模になると、モジュール分割やワード管理、ツール活用などの工夫が必要になります。 == 参考資料 == Forthについてより深く学ぶには、書籍や公開されているオンラインリソースを参照するのが有効な方法です。また、活発なForthコミュニティに参加することで、他の開発者からの助言を得られます。 === 関連書籍の紹介 === Forthの入門書から応用、さらには処理系の実装に至るまで、多くの優れた書籍が出版されています。 * 「Forth入門」レオ・ブロディ (ISBN:978-4875930297 工学社) ** Forth言語の基本から、アプリケーション開発までをカバーした長年の定番書。 * 「Thinking Forth」Leo Brodie (Punchy Publishing) / Forth思考 ―問題解決のための言語と哲学― レオ・ブロディー著 ** Forth哲学に重きを置いた名著。Forthの考え方を深く解説。 * 「Forth Programmer's Handbook」(ISBN:978-1419675492 Forth Inc.) ** ANS Forthの規格書で、WordSetの詳細が書かれている。 これらの書籍を手に入れられれば、Forthの理解が格段に進むはずです。電子書籍としても出版されているものがあります。 === オンラインリソース === {{Wikipedia}} インターネット上にも無料で参照できるForth関連の豊富なリソースが存在します。 * Forth Interest Group ( https://www.forth.org/ ) ** Forthに関する書籍、記事、リソースなどが集まるポータル。 * Forth-Standard-Committee 公式サイト( https://forth-standard.org/ ) Webサイト、ソースコード、ニュースレターなど、さまざまな形でリソースが公開されているので、活用していきたいものです。 === Forthコミュニティ === 長年にわたりForth言語を支える活発なコミュニティが存在し、開発者同士が支え合う環境があります。 * Newsgroups: comp.lang.forth ** ディスカッションの場となるForth専用のニュースグループ。 * 地域 Forth グループ ** ヨーロッパ、アメリカ、アジアなどの地域Forthグループ。 オンラインフォーラムやメーリングリスト、対面の勉強会など、様々な形でForth開発者同士が交流を深めています。初心者でもこうしたコミュニティに参加することで、サポートを受けられます。Forthの小さな世界ですが、地域を越えて開発が行われているのが特徴です。 Forthの参考文献やオンラインリソース、そしてコミュニティを上手く活用することで、この独特な言語の理解が一層深まるはずです。 == 脚註 == <references /> [[Category:Forth|*]] [[Category:プログラミング言語]] mxe7wm666z7ivmx106pglina642nbhr 246671 246669 2024-04-14T01:09:02Z Ef3 694 /*データ型*/ Forthには明示的なデータ型宣言がないため、データ型は主に暗黙的に扱われます。Forthでは、データ型はデータの解釈や使用方法に依存します。以下では、Forthでよく使用されるデータ型について説明します。 wikitext text/x-wiki == はじめに == Forthはスタック指向のプログラミング言語であり、そのシンプルさと柔軟性から広く用いられています。 本書は、プログラマがForthを効果的に使いこなすための手引書として設計されています。例示や実践的なヒントが豊富に盛り込まれており、読者は理論を理解しながら実際のプロジェクトに応用できるでしょう。 本書を通じて、Forthの魅力と実力を十分に体感し、その利用価値を最大限に引き出すことができるでしょう。 本書では、ForthのCore Word Setに準拠した標準的なForthシステムを題材とします。 == Forthプログラミングの基礎 == Forthはスタック指向のプログラミング言語であり、独自の特徴を持っています。以下では、Forthプログラミングの基礎を解説します。 === スタック操作 === [[スタック構造|スタック]]は、Forthにおける中心的なデータ構造です。ほとんどのワードは、スタックから値を取り出したり、スタックに値を代入したりします。スタックは、後入れ先出し(LIFO; Last In First Out)のデータ構造で、Forthの演算はスタック上で行われます。 === 例 === 以下は、Forthでの簡単な計算の例です: :<syntaxhighlight lang=forth> 3 4 + . </syntaxhighlight> : まず<code>3</code>をスタックに置き、<code>4 + .</code> を解釈します。 : 次に、<code>4</code>をスタックに置き、<code>3 4</code> となり、<code>+ .</code> が残ります。 : そして、<code>+</code> はスタックのトップの2つの要素を加算して結果を戻し、スタックには<code>7</code>だけが残ります。 : 最後に、<code>.</code>(ドット)はスタックから<code>7</code>を取り除いてそれを表示します。 :{| |- !コード!!style='width:3em'| 3 !!style='width:3em'| 4 !!style='width:3em'| + !!style='width:3em'| . |- !スタックトップ |style="border:1px solid black; text-align:center"| 3 ||style="border:1px solid black; text-align:center"| 4 ||style="border:1px solid black; text-align:center"| 7 || |- ! | ||style="border:1px solid black; text-align:center"| 3 || || |- !出力 | || || ||style="text-align:center; font-weight: bold"| 7 |} === コメント === Forthでは、コメントは括弧で囲んで表現されます。例えば: :<syntaxhighlight lang=forth> ( これはコメントです ) </syntaxhighlight> <code>/</code> から行末までもコメントです :<syntaxhighlight lang=forth> 3 4 + \ 3 + 4 の結果をスタックトップに残す </syntaxhighlight> コメントは、インタプリタの動作に影響を与えません。 === スタックエフェクト === Forthの各ワードは、スタック上で特定の操作を行います。ワードのドキュメントでは、それがスタックに対してどのような影響を与えるかを示す記述があります。例えば: :<syntaxhighlight lang=forth> + ( a b -- c ) </syntaxhighlight> この記述は、<code>+</code>ワードが2つの引数(<code>a</code>と<code>b</code>)を消費し、1つの結果(<code>c</code>)をスタックに残すことを意味します。 === Forthのワードとは?その定義と使用について === Forthにおける「ワード」とは、基本的には単語や言葉を意味しますが、Forthプログラミングでは、より具体的には次の2つの意味を持ちます。 # 定義済みの単語 #: ワードは、Forthの語彙において定義された単語や操作を指します。Forthでは、これらのワードはスタック操作や制御構造、算術演算などの基本的な機能を表します。例えば、<code>+</code>は2つの数値を取り出して足し合わせ、結果をスタックに戻すワードです。 # 新しい単語の定義 #: ワードは、Forthプログラム内で新しい単語を定義するための仕組みとしても使われます。これは、既存のワードを組み合わせて、新しい機能を持つ単語を定義することを意味します。例えば、<code>DOUBLE</code>というワードを定義して、与えられた数値を2倍にするような操作を定義することができます。 ワードの定義は、通常、次のような形式で行われます: :<syntaxhighlight lang=forth> : ワード名 ( 定義部分 ) ; </syntaxhighlight> ここで、<code>: ワード名</code>は新しいワードの定義を開始し、<code>;</code>は定義の終了を示します。定義部分には、既存のワードや操作を組み合わせて、新しい機能を実現するForthのコードが記述されます。 === ワードの定義と使用例 === Forthにおけるワードの定義と使用についてさらに詳しく説明します。 # ワードの定義 : #: ワードは、<code>:</code> と <code>;</code> の間に記述されたコードブロックで定義されます。 #: 例えば、<code>SQUARE</code>という新しいワードを定義してみましょう。 #:<syntaxhighlight lang=forth> : SQUARE ( n -- n*n ) DUP * ; </syntaxhighlight> #: ここでは、<code>SQUARE</code>というワードが定義されています。このワードは、スタックから1つの数値を取り出し、その数値を自乗して結果をスタックに戻します。 # ワードの使用 : #: 定義したワードは、Forthプログラム内で直接使用することができます。 #:<syntaxhighlight lang=forth> 5 SQUARE . \ スタックから5を取り出して自乗し、結果を表示する </syntaxhighlight> #:上記の例では、<code>5 SQUARE .</code> というForthコードが実行されます。まず、<code>5</code>がスタックに積まれ、次に<code>SQUARE</code>ワードが実行されて、<code>5</code>の自乗である<code>25</code>が計算されます。最後に<code>.</code>はスタックのトップの値を表示しますので、結果として<code>25</code>が表示されます。 # 組み込みワードとカスタムワード : #: Forthには組み込みのワード(<code>+</code>, <code>-</code>, <code>*</code>, <code>/</code>など)がありますが、ユーザーはこれに加えて独自のワードを定義することができます。カスタムワードを使うことで、プログラムをより効率的に構築できます。 # 再帰的なワード : #: Forthでは、ワードは自身の中で再帰的に呼び出すことができます。これにより、複雑な演算や制御構造を簡潔に表現することが可能です。 ワードの定義と使用は、Forthプログラムの中核的な部分を構成します。これにより、プログラムの再利用性、メンテナンス性、可読性が向上し、効率的なコーディングが実現されます。 === 基本的な制御構造 === Forthの制御構造は、他のプログラミング言語とは異なり「制御構造もワードの集合から定義する」という独自の特徴を持っています。Forthでは、基本的な制御構造として条件分岐とループが利用されます。 制御構造に関するワードは、コンパイル時(つまり <code>:</code> から <code>;</code> までの間)でのみ使用でき会話モードでは使用できません。 ==== 条件分岐 ==== Forthでは、条件分岐は主に <code>IF</code>, <code>ELSE</code>, <code>THEN</code> のワードを組み合わせて実現されます。 ; 例: :<syntaxhighlight lang=forth> : ABS ( n -- |n| ) DUP 0< IF NEGATE THEN ; </syntaxhighlight> この例では、<code>ABS</code>というワードを定義しています。このワードは、スタックから数値を取り出し、その絶対値を計算して結果をスタックに戻します。<code>DUP 0<</code> はスタックトップの値が0より小さいかどうかをチェックし、<code>IF</code> から <code>THEN</code> の間に記述されたブロックが条件を満たす場合に実行されます。つまり、もし数値が負の場合は <code>NEGATE</code> が実行されます。 ==== ループ ==== Forthでは、ループは <code>DO</code>, <code>LOOP</code> や <code>BEGIN</code>, <code>WHILE</code>, <code>REPEAT</code> のワードを使って実装されます。 ; 例: :<syntaxhighlight lang=forth> : COUNTDOWN ( n -- ) 0 DO I . LOOP ; </syntaxhighlight> 上記の例では、0から与えられた数値(<code>n</code>)までカウントダウンする<code>COUNTDOWN</code>というワードを定義しています。 ==== その他の制御構造 ==== Forthには他にも、<code>CASE</code>, <code>OF</code>, <code>ENDOF</code>, <code>ENDCASE</code> を使った条件分岐や、<code>IF-ELSE-ENDIF</code> 構造、<code>BEGIN-UNTIL</code>、<code>BEGIN-WHILE-REPEAT</code> など、さまざまな制御構造が存在し、新たな制御構造をユーザーが定義することすら出来ます。 Forthの制御構造は、スタック指向の特性に基づいてシンプルかつ柔軟に設計されており、独自のプログラミングスタイルを持つことが特徴です。 === スタック操作の基本命令 === Forthにはスタック上のデータを操作するための基本的な命令があります。 * <code>DUP</code>: ( n -- n n ) スタックのトップの要素を複製する * <code>DROP</code>: ( n -- ) スタックのトップの要素を削除する * <code>SWAP</code>: ( n1 n2 -- n2 n1 ) スタックのトップとその下の要素を交換する * <code>OVER</code>: (n1 n2 -- n1 n2 n1 ) スタックのトップの2つ下の要素を複製してトップに置く * <code>ROT</code>: ( n1 n2 n3 — n2 n3 n1 ) スタックのトップの3つ下の要素をトップに回転する === 基本的な演算 === Forthには、算術演算(<code>+</code>、<code>-</code>、<code>*</code>、<code>/</code>など)、論理演算(<code>AND</code>、<code>OR</code>、<code>NOT</code>)、比較(<code>=</code>、<code><></code>、<code>></code>、<code><</code>など)の基本ワードが用意されています。これらのワードは、スタック上の値を取り、演算結果をスタックに代入します。 === 再帰的呼び出し === Forthで再帰的呼び出しを行う場合、ワード <code>recurse</code> を使ってワード自身を表します。 再帰的なワードを定義する方法について説明します。 ==== 階乗 ==== 再帰的な階乗(factorial)を定義します。 :<syntaxhighlight lang=forth> : factorial ( n -- result ) dup 0= if \ スタックのトップの値が0かどうかをチェック drop 1 \ もし0ならば、結果は1として処理を終了 else dup 1 - \ スタックのトップの値から1を引いた値をコピー recurse * \ 再帰的に自身を呼び出して、その結果にスタックのトップの値を掛ける then ; </syntaxhighlight> この定義の内容を説明します。 * ワード <code>factorial</code> は、<code>( n -- result )</code> のスタックエフェクトを持ちます。<code>n</code> は階乗を計算する整数です。 * <code>dup 0=</code>: スタックのトップの値が0かどうかをチェックします。 ** もし0ならば、<code>drop 1</code> が実行されて、スタックのトップの値(<code>n</code>)が削除され、結果として <code>1</code> がスタックにプッシュされます。 * <code>else</code>: もしスタックのトップの値が0でない場合は、次の操作が実行されます。 ** <code>dup 1 -</code>: スタックのトップの値から <code>1</code> を引いた値をスタックにプッシュします。これは <code>n - 1</code> の計算です。 ** <code>recurse *</code>: 自身の <code>factorial</code> を再帰的に呼び出して、結果に対してスタックのトップの値(<code>n</code>)を掛けます。これにより、<code>n! = n * (n-1)!</code> の計算が行われます。 * <code>then</code>: <code>if</code> ブロックの終了を示します。 例えば、<code>5 factorial .</code> を実行すると、<code>5</code> の階乗(<code>5!</code>)が計算されます。 :<syntaxhighlight lang=forth> 5 factorial . </syntaxhighlight> この例では、<code>5!</code> の計算手順は以下の通りです: * <code>5</code> がスタックにプッシュされる。 * <code>factorial</code> が呼び出される。 ** <code>dup 0=</code>: スタックのトップの値が0でないので、次の処理が実行される。 ** <code>dup 1 -</code>: <code>5 - 1</code> が計算されて <code>4</code> がスタックにプッシュされる。 ** <code>recurse *</code>: <code>4</code> の階乗 (<code>4!</code>) が再帰的に計算される。 *** <code>dup 0=</code>: スタックのトップの値が0でないので、次の処理が実行される。 *** <code>dup 1 -</code>: <code>4 - 1</code> が計算されて <code>3</code> がスタックにプッシュされる。 *** <code>recurse *</code>: <code>3</code> の階乗 (<code>3!</code>) が再帰的に計算される。 **** ... ***** 最終的に、<code>1</code> の階乗 (<code>1!</code>) が計算されて <code>1</code> がスタックにプッシュされる。 **** <code>5 *</code>: <code>5</code> と <code>4!</code> の結果を掛けて <code>120</code> がスタックにプッシュされる。 *** <code>5 *</code>: <code>5</code> と <code>120</code> の結果を掛けて <code>120</code> がスタックにプッシュされる。 * <code>. (dot)</code> コンパイラワ ==== 最大公約数(GCD) ==== 再帰的にユークリッドのアルゴリズムを使用して最大公約数(Greatest Common Divisor, GCD)を計算します。 :<syntaxhighlight lang=forth> : gcd ( u1 u2 -- gcd ) dup 0= if \ スタックのトップの値が0かどうかをチェック drop \ スタックのトップの値が0ならば削除して終了 else swap over mod recurse \ スタックのトップと2番目の値を入れ替えて、modを計算し再帰的に呼び出す then ; </syntaxhighlight> このプログラムの動作をステップごとに説明します: # <code>dup 0=</code>: スタックのトップの値(<code>u1</code>)が0かどうかをチェックします。 #* もし0ならば、<code>drop</code> が実行されて、スタックのトップの値(<code>u1</code>)が削除されます。この場合は再帰の終了条件となります。 # <code>else</code>: もしスタックのトップの値(<code>u1</code>)が0でない場合は、次の操作が実行されます。 # <code>swap over mod recurse</code>: #* <code>swap</code>: スタックのトップと2番目の値を入れ替えます。これにより、<code>u1</code> と <code>u2</code> の値が入れ替わります。 #* <code>over</code>: スタックの2番目の値(入れ替え前の <code>u1</code>)をスタックのトップにコピーします。 #* <code>mod</code>: スタックのトップの2つの値を取り出して、<code>u1 % u2</code>(<code>u1</code> を <code>u2</code> で割った余り)を計算し、その結果をスタックにプッシュします。 #* <code>recurse</code>: 自身の <code>gcd</code> を再帰的に呼び出します。これにより、新しい <code>u1</code> と <code>u2</code> の値がスタックに積まれ、再帰的に最大公約数が計算されます。 # <code>then</code>: <code>if</code> ブロックの終了を示します。 例えば、<code>12 18 gcd .</code> を実行すると、以下のように動作します: * <code>12</code> と <code>18</code> がスタックにプッシュされます。 * <code>gcd</code> が呼び出されます。 ** <code>dup 0=</code>: <code>18</code> は0ではないので、次の処理に進みます。 ** <code>swap over mod recurse</code>: <code>18</code> と <code>12</code> が入れ替わり、<code>18 % 12</code> が計算されます(余りは <code>6</code>)。 ** <code>gcd</code> が再帰的に呼び出され、新しい値 <code>12</code> と <code>6</code> がスタックにプッシュされます。 *** <code>dup 0=</code>: <code>6</code> は0ではないので、次の処理に進みます。 *** <code>swap over mod recurse</code>: <code>6</code> と <code>12</code> が入れ替わり、<code>6 % 12</code> が計算されます(余りは <code>6</code>)。 *** <code>gcd</code> が再帰的に呼び出され、新しい値 <code>6</code> と <code>6</code> がスタックにプッシュされます。 **** <code>dup 0=</code>: <code>6</code> は0ではないので、次の処理に進みます。 **** <code>swap over mod recurse</code>: <code>6</code> と <code>6</code> が入れ替わり、<code>6 % 6</code> が計算されます(余りは <code>0</code>)。 **** <code>0=</code>: <code>0</code> が0なので、<code>drop</code> が実行されて、スタックのトップの値 <code>0</code> が削除されます。 * 最終的に、スタックのトップには <code>6</code> が残ります。これが <code>12</code> と <code>18</code> の最大公約数です。 したがって、<code>12 18 gcd .</code> を実行すると、<code>6</code> が表示されます。 === 変数の宣言・代入と参照 === Forthにおける <code>VARIABLE</code> は、変数を定義するためのワードです。Forthでは、変数はメモリ内のアドレスに名前を関連付ける方法で定義されます。 以下は、<code>VARIABLE</code> を使用して変数を定義する方法とその使い方の例です。 ==== <code>VARIABLE</code> の使用方法 ==== <code>VARIABLE</code> は以下のように使用します: :<syntaxhighlight lang=forth> VARIABLE my-var \ my-var という名前の変数を定義する </syntaxhighlight> この行は、名前が <code>my-var</code> の変数を定義します。この変数はメモリ内の特定のアドレスに関連付けられます。 ==== 変数の使用方法 ==== 定義された変数を使用するには、<code>@</code>(fetch)や <code>!</code>(store)などのワードを使います。これらのワードを使って変数の値を取得したり設定したりできます。 - <code>@</code> は、変数の値をスタックにプッシュします。 - <code>!</code> は、スタックのトップの値を変数に代入します。 例えば、次のように変数に値を設定して取得します: :<syntaxhighlight lang=forth> 123 my-var ! \ 変数 my-var に値 123 を代入する my-var @ . \ 変数 my-var の値を表示する </syntaxhighlight> この例では、変数 <code>my-var</code> に <code>123</code> を代入し、その後 <code>@</code> を使って変数の値を取得して表示しています。 ==== 実際の例 ==== 以下は、<code>VARIABLE</code> を使って変数を定義し、値を設定して取得する具体的な例です: :<syntaxhighlight lang=forth> VARIABLE my-var \ my-var という名前の変数を定義する 123 my-var ! \ 変数 my-var に値 123 を代入する my-var @ . \ 変数 my-var の値を表示する </syntaxhighlight> この例では、変数 <code>my-var</code> を定義し、<code>123</code> を代入してその値を表示しています。<code>!</code> で変数に値を設定し、<code>@</code> で変数の値を取得しています。 変数はプログラムでデータを保持する際に便利です。Forthでは、変数の値は直接メモリ上に代入されるため、効率的なデータ管理が可能です。 === 定数の定義と参照 === Forthの <code>CONSTANT</code> は、定数を定義するためのワードです。定数は変更されることのない値であり、プログラムの中で何度も使われる値を簡潔に表現するために使用されます。 ==== <code>CONSTANT</code> の使用方法 ==== <code>CONSTANT</code> は以下のように使用します: :<syntaxhighlight lang=forth> 123 CONSTANT my-const \ my-const という名前の定数を定義する </syntaxhighlight> この行は、名前が <code>my-const</code> の定数を定義し、その値を <code>123</code> に設定します。定数はプログラム中で使用される値を一元管理し、可読性を向上させます。 ==== 定数の使用方法 ==== 定義された定数は、その名前を使ってプログラム中で値を参照することができます。 :<syntaxhighlight lang=forth> my-const . \ 定数 my-const の値を表示する </syntaxhighlight> この例では、定数 <code>my-const</code> の値が表示されます。 ==== 実際の例 ==== 以下は、<code>CONSTANT</code> を使って定数を定義し、その定数を使用する具体的な例です: :<syntaxhighlight lang=forth> 123 CONSTANT my-const \ my-const という名前の定数を定義する my-const . \ 定数 my-const の値を表示する </syntaxhighlight> この例では、定数 <code>my-const</code> を <code>123</code> に設定し、その後定数の値を表示しています。 定数はプログラム中で共通の値を使い回す際に便利です。Forthの定数は一度定義されると値が変更されることはなく、プログラム全体で一貫性のある値を提供します。 === 基数 === Forthの <code>BASE</code> は、数値の基数(n進数のn)を設定するための変数です。Forthでは、数値の表現において基数を変更することができます。通常、Forthはデフォルトで10進数を使用しますが、<code>BASE</code> を変更することで他の基数(2進数、16進数など)で数値を表現することが可能です。 ==== <code>BASE</code> の使用方法 ==== <code>BASE</code> は以下のように使用します: :<syntaxhighlight lang=forth> 16 BASE ! \ 基数を16進数に設定する </syntaxhighlight> この行は、<code>BASE</code> の値を <code>16</code> に設定しています。これにより、その後の数値の表示や入力が16進数で行われるようになります。 ==== 基数の変更と数値の表現 ==== <code>BASE</code> を変更することで、その後の数値リテラルの表現が変わります。例えば、<code>BASE</code> を16進数に設定した場合、数値リテラルは16進数として解釈されます。 :<syntaxhighlight lang=forth> 16 BASE ! \ 基数を16進数に設定する FF . \ 16進数の255を表示する </syntaxhighlight> この例では、<code>BASE</code> を16進数に設定してから、<code>FF</code> を表示すると、16進数の <code>FF</code> (10進数の <code>255</code>)が表示されます。 ==== デフォルトの基数と再設定 ==== Forthのデフォルトの基数は10進数です。基数を変更した後は、必要に応じて再度基数を10進数に戻すことができます。 :<syntaxhighlight lang=forth> DECIMAL BASE ! \ 基数を10進数に戻す </syntaxhighlight> この行は、<code>BASE</code> を10進数に再設定しています。これにより、数値リテラルは再び10進数として解釈されるようになります。 よくある間違い: :<syntaxhighlight lang=forth> 10 BASE ! \ 基数を16進数から10進数に戻す??? </syntaxhighlight> : として基数を10に戻そうとするミスがあります。 : コードの 10 は16進数として解釈されるので基数は16のままです。 ==== 注意点 ==== <code>BASE</code> を変更すると、数値の解釈や表示が変わるため、基数の変更後には適切な基数に戻すことが重要です。また、<code>BASE</code> の値は変数として扱われるため、必要に応じて保存や復元することができます。 基数を変更することで、特定の基数で数値を扱うプログラムを簡単に記述することができます。 === イミディエイトワード === イミディエイトワード(immediate word)は、Forthプログラミング言語において特定の動作を持つワードの一種です。イミディエイトワードは、通常のワードとは異なり、コンパイル時ではなく実行時に直ちに処理されます。 以下は、イミディエイトワードの特性について詳しく説明します: # 実行時処理: #* イミディエイトワードは、定義された時点ではコンパイルされず、実行時に直ちに解釈および実行されます。 #* 通常のワード(コンパイルワード)は、単なるコンパイル時にスタックに動作を積むだけであり、後で実行されますが、イミディエイトワードは定義された時点ですぐに実行されます。 # 定義方法: #* イミディエイトワードは、<code>IMMEDIATE</code> を使用して定義されます。 #* これにより、そのワードが定義された直後に実行されるようにマークされます。 # 使用例: #* 例えば、<code>."</code>(ダブルクォートピリオド)はイミディエイトワードです。これは、コンパイル時ではなく実行時に文字列を表示します。 #* <code>: greeting ." Hello, world!" ;</code> という定義では、<code>. "</code>Hello, world!"<code> はコンパイル時に実行されず、</code>greeting` を実行したときに実行されます。 # 動的な挙動: #* イミディエイトワードは、通常のワードとは異なり、実行時の環境やスタックの状態に応じて動的に振る舞います。 #* これにより、実行時に動的なテキストや操作を生成するために使用することができます。 イミディエイトワードは、Forthの柔軟性と強力な動的な特性を提供します。コンパイル時に制御構造や動作を決定するだけでなく、実行時に動的な挙動を持つことができます。 {{コラム|Forthの文法|2=Forthのプログラムは、空白文字で区切られた「ワード」の並びで構成されます。ワードには、数値リテラル、制御構造、演算子、そして他のワードを呼び出す構文などがあります。Forthには高水準の構文がなく、基本的な構文要素は非常にシンプルです。 例えば、<code>2 3 +</code> と入力すると、2と3がスタックにプッシュされ、最後の<code>+</code>がスタック上の2つの数値を加算します。この結果である5がスタックに残ります。つまり、Forthではプログラムの実行とデータ操作が、ワードの解釈とスタック操作によって行われるのです。 Forthは、基本的に行指向の言語です。プログラムは複数行に分割できますが、改行の前後で文が継続する場合は、スペースを入れる必要があります。このため、適切なインデントを使ってプログラムの構造をわかりやすくすることが重要です。 }} == データ型 == Forthには明示的なデータ型宣言がないため、データ型は主に暗黙的に扱われます。Forthでは、データ型はデータの解釈や使用方法に依存します。以下では、Forthでよく使用されるデータ型について説明します。 === セル(Cell) === セルは、通常2バイトまたは4バイトのサイズを持つ整数型です。Forthの基本的なデータ型であり、スタックやメモリ内のデータはセル単位で扱われます。セルのサイズは実装によって異なる場合があります。 === 符号付き整数(Signed Integer)と符号なし整数(Unsigned Integer) === Forthは整数を符号付きとしても、符号なしとしても扱うことができます。通常はセル内のビットパターンに基づいて解釈されます。算術演算や比較演算などが適用されますが、具体的な整数型に明示的に制限はありません。 === 文字(Character) === Forthでは文字は通常、符号なし整数として扱われます。ASCII文字セット内の範囲(通常は0から255)の数値として表現されます。文字に対する演算は、数値としての操作として扱われます。 === 文字列(String) === 文字列はカウント付き文字列(Counted String)やnull終端文字列(Null-terminated String)として表現されることがあります。カウント付き文字列では、最初のバイトが文字列の長さを示し、その後に文字のデータが続きます。文字列は通常、メモリ上の連続した領域に格納されます。文字列の操作には、<code>WORD</code>、<code>FIND</code>、<code>C"</code>などの専用のワードが用意されています。 === アドレス(Address) === Forthではアドレスも整数として扱われます。アドレスはメモリ上の位置を示す整数値であり、アドレス演算は通常の整数演算と同様に行われます。アドレス演算には、<code>CHAR+</code>、<code>CELLS</code>、<code>FLOAT+</code>などの専用のワードが用意されています。 === データ型の制約と振る舞い === Forthでは、データ型に関する制約やチェックはコンパイラやランタイムによっては'''行われません'''。プログラマはデータを正しく扱う責任があります。特にプログラムの移植性を考慮する場合は、適切なデータ型の使用が重要です。 データ型はForthの柔軟性とパフォーマンスの両方をサポートするため、プログラマに柔軟性と責任を与えます。それぞれのアプリケーションや環境に応じて、適切なデータ型を選択することが重要です。 == 実行トークン == Forthにおける実行トークン(Execution Token; xt)は、ワード(Word)や定義体(Definition)の実行を指示するためのデータ構造です。実行トークンは、コードワードを指すための一意の識別子として機能します。以下は、Forthの実行トークンについての詳細です。 ; 実行トークンの定義 : 実行トークンは、通常、ワードや定義体の実行を示すために使用される整数またはポインタです。これは通常、コンパイラやインタプリタ内部で使用され、特定のワードや定義体を表す一意の識別子として機能します。 ; 実行トークンの使用 : Forthのコードは、実行トークンを使用してワードや定義体を実行します。実行トークンは通常、スタックや辞書(Dictionary)に格納され、必要なときに取り出されて使用されます。 ; ' (Tick) 記号 : 一般的なForthのプログラミングスタイルでは、実行トークンを取得するためにシングルクォート(')記号が使用されます。例えば、<code>' DUP</code> は <code>DUP</code> ワードの実行トークンを取得します。 ; 実行トークンと定義体の関連付け : 実行トークンは、定義体やコードワードと関連付けられます。通常、辞書内のワードエントリは、そのワードの実行トークンを参照します。これにより、プログラムは実行トークンを使用して、辞書内のワードを特定して実行することができます。 ; ランタイムスタックとの関係 : Forthのランタイムスタックは、実行トークンを使用してコードを実行します。コンパイルされたForthコードは、ランタイムスタック上で実行トークンを取り出して、対応するワードや定義体を実行します。 ; 実行トークンの特徴 : 実行トークンは、Forthの柔軟性と効率性を向上させるために使用されます。コンパイラやインタプリタは、実行トークンを介してワードを効率的に実行し、辞書の管理を行います。 ; 実行トークンの安全性 : Forthでは、実行トークンは通常、ユーザーからは直接操作されず、コンパイラやランタイムシステム内部で使用されます。これにより、実行トークンを誤って操作することがなく、安全なプログラミング環境が提供されます。 Forthの実行トークンは、言語の内部実装の詳細を隠蔽し、プログラマに柔軟性と効率性を提供する重要な概念です。 == コンパイル時ワード == Forthには、コンパイル時に処理される特殊なワードがあります。これらをコンパイル時ワードと呼びます。 主なコンパイル時ワードには以下のようなものがあります: # コンパイル時の定義操作 #* <code>:</code> (コロン) - 新しい定義を開始する(<code>:</code>自身は通常の逐次ワード) #* <code>;</code> (セミコロン) - 定義を終了しコンパイルモードを抜ける #* <code>CONSTANT</code>、<code>VARIABLE</code>、<code>DEFER</code> - 定数、変数、遅延定義を作成する # コンパイル時の制御 #* <code>IF</code>、<code>ELSE</code>、<code>THEN</code>、<code>BEGIN</code>、<code>UNTIL</code> など - 条件分岐やループなどの制御構造を定義する #* <code>LITERAL</code> - スタックトップの値をコンパイル時に埋め込む # その他のコンパイル時操作 #* <code>IMMEDIATE</code> - 定義をすぐに実行されるように指定する #* <code>[COMPILE]</code> - 次のワードをコンパイル時に実行する #* <code>POSTPONE</code> - 次のワードの実行トークンをコンパイルする これらのコンパイル時ワードは、Forthのプログラムの構造を定義したり、実行時の振る舞いを制御したりするために使われます。 通常のワードとは異なり、これらのコンパイル時ワードはコンパイル時に処理され、実行時には特殊な動作をするようになっています。これにより、Forthのプログラミングモデルを柔軟に拡張することができます。 == データ構造とメモリ管理 == Forthは組み込みシステムなどのリソース制約の厳しい用途を想定して設計されているため、メモリの効率的な利用が重視されています。この章では、Forthにおけるデータ構造とメモリ管理の方法を説明します。 === コントロールフロースタック === コントロールフロースタックとは、Forthのプログラムの制御フローを管理するために使用される仮想的なスタックです。 その主な役割は以下の通りです: # 制御フロー命令の対応関係の管理 #* 制御フロー命令(<code>IF</code>, <code>THEN</code>, <code>ELSE</code>, <code>BEGIN</code>, <code>WHILE</code>, <code>REPEAT</code> など)の対応関係を管理します。 #* 開始と終了の命令が適切に対応していることを確認します。 # 制御フロー中のデータスタック操作の制約 #* 制御フロー中のデータスタックの使用方法に制約を課します。 #* 制御フロー命令の入れ子関係に応じて、適切なデータスタックの状態が維持されるようにします。 コントロールフロースタックは物理的に実装されていなくても良いと仕様で定められています。 代わりに、システムはコンパイル時や実行時にこのスタックの挙動を模倣する方法を採ることができます。 つまり、コントロールフロースタックはForthの制御構造の妥当性を保証する上で重要な概念であり、プログラムの正しい実行を支えているのです。 通常のプログラミングでコントロールフロースタックを強く意識することはありませんが、制御構造を自らワードとして定義しようとする場合、コントロールフロースタックの振る舞いに注意する必要があります。 === リターンスタック === Forthには、データスタックとは別に、リターンスタックと呼ばれる重要なスタックが存在します。リターンスタックの主な役割は以下の通りです: # 関数呼び出しとリターン #* 関数を呼び出すとき、その関数の呼び出し元の命令アドレスがリターンスタックにプッシュされます。 #* 関数から抜け出すときは、リターンスタックからアドレスがポップされ、その場所に制御が戻されます。 #* これによって、関数呼び出しの際の制御の移動を管理することができます。 # 一時的データ保管 #* リターンスタックは、データを一時的に保管する場所としても使えます。 #* データスタックからデータを>Rでリターンスタックにプッシュし、後でR>で取り出すことができます。 #* これにより、データスタックの状態を一時的に変更せずに、値を保持しておくことができます。 リターンスタックの使用には注意点があります: * ワード内やループ内では、<code>>R</code>と <code>R></code>の回数が一致している必要があります。 * リターンスタックの値は、同じブロック内でのみ参照・取り出しできます。 * ループの脱出時やDO-ループ内からは、リターンスタックの値を取り出せません。 つまり、リターンスタックは制御フローの管理と一時的なデータ保管に使われますが、その使い方には一定の制限があるため、注意深く扱う必要があります。 プログラムの複雑さが増すと、リターンスタックの状態を適切に管理することが難しくなるため、できるだけ単純な使い方に留めるのが賢明です。 ; <code>>R ( x -- ) ( R: -- x )</code> : データスタックから値をポップしリターンスタックにプッシュする ; <code>R> ( R: -- x ) ( x -- )</code> : リターンスタックから値をポップしデータスタックにプッシュする ; <code>R@ ( -- x ) ( R: x -- x )</code> : リターンスタックのスタックトップをデータスタックにコピーする ; <code>2>R ( x1 x2 -- ) ( R: -- x1 x2 )</code> ; <code>2R> ( -- x1 x2 ) ( R: x1 x2 -- )</code> ; <code>2R@ ( -- x1 x2 ) ( R: x1 x2 -- x1 x2 )</code> スタックエフェクトに <code>R:</code> という新しい記号が出てきましたが、これはリターンスタックへの操作をしまします。このためリターンスタックはRスタックとも呼ばれています。 === 変数とアドレス指定 === Forthには、グローバル変数やローカル変数の概念がありません。代わりに、値を格納するためのメモリ領域を確保し、そのアドレスを使ってアクセスします。<code>VARIABLE</code>ワードを使うと、新しい変数領域が確保され、その開始アドレスがスタックに置かれます。 :<syntaxhighlight lang=forth> VARIABLE COUNTER \ カウンター変数を定義 COUNTER @ . \ 変数の値を表示(初期値は0) 1 COUNTER +! \ 変数にインクリメント </syntaxhighlight> 変数の値を取り出すには<code>@</code>(フェッチ)、格納するには<code>!</code>(ストア)を使います。<code>+!</code>のように算術演算と<code>!</code>を組み合わせたワードもあります。 Forthではアドレスを直接スタックに置いて操作することもできます。<code>HERE</code>はディクショナリの次の空きアドレスを取得し、<code>ALLOT</code>はディクショナリ領域を確保します。 ==== データスペース(Data Space) ==== Forthのデータスペースとは、メモリ内の連続した領域を指し、データやワードの定義などが格納される場所です。Forthでは、データスペースは主に '''ヒープ(heap)''' と '''ディクショナリ(dictionary)''' の2つの領域に分かれています。 * '''ヒープ''': データスタックやワードの実行時に使用される一時的な領域です。ここでは、動的に割り当てられたデータや一時的な計算に使用されるデータが保持されます。 * '''ディクショナリ''': ワード(ワード)の定義やその実装が格納される領域です。Forthのディクショナリはワードの名前とそれに対応する実行可能なコードへのポインタを保持します。 ==== <code>HERE</code> ワード ==== <code>HERE</code> はForthで使用される特定のワードであり、現在のデータスペース内の「ここ(here)」の位置を示します。具体的には、ディクショナリ内の次の空き領域の先頭アドレスを指します。 <code>HERE</code> を使用すると、新しいワードやデータをデータスペースに格納する際に位置を特定することができます。主にワードの定義やデータの動的な確保に使用されます。 例えば、新しい変数や配列を定義する場合、<code>HERE</code> の値を参照して適切なメモリ領域を割り当て、その後 <code>HERE</code> を更新します。 具体的な使用例を示します: :<syntaxhighlight lang=forth> HERE . \ 現在のHEREの値を表示(ディクショナリ内の次の空き領域のアドレス) 10 ALLOT \ 10バイトの領域を確保 HERE . \ 確保後のHEREの値を表示 </syntaxhighlight> この例では、まず <code>HERE</code> の値が表示され、次に <code>10 ALLOT</code> によって10バイトの領域が確保されます。その後、再度 <code>HERE</code> の値が表示され、確保された領域の終端アドレスが示されます。 <code>HERE</code> を適切に使用することで、動的なメモリ管理やデータスペースの操作が行えます。 ==== HEREを利用したデータスペースの活用例 ==== ; sieve.fr :<syntaxhighlight lang=forth> : prime? ( n -- ? ) here + c@ 0= ; : composite! ( n -- ) here + 1 swap c! ; : sieve ( n -- ) here over erase 2 begin 2dup dup * > while dup prime? if 2dup dup * do i composite! dup +loop then 1+ repeat drop ." Primes: " 2 do i prime? if i . then loop ; 100 sieve / Primes: 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 </syntaxhighlight> このForthのコードは、エラトステネスの篩(Sieve of Eratosthenes)アルゴリズムを実装しています。このアルゴリズムは、与えられた数 <code>n</code> 以下のすべての素数を見つけるために使用されます。以下では、与えられたコードの各部分を詳しく説明します。 ; <code>prime?</code> ワード :<syntaxhighlight lang=forth> : prime? ( n -- ? ) here + c@ 0= ; </syntaxhighlight> :; <code>( n -- ? )</code>: スタックから整数 <code>n</code> を取り出し、その数が素数であるかどうかの真偽値 <code>?</code> をスタックに積む。 :* <code>here + c@</code>: <code>here</code> は現在のデータスペースの末尾を示し、それに <code>+</code> を使ってワードの<code>n</code>番目のアドレスを取得する。そして <code>c@</code> はそのアドレスの内容(1バイトの文字)を取得する。 :* <code>0=</code>: 取得したバイトが0かどうかをチェックし、0ならば真(素数)を返す。 ; <code>composite!</code> ワード :<syntaxhighlight lang=forth> : composite! ( n -- ) here + 1 swap c! ; </syntaxhighlight> :; <code>( n -- )</code>: スタックから整数 <code>n</code> を取り出す。 :* <code>here + 1 swap c!</code>: <code>here</code> から<code>n</code>のアドレスにを1を1バイトで書き込む。 ; <code>sieve</code> ワード :<syntaxhighlight lang=forth> : sieve ( n -- ) here over erase 2 begin 2dup dup * > while dup prime? if 2dup dup * do i composite! dup +loop then 1+ repeat drop ." Primes: " 2 do i prime? if i . then loop ; </syntaxhighlight> :; <code>( n -- )</code>: スタックから整数 <code>n</code> を取り出す。 :* <code>here over erase</code>: 現在のデータスペース(<code>here</code> から先)を <code>n</code> バイト分消去する。 :* <code>2 begin ... repeat</code>: メインのループ。2から始めて、以下の条件に基づいて処理を繰り返す。 :** <code>2dup dup * ></code>: 現在の値を2つコピーし、2つを掛けた値が <code>n</code> を超えるまで続ける。 :** <code>dup prime? if ... then</code>: 現在の値が素数かどうかをチェックし、素数ならば以下を実行。 :*** <code>2dup dup * do ... dup +loop</code>: 素数の場合、その数の倍数を篩い落とす。内側のループで、その数の倍数を全て <code>composite!</code> でマークする。 :** <code>1+</code>: 現在の数値を1増やす。 :* <code>drop</code>: 最後の数値を削除する。 :* <code>." Primes: " 2 do i prime? if i . then loop</code>: 素数を表示するループ。2から始まり、<code>n</code> まで続ける。各数値が素数ならば表示する。 ; 実行 :<syntaxhighlight lang=forth> 100 sieve </syntaxhighlight> :100以下の素数を見つけるために <code>sieve</code> ワードが実行されます。 === CREATEを使った変数と配列の定義 === Forthの <code>CREATE</code> は、新しい変数や配列をディクショナリに定義するためのワードです。<code>CREATE</code> を使うことで、任意の名前で参照可能なデータ領域を確保し、その領域に対する操作を定義することができます。 以下に、<code>CREATE</code> ワードの基本的な構文と使用方法を示します。 ==== 構文 ==== :<syntaxhighlight lang=forth> CREATE name </syntaxhighlight> * <code>name</code>: 定義する変数や配列の名前を指定します。 ==== 使用方法 ==== # 変数の定義 #:<code>CREATE</code> を使って変数を定義する場合、単に変数の初期値を指定します。 #:<syntaxhighlight lang=forth> CREATE my-var 42 , </syntaxhighlight> #:上記の例では、<code>my-var</code> という名前の変数が定義され、初期値として <code>42</code> が設定されています。<code>,</code> はスタックのトップの値を <code>my-var</code> の定義領域に格納するワードです。 # 配列の定義 #: <code>CREATE</code> を使って配列を定義する場合、配列の要素数や初期値を指定します。 #:<syntaxhighlight lang=forth> CREATE my-array 5 ALLOT </syntaxhighlight> #: 上記の例では、<code>my-array</code> という名前の配列が定義され、5つの要素分の領域が確保されます。各要素には初期値が与えられていないため、初期化が必要な場合は別途行います。 ==== 使用例 ==== このForthのコードは、<code>CREATE</code> を使って変数と配列を定義し、それらに値を格納・表示する例です。 ; 変数の定義と使用 :<syntaxhighlight lang=forth> CREATE x \ 変数 x を定義 100 x ! \ x に 100 を代入 x @ . CR \ x の値を表示 </syntaxhighlight> * <code>CREATE x</code>: <code>x</code> という名前の変数を定義します。<code>CREATE</code> はディクショナリに新しいワードを登録しますが、データスペース自体は確保しません。 * <code>100 x !</code>: <code>x</code> のデータフィールドに <code>100</code> を格納します。 * <code>x @ . CR</code>: <code>x</code> のデータフィールドから値を読み取って表示します。<code>CR</code> は改行を出力します。 ; 配列の定義と使用 :<syntaxhighlight lang=forth> CREATE MY-ARY 100 ALLOT \ 100セルの配列を作成 42 MY-ARY 10 + ! \ 11番目の要素に42を代入 MY-ARY 10 + @ . \ 11番目の要素の値を表示 </syntaxhighlight> * <code>CREATE MY-ARY 100 ALLOT</code>: <code>MY-ARY</code> という名前の配列を定義し、100セル分のデータスペースを確保します。 * <code>42 MY-ARY 10 + !</code>: <code>MY-ARY</code> の11番目の要素(0から始まるインデックスなので、10を足します)に <code>42</code> を代入します。 * <code>MY-ARY 10 + @ .</code>: <code>MY-ARY</code> の11番目の要素の値を読み取って表示します。 この例では、<code>CREATE</code> を使って変数 <code>x</code> と配列 <code>MY-ARY</code> を定義し、それぞれに値を設定しています。<code>x</code> は単一の値を格納する変数であり、<code>MY-ARY</code> は複数の要素を持つ配列です。<code>!</code> を使ってデータを代入し、<code>@</code> を使ってデータを取得しています。 Forthの特性として、変数や配列の定義はディクショナリに登録されるため、名前に対して対応するデータ領域へのアクセスが可能となります。これにより、動的なデータ構造を効率的に管理することができます。 === アライメント === Forthの <code>ALIGN</code> ワードは、データ領域のアラインメントを行うためのワードです。アラインメントとは、データがメモリ上で配置される位置を調整することであり、特定のアドレス境界にデータを配置することを指します。 アラインメントの必要性は、プロセッサアーキテクチャに依存しますが、多くのアーキテクチャでは特定のデータ型(例:4バイト整数など)は特定の境界に配置される必要があります。アラインメントが正しく行われないと、メモリアクセスの効率が低下したり、アドレスエラーなどの例外が発生し処理を中断する可能性があります。 ; 構文 :<syntaxhighlight lang=forth> ALIGN </syntaxhighlight> ; 動作 : <code>ALIGN</code> ワードは、データスペースポインタ (<code>HERE</code>) をアラインメント条件に従って調整します。具体的には、通常は2バイトまたは4バイトの境界に <code>HERE</code> を調整します。これにより、次に確保されるデータ領域が適切な境界に配置されます。 ; 使用例 :<syntaxhighlight lang=forth> HERE ALIGN </syntaxhighlight> : 上記の例では、<code>HERE</code> の値をアラインメントされた位置に調整します。これにより、次に確保されるデータ領域が適切な境界に配置されます。 :<syntaxhighlight lang=forth> CREATE my-var ALIGN 2 ALLOT </syntaxhighlight> : この例では、<code>my-var</code> という名前の変数を定義していますが、そのデータ領域が2バイト境界にアラインメントされて確保されます。これにより、<code>my-var</code> のデータ領域は適切な境界に配置され、メモリアクセスの効率が向上します。 <code>ALIGN</code> ワードは、特定のアーキテクチャで必要なメモリアラインメントを確保するために重要な役割を果たします。メモリアクセスの効率を最大化するために、適切なアラインメントが常に考慮されるべきです。 == 入出力と組み込みワード == Forthには標準の入出力ワードがあり、コンソールやファイルからの入出力を行えます。また、様々な組み込みワードが用意されており、これらを活用することでForthの機能を拡張できます。 === 標準入出力 === Forthには、キーボードからの文字入力や、コンソールへの文字出力を行うためのワードが用意されています。 :<syntaxhighlight lang=forth> KEY \ キーボードから1文字読み込む EMIT \ スタック上の値(文字コード)を出力する ." \ 文字列を直接出力する </syntaxhighlight> <code>KEY</code>はキーボード入力を待ち、押された文字のASCIIコードをスタックに置きます。<code>EMIT</code>は逆に、スタック上の値を文字コードとして解釈し、コンソールに出力します。<code>." Hello"</code>のように、<code>."</code> の後に文字列を続けると、その文字列がコンソール出力されます。 数値入出力には、<code>?</code>、<code>U.</code>、<code>U.R</code>などのワードが使えます。<code>?</code>は数値を入力受け付け、<code>U.</code>は符号なし数値を、<code>U.R</code>は数値を指定した基数(2進数、16進数など)で出力します。 === ファイルアクセス === ファイル入出力には、様々なワードが用意されています。<code>OPEN-FILE</code>でファイルを開き、<code>READ-FILE</code>や<code>WRITE-FILE</code>でデータの読み書きができます。 :<syntaxhighlight lang=forth> S" data.txt" R/O OPEN-FILE THROW VALUE HANDLE \ ファイルを読み取りモードで開く HANDLE READ-FILE ABORT" READ ERROR" \ ファイルを読み込む HANDLE CLOSE-FILE THROW \ ファイルを閉じる </syntaxhighlight> ファイル名は、<code>S"</code> で文字列をスタックに置いた後、<code>R/O</code>(読み取り専用)や<code>W/O</code>(書き込み専用)といったモードを指定してファイルを開きます。<code>THROW</code>はエラーがあれば例外を発生させます。 <code>READ-FILE</code>や<code>WRITE-FILE</code>では、バッファ領域のアドレスと読み書きするバイト数をスタックに置く必要があります。 === 組み込みワードの利用 === Forthには、数学関数や論理演算、メモリ操作など、様々な組み込みワードが用意されています。必要に応じてこれらのワードを活用することで、プログラムにさまざまな機能を付加できます。 :<syntaxhighlight lang=forth> 2 3 MAX . \ 最大値(3)を出力 S" HELLO" SWAP DROP \ スタック操作サンプル HEX 1F20 4 DUMP \ メモリダンプ </syntaxhighlight> <code>MAX</code>は2つの数値の最大値を、<code>SWAP</code>は2つの値の順序を入れ替え、<code>DROP</code>は最上位の値を捨てます。<code>DUMP</code>は指定したアドレスからのメモリ内容をダンプ出力します。 組み込みワードには、浮動小数点演算、文字列処理、マルチタスク、IPCなど、様々な分野のものがあります。また、必要に応じてワードを自作したり、外部ライブラリからリンクしたりできます。Forthはコンパクトなシステムながら、組み込みワードの充実により高い機能性を発揮します。 == アプリケーション開発 == Forthは小規模な組み込みシステムから大規模なアプリケーションまで、幅広い用途に使用できる言語です。この章では、Forthにおけるアプリケーション開発の手法と、実例について解説します。 === モジュール化とワード管理 === Forthはワードをベースとしたモジュール性の高いプログラミングができます。大きなアプリケーションを開発する際は、適切にモジュール分割してワードを設計・管理することが重要です。 Forthにはネームスペースの概念がありません。そのため、ワード名の重複を避けるためには、プレフィックスなどの命名規則を定めることが一般的です。たとえば<code>STRING-LENGTH</code>のように、ワードの役割がわかるよう名前を付けます。 また、ワードをまとめてファイルに保存し、必要に応じて読み込む方法があります。Forthの多くの処理系は、ワードの定義をソースファイルに保存したり、メモリイメージを永続化したりできます。 :<syntaxhighlight lang=forth> MARKER MODULE>STRING : STRING-LENGTH \ 文字列の長さを求める ... ; : STRING-REVERSE \ 文字列を反転する ... ; STRING-REVERSESTRING-LENGTH +MODULE </syntaxhighlight> 作成したワードは<code>MODULE>NAME</code>でモジュール名を付け、<code>+MODULE</code>でモジュールを完成させることができます。他のソースから<code>USE MODULE>NAME</code>とすれば、そのモジュールのワードが使用可能になります。 大規模なシステムでは、このようなソースレベルの分割に加え、オーバーレイ、仮想メモリ、マルチタスク機能を活用することで、メモリの効率的な使用が可能です。 === グラフィックス処理 === Forthでもグラフィック処理が可能ですが、組み込みの機能は限られています。ほとんどの処理はユーザ定義ワードとして実装する必要があります。 ビットマップ画像の表示や、ウィンドウ、マウスカーソルなどの基本的なGUIの作成はある程度可能です。高度な3Dグラフィックスなどを実現するには、外部ライブラリを利用する必要があります。 :<syntaxhighlight lang=forth> NEED FRAMEBUFFER \ フレームバッファへのアクセスモジュール : DRAW-LINE ( x1 y1 x2 y2 -- ) \ ブレザンハムのアルゴリズムでライン描画 ... ; : DRAW-RECT ( x y w h -- ) 2SWAP 2>R 2R> \ (x y w h -- x y x+w y+h) DRAW-LINE 2>R 2R> DRAW-LINE 2SWAP DRAW-LINE 2SWAP DRAW-LINE ; FRAMEBUFFER-INIT \ グラフィックスサブシステムの初期化 100 100 300 200 DRAW-RECT \ 長方形を描画 </syntaxhighlight> 上記では、フレームバッファの制御関数がロードされた前提で、<code>DRAW-LINE</code>を使って<code>DRAW-RECT</code>(長方形描画)を実装しています。スタックを活用して座標値を受け渡し、基本的な幾何図形を描画しています。 Forthはグラフィックスパイプラインなどの高度な機能を組み込んでいませんが、スタックベースの処理により、低レベルのデバイスアクセスが可能です。組み込みシステムのディスプレイやLED制御など、グラフィックス関連の処理に適しています。 === システムプログラミング === Forthの本質的な特性として、システムプログラミングに適していることがあげられます。小規模でコンパクト、高速動作、低レベルなメモリアクセスが可能というメリットがあります。 OSカーネル、デバイスドライバ、BIOS、ブートローダなどの開発にForthは広く使われてきました。組み込みシステムでは、センサーやI/Oデバイスの制御に最適です。スタック指向のモデルにより、レジスタレベルの処理が直接かけるのも特徴です。 例えば、Forthを使ってブートローダを実装する場合には、次のようなプログラムになります。 :<syntaxhighlight lang=forth> HEX 07C0 INPORT DROP \ DOSデータ領域クリア 0800 0 20 MOVE \ リセットベクタ設定 KERNEL.IMG LOAD \ カーネル読み込み A000 OUTPORT \ VGAモードへ切り替え 1000 JMP \ カーネル実行 ... \ BIOSブート用の簡単なForth読み込みコード :KERNEL.IMG LOAD CORE SWAP CPU KERNEL ; </syntaxhighlight> BIOSなどの低レベル機能を呼び出してブートローダを構築する処理が、Forthの文法でコンパクトに記述できる様子がわかります。 また、Forth自身が小規模で可搬性が高いため、Forth処理系そのものもForthで書かれた簡単なコアを、ホストOSやアーキテクチャに合わせてセルフホスト (移植) する手法が一般的です。これは、アプリケーションと実行環境を一体化して開発できる利点があります。 == 高度なトピック == ここまでForthの基本的な構文と概念、データ構造、アプリケーション開発の実例などを解説してきました。この章では、Forthの高度な利用方法としてパフォーマンス最適化、マルチスレッド・マルチタスク、メタプログラミングについて取り上げます。 === 最適化とパフォーマンス === Forthはコンパクトで高速な言語ですが、さらなる最適化の余地があります。ワードの定義を工夫したり、ネイティブコードコンパイラを使ったりすることで、パフォーマンスを向上できます。 ワード定義の最適化では、冗長な演算を排除したり、インラインコーディングの手法を用いたりします。例えば、次のようなワード定義があるとします。 :<syntaxhighlight lang=forth> : MAX2 ( n1 n2 -- max ) 2DUP > IF SWAP DROP ELSE NIP THEN ; </syntaxhighlight> この<code>MAX2</code>は一時的に2つの値を複製(<code>2DUP</code>)し、<code>IF</code>..<code>ELSE</code>..<code>THEN</code>の条件分岐で最大値を選びます。しかし、この一時複製が無駄な演算となっています。次のように書くとコードがシンプルになります。 :<syntaxhighlight lang=forth> : MAX2 ( n1 n2 -- max ) OVER OVER > IF SWAP THEN ; </syntaxhighlight> ワードの最適化には一般的なテクニックがあり、Forthのコンパイラ作者から提案されているものを参考にするとよいでしょう。 また、Forthにはネイティブコードコンパイラと呼ばれるもので、ワードの実行コードをネイティブマシン語に変換できるものがあります。Forthの対話的な実行環境は便利ですが、ネイティブコードの方が高速に動作します。こうした最適化手法を使い分けることで、Forthのパフォーマンスを飛躍的に向上できます。 === マルチスレッドとマルチタスク === Forthには並列実行の機構が組み込まれていないため、マルチスレッドやマルチタスク処理を実現するにはユーザ定義の実装が必要です。しかし、Forthの言語特性を活かせばきわめてコンパクトな並列処理ができます。 マルチスレッドでは、スタックを分離し、スレッド毎にスタックのコピーを持つ手法が一般的です。スレッドの切り替えはスタックのコンテキストスイッチで実現できます。また、Forthのデータストアクセス方式を応用すれば、IPC(プロセス間通信)の仕組みを作ることもできます。 :<syntaxhighlight lang=forth> : NEW-TASK ( -- ) HERE CURRENT-STACK >R CREATE-STACK SWAP [: DO-SOME-WORK ;] ( compile: word behavior ) R> SET-CURRENT ; </syntaxhighlight> この例では、新しいタスクを作成するワード<code>NEW-TASK</code>を定義しています。<code>CREATE-STACK</code>でスタックを新しく割り当て、<code>DO-SOME-WORK</code>のようなワード定義をタスクとして登録します。実行時にはスケジューラによってこれらのタスクが実行されます。 マルチタスク機構を実装する例は多数あり、スレッド単位でデータを扱う方式、メッセージキューによる方式、それぞれ長所と短所があります。並列処理にはデッドロックなどの問題点もありますが、Forthではコンパクトでシンプルなコード記述が可能です。 === メタプログラミング === Forthにはプログラムを生成・変更するメタプログラミングの機能があり、コードを自動生成したり、プログラムを動的に変更したりできます。この機能は、Forthをドメイン固有言語(DSL)の開発などに適用できることを意味しています。 メタプログラミングには、コンパイル時に評価される構文<code>[...]</code>と実行時構文<code>EVAL</code>があります。どちらもプログラムをデータとして扱えるため、動的にプログラムを生成・変更できます。 :<syntaxhighlight lang=forth> : HILBERT-CURVE ( n -- ) 0 ?DO [: 2DUP RECURSE >R >R 1 HCURVE R> R> RECURSE 3 HCURVE ;] POSTPONE LITERAL POSTPONE HCURVE LOOP ; </syntaxhighlight> この例では、ヒルベルト曲線を描画するコードを動的に生成しています。<code>POSTPONE</code>はワードのコンパイルを遅延させ、<code>[: ... ;]</code>の構文はその間のテキストを実行可能なコードとしてコンパイルします。この手法により、 Hilbertカーブの次元(<code>n</code>)に応じて、その描画コードを生成しています。 Forthのメタプログラミング機能は、高度な用途に役立ちます。例えば、ユーザインターフェースビルダー、コードジェネレーター、プログラムシンセサイザなどでその力を発揮できます。Forthの柔軟性を最大限に活かせる側面といえるでしょう。 == サンプルプログラムとプロジェクト == Forthの理解を深めるには、実際にコードを書いて動作を確認することが大切です。この章では、様々なサンプルコードを紹介するとともに、実践的なForthプロジェクトの例を示します。 === 様々なサンプルコード === 以下はForthの基本的な機能を示すサンプルコード集です。 ; 再帰によるフィボナッチ数列 :<syntaxhighlight lang=forth> : FIB ( n -- fib-n ) DUP 0= IF DROP 1 EXIT THEN DUP 1 = IF DROP 1 EXIT THEN DUP 1- RECURSE SWAP 2 - RECURSE + ; </syntaxhighlight> ; 文字列操作 :<syntaxhighlight lang=forth> : UPPERCASE ( addr n -- addr n ) OVER + SWAP ?DO I C@ [CHAR] a [CHAR] z 1+ WITHIN IF [CHAR] A [CHAR] a - + THEN I C! LOOP ; : REVERSE-WORDS ( addr n -- ) [CHAR] \ SKIP SPACES OVER >R BEGIN OVER C@ [CHAR] \ <> WHILE [CHAR] \ PARSE DUP >R REVERSE R> OVER C! CHAR+ REPEAT R> DROP 2DROP ; </syntaxhighlight> ; ベクトル・行列計算 :<syntaxhighlight lang=forth> REQUIRE DOUBLE \ 倍精度浮動小数点サポート : VZEROS ( n -- addr ) \ n要素のゼロベクトルを生成 CREATE HERE 0 SWAP 8 * DUP ALLOT FILL ; : MZEROS ( rows cols -- addr ) \ rows x cols の零行列を生成 SWAP VZEROS SWAP 0 ?DO OVER VZEROS COLS + LOOP ; </syntaxhighlight> ; 簡易グラフィックス :<syntaxhighlight lang=forth> VARIABLE FRAMEBUF \ フレームバッファアドレス : PIXEL ( x y color -- ) \ 1ピクセル書き込み FRAMEBUF @ >R 2 * R@ + 3 * RP@ C!+ RP@ C!+ RDROP ; : LINE ( x1 y1 x2 y2 c -- ) \ ラインの描画 >R 2SWAP R> 2>R 2R@ PIXEL 2R> PIXELLINE ; </syntaxhighlight> これらの例は、スタックを使った処理の流れ、ユーザ定義ワードの作成、再帰など、Forthのプログラミング手法の基本を示しています。コンパクトながらも表現力の高さがわかるでしょう。 === 実践的なプロジェクト例 === 次に、もう少し大がかりなForthプロジェクトの例を紹介します。 ; Forth Chip-8 エミュレーター Chip-8はレトロなゲームコンソールで、Forthでその命令セットをエミュレートするプロジェクトです。グラフィックス、入力処理、命令デコーダなどを実装します。 ; カーネルとブートローダ ForthでOSカーネルの基本部分を実装し、ブートローダと合わせてシステムを構築するプロジェクト。メモリ管理、タスク管理、ファイルシステム、ドライバなどの機能が実装できます。 ; Webサーバー ForthでHTTPリクエストを処理するWebサーバーを作成。ソケット通信、文字列処理、ファイル入出力などの機能が必要になります。追加してWebアプリケーションフレームワークなども作れます。 ; オープンソースForthプロセッサ Forthを使ってCPU命令セットを記述し、ゲートレベルまでFPGAに実装するプロセッサの設計プロジェクト。ハードウェア記述言語との連携が重要です。 このようなプロジェクトを通して、Forthの実用性とシステムプログラミングでの可能性を体験できます。Forthという言語自体を使って、OSやハードウェアコンポーネントを実装できるのが最大の特徴です。いずれのプロジェクトも一般的な規模になると、モジュール分割やワード管理、ツール活用などの工夫が必要になります。 == 参考資料 == Forthについてより深く学ぶには、書籍や公開されているオンラインリソースを参照するのが有効な方法です。また、活発なForthコミュニティに参加することで、他の開発者からの助言を得られます。 === 関連書籍の紹介 === Forthの入門書から応用、さらには処理系の実装に至るまで、多くの優れた書籍が出版されています。 * 「Forth入門」レオ・ブロディ (ISBN:978-4875930297 工学社) ** Forth言語の基本から、アプリケーション開発までをカバーした長年の定番書。 * 「Thinking Forth」Leo Brodie (Punchy Publishing) / Forth思考 ―問題解決のための言語と哲学― レオ・ブロディー著 ** Forth哲学に重きを置いた名著。Forthの考え方を深く解説。 * 「Forth Programmer's Handbook」(ISBN:978-1419675492 Forth Inc.) ** ANS Forthの規格書で、WordSetの詳細が書かれている。 これらの書籍を手に入れられれば、Forthの理解が格段に進むはずです。電子書籍としても出版されているものがあります。 === オンラインリソース === {{Wikipedia}} インターネット上にも無料で参照できるForth関連の豊富なリソースが存在します。 * Forth Interest Group ( https://www.forth.org/ ) ** Forthに関する書籍、記事、リソースなどが集まるポータル。 * Forth-Standard-Committee 公式サイト( https://forth-standard.org/ ) Webサイト、ソースコード、ニュースレターなど、さまざまな形でリソースが公開されているので、活用していきたいものです。 === Forthコミュニティ === 長年にわたりForth言語を支える活発なコミュニティが存在し、開発者同士が支え合う環境があります。 * Newsgroups: comp.lang.forth ** ディスカッションの場となるForth専用のニュースグループ。 * 地域 Forth グループ ** ヨーロッパ、アメリカ、アジアなどの地域Forthグループ。 オンラインフォーラムやメーリングリスト、対面の勉強会など、様々な形でForth開発者同士が交流を深めています。初心者でもこうしたコミュニティに参加することで、サポートを受けられます。Forthの小さな世界ですが、地域を越えて開発が行われているのが特徴です。 Forthの参考文献やオンラインリソース、そしてコミュニティを上手く活用することで、この独特な言語の理解が一層深まるはずです。 == 脚註 == <references /> [[Category:Forth|*]] [[Category:プログラミング言語]] qpkfc9z57z5fg5peqfo7i2nwglzz76f 246672 246671 2024-04-14T01:25:24Z Ef3 694 /*浮動小数点数*/ Forthの浮動小数点数についての情報は、Forth-2012仕様におけるオプションの浮動小数点数ワードセットに関連しています。以下にその内容の要点をまとめます。 浮動小数点数の基本 浮動小数点数は、DECIMALのBASEで入力する必要があります。任意の基数での浮動小数点数の入力は許可されていません。 標準システムで解釈されるすべての浮動小数点数には、指数インジケーター "E" を含める必要があります。 浮動小数点数の例 1e 3.14e 1.2e3 1e9 wikitext text/x-wiki == はじめに == Forthはスタック指向のプログラミング言語であり、そのシンプルさと柔軟性から広く用いられています。 本書は、プログラマがForthを効果的に使いこなすための手引書として設計されています。例示や実践的なヒントが豊富に盛り込まれており、読者は理論を理解しながら実際のプロジェクトに応用できるでしょう。 本書を通じて、Forthの魅力と実力を十分に体感し、その利用価値を最大限に引き出すことができるでしょう。 本書では、ForthのCore Word Setに準拠した標準的なForthシステムを題材とします。 == Forthプログラミングの基礎 == Forthはスタック指向のプログラミング言語であり、独自の特徴を持っています。以下では、Forthプログラミングの基礎を解説します。 === スタック操作 === [[スタック構造|スタック]]は、Forthにおける中心的なデータ構造です。ほとんどのワードは、スタックから値を取り出したり、スタックに値を代入したりします。スタックは、後入れ先出し(LIFO; Last In First Out)のデータ構造で、Forthの演算はスタック上で行われます。 === 例 === 以下は、Forthでの簡単な計算の例です: :<syntaxhighlight lang=forth> 3 4 + . </syntaxhighlight> : まず<code>3</code>をスタックに置き、<code>4 + .</code> を解釈します。 : 次に、<code>4</code>をスタックに置き、<code>3 4</code> となり、<code>+ .</code> が残ります。 : そして、<code>+</code> はスタックのトップの2つの要素を加算して結果を戻し、スタックには<code>7</code>だけが残ります。 : 最後に、<code>.</code>(ドット)はスタックから<code>7</code>を取り除いてそれを表示します。 :{| |- !コード!!style='width:3em'| 3 !!style='width:3em'| 4 !!style='width:3em'| + !!style='width:3em'| . |- !スタックトップ |style="border:1px solid black; text-align:center"| 3 ||style="border:1px solid black; text-align:center"| 4 ||style="border:1px solid black; text-align:center"| 7 || |- ! | ||style="border:1px solid black; text-align:center"| 3 || || |- !出力 | || || ||style="text-align:center; font-weight: bold"| 7 |} === コメント === Forthでは、コメントは括弧で囲んで表現されます。例えば: :<syntaxhighlight lang=forth> ( これはコメントです ) </syntaxhighlight> <code>/</code> から行末までもコメントです :<syntaxhighlight lang=forth> 3 4 + \ 3 + 4 の結果をスタックトップに残す </syntaxhighlight> コメントは、インタプリタの動作に影響を与えません。 === スタックエフェクト === Forthの各ワードは、スタック上で特定の操作を行います。ワードのドキュメントでは、それがスタックに対してどのような影響を与えるかを示す記述があります。例えば: :<syntaxhighlight lang=forth> + ( a b -- c ) </syntaxhighlight> この記述は、<code>+</code>ワードが2つの引数(<code>a</code>と<code>b</code>)を消費し、1つの結果(<code>c</code>)をスタックに残すことを意味します。 === Forthのワードとは?その定義と使用について === Forthにおける「ワード」とは、基本的には単語や言葉を意味しますが、Forthプログラミングでは、より具体的には次の2つの意味を持ちます。 # 定義済みの単語 #: ワードは、Forthの語彙において定義された単語や操作を指します。Forthでは、これらのワードはスタック操作や制御構造、算術演算などの基本的な機能を表します。例えば、<code>+</code>は2つの数値を取り出して足し合わせ、結果をスタックに戻すワードです。 # 新しい単語の定義 #: ワードは、Forthプログラム内で新しい単語を定義するための仕組みとしても使われます。これは、既存のワードを組み合わせて、新しい機能を持つ単語を定義することを意味します。例えば、<code>DOUBLE</code>というワードを定義して、与えられた数値を2倍にするような操作を定義することができます。 ワードの定義は、通常、次のような形式で行われます: :<syntaxhighlight lang=forth> : ワード名 ( 定義部分 ) ; </syntaxhighlight> ここで、<code>: ワード名</code>は新しいワードの定義を開始し、<code>;</code>は定義の終了を示します。定義部分には、既存のワードや操作を組み合わせて、新しい機能を実現するForthのコードが記述されます。 === ワードの定義と使用例 === Forthにおけるワードの定義と使用についてさらに詳しく説明します。 # ワードの定義 : #: ワードは、<code>:</code> と <code>;</code> の間に記述されたコードブロックで定義されます。 #: 例えば、<code>SQUARE</code>という新しいワードを定義してみましょう。 #:<syntaxhighlight lang=forth> : SQUARE ( n -- n*n ) DUP * ; </syntaxhighlight> #: ここでは、<code>SQUARE</code>というワードが定義されています。このワードは、スタックから1つの数値を取り出し、その数値を自乗して結果をスタックに戻します。 # ワードの使用 : #: 定義したワードは、Forthプログラム内で直接使用することができます。 #:<syntaxhighlight lang=forth> 5 SQUARE . \ スタックから5を取り出して自乗し、結果を表示する </syntaxhighlight> #:上記の例では、<code>5 SQUARE .</code> というForthコードが実行されます。まず、<code>5</code>がスタックに積まれ、次に<code>SQUARE</code>ワードが実行されて、<code>5</code>の自乗である<code>25</code>が計算されます。最後に<code>.</code>はスタックのトップの値を表示しますので、結果として<code>25</code>が表示されます。 # 組み込みワードとカスタムワード : #: Forthには組み込みのワード(<code>+</code>, <code>-</code>, <code>*</code>, <code>/</code>など)がありますが、ユーザーはこれに加えて独自のワードを定義することができます。カスタムワードを使うことで、プログラムをより効率的に構築できます。 # 再帰的なワード : #: Forthでは、ワードは自身の中で再帰的に呼び出すことができます。これにより、複雑な演算や制御構造を簡潔に表現することが可能です。 ワードの定義と使用は、Forthプログラムの中核的な部分を構成します。これにより、プログラムの再利用性、メンテナンス性、可読性が向上し、効率的なコーディングが実現されます。 === 基本的な制御構造 === Forthの制御構造は、他のプログラミング言語とは異なり「制御構造もワードの集合から定義する」という独自の特徴を持っています。Forthでは、基本的な制御構造として条件分岐とループが利用されます。 制御構造に関するワードは、コンパイル時(つまり <code>:</code> から <code>;</code> までの間)でのみ使用でき会話モードでは使用できません。 ==== 条件分岐 ==== Forthでは、条件分岐は主に <code>IF</code>, <code>ELSE</code>, <code>THEN</code> のワードを組み合わせて実現されます。 ; 例: :<syntaxhighlight lang=forth> : ABS ( n -- |n| ) DUP 0< IF NEGATE THEN ; </syntaxhighlight> この例では、<code>ABS</code>というワードを定義しています。このワードは、スタックから数値を取り出し、その絶対値を計算して結果をスタックに戻します。<code>DUP 0<</code> はスタックトップの値が0より小さいかどうかをチェックし、<code>IF</code> から <code>THEN</code> の間に記述されたブロックが条件を満たす場合に実行されます。つまり、もし数値が負の場合は <code>NEGATE</code> が実行されます。 ==== ループ ==== Forthでは、ループは <code>DO</code>, <code>LOOP</code> や <code>BEGIN</code>, <code>WHILE</code>, <code>REPEAT</code> のワードを使って実装されます。 ; 例: :<syntaxhighlight lang=forth> : COUNTDOWN ( n -- ) 0 DO I . LOOP ; </syntaxhighlight> 上記の例では、0から与えられた数値(<code>n</code>)までカウントダウンする<code>COUNTDOWN</code>というワードを定義しています。 ==== その他の制御構造 ==== Forthには他にも、<code>CASE</code>, <code>OF</code>, <code>ENDOF</code>, <code>ENDCASE</code> を使った条件分岐や、<code>IF-ELSE-ENDIF</code> 構造、<code>BEGIN-UNTIL</code>、<code>BEGIN-WHILE-REPEAT</code> など、さまざまな制御構造が存在し、新たな制御構造をユーザーが定義することすら出来ます。 Forthの制御構造は、スタック指向の特性に基づいてシンプルかつ柔軟に設計されており、独自のプログラミングスタイルを持つことが特徴です。 === スタック操作の基本命令 === Forthにはスタック上のデータを操作するための基本的な命令があります。 * <code>DUP</code>: ( n -- n n ) スタックのトップの要素を複製する * <code>DROP</code>: ( n -- ) スタックのトップの要素を削除する * <code>SWAP</code>: ( n1 n2 -- n2 n1 ) スタックのトップとその下の要素を交換する * <code>OVER</code>: (n1 n2 -- n1 n2 n1 ) スタックのトップの2つ下の要素を複製してトップに置く * <code>ROT</code>: ( n1 n2 n3 — n2 n3 n1 ) スタックのトップの3つ下の要素をトップに回転する === 基本的な演算 === Forthには、算術演算(<code>+</code>、<code>-</code>、<code>*</code>、<code>/</code>など)、論理演算(<code>AND</code>、<code>OR</code>、<code>NOT</code>)、比較(<code>=</code>、<code><></code>、<code>></code>、<code><</code>など)の基本ワードが用意されています。これらのワードは、スタック上の値を取り、演算結果をスタックに代入します。 === 再帰的呼び出し === Forthで再帰的呼び出しを行う場合、ワード <code>recurse</code> を使ってワード自身を表します。 再帰的なワードを定義する方法について説明します。 ==== 階乗 ==== 再帰的な階乗(factorial)を定義します。 :<syntaxhighlight lang=forth> : factorial ( n -- result ) dup 0= if \ スタックのトップの値が0かどうかをチェック drop 1 \ もし0ならば、結果は1として処理を終了 else dup 1 - \ スタックのトップの値から1を引いた値をコピー recurse * \ 再帰的に自身を呼び出して、その結果にスタックのトップの値を掛ける then ; </syntaxhighlight> この定義の内容を説明します。 * ワード <code>factorial</code> は、<code>( n -- result )</code> のスタックエフェクトを持ちます。<code>n</code> は階乗を計算する整数です。 * <code>dup 0=</code>: スタックのトップの値が0かどうかをチェックします。 ** もし0ならば、<code>drop 1</code> が実行されて、スタックのトップの値(<code>n</code>)が削除され、結果として <code>1</code> がスタックにプッシュされます。 * <code>else</code>: もしスタックのトップの値が0でない場合は、次の操作が実行されます。 ** <code>dup 1 -</code>: スタックのトップの値から <code>1</code> を引いた値をスタックにプッシュします。これは <code>n - 1</code> の計算です。 ** <code>recurse *</code>: 自身の <code>factorial</code> を再帰的に呼び出して、結果に対してスタックのトップの値(<code>n</code>)を掛けます。これにより、<code>n! = n * (n-1)!</code> の計算が行われます。 * <code>then</code>: <code>if</code> ブロックの終了を示します。 例えば、<code>5 factorial .</code> を実行すると、<code>5</code> の階乗(<code>5!</code>)が計算されます。 :<syntaxhighlight lang=forth> 5 factorial . </syntaxhighlight> この例では、<code>5!</code> の計算手順は以下の通りです: * <code>5</code> がスタックにプッシュされる。 * <code>factorial</code> が呼び出される。 ** <code>dup 0=</code>: スタックのトップの値が0でないので、次の処理が実行される。 ** <code>dup 1 -</code>: <code>5 - 1</code> が計算されて <code>4</code> がスタックにプッシュされる。 ** <code>recurse *</code>: <code>4</code> の階乗 (<code>4!</code>) が再帰的に計算される。 *** <code>dup 0=</code>: スタックのトップの値が0でないので、次の処理が実行される。 *** <code>dup 1 -</code>: <code>4 - 1</code> が計算されて <code>3</code> がスタックにプッシュされる。 *** <code>recurse *</code>: <code>3</code> の階乗 (<code>3!</code>) が再帰的に計算される。 **** ... ***** 最終的に、<code>1</code> の階乗 (<code>1!</code>) が計算されて <code>1</code> がスタックにプッシュされる。 **** <code>5 *</code>: <code>5</code> と <code>4!</code> の結果を掛けて <code>120</code> がスタックにプッシュされる。 *** <code>5 *</code>: <code>5</code> と <code>120</code> の結果を掛けて <code>120</code> がスタックにプッシュされる。 * <code>. (dot)</code> コンパイラワ ==== 最大公約数(GCD) ==== 再帰的にユークリッドのアルゴリズムを使用して最大公約数(Greatest Common Divisor, GCD)を計算します。 :<syntaxhighlight lang=forth> : gcd ( u1 u2 -- gcd ) dup 0= if \ スタックのトップの値が0かどうかをチェック drop \ スタックのトップの値が0ならば削除して終了 else swap over mod recurse \ スタックのトップと2番目の値を入れ替えて、modを計算し再帰的に呼び出す then ; </syntaxhighlight> このプログラムの動作をステップごとに説明します: # <code>dup 0=</code>: スタックのトップの値(<code>u1</code>)が0かどうかをチェックします。 #* もし0ならば、<code>drop</code> が実行されて、スタックのトップの値(<code>u1</code>)が削除されます。この場合は再帰の終了条件となります。 # <code>else</code>: もしスタックのトップの値(<code>u1</code>)が0でない場合は、次の操作が実行されます。 # <code>swap over mod recurse</code>: #* <code>swap</code>: スタックのトップと2番目の値を入れ替えます。これにより、<code>u1</code> と <code>u2</code> の値が入れ替わります。 #* <code>over</code>: スタックの2番目の値(入れ替え前の <code>u1</code>)をスタックのトップにコピーします。 #* <code>mod</code>: スタックのトップの2つの値を取り出して、<code>u1 % u2</code>(<code>u1</code> を <code>u2</code> で割った余り)を計算し、その結果をスタックにプッシュします。 #* <code>recurse</code>: 自身の <code>gcd</code> を再帰的に呼び出します。これにより、新しい <code>u1</code> と <code>u2</code> の値がスタックに積まれ、再帰的に最大公約数が計算されます。 # <code>then</code>: <code>if</code> ブロックの終了を示します。 例えば、<code>12 18 gcd .</code> を実行すると、以下のように動作します: * <code>12</code> と <code>18</code> がスタックにプッシュされます。 * <code>gcd</code> が呼び出されます。 ** <code>dup 0=</code>: <code>18</code> は0ではないので、次の処理に進みます。 ** <code>swap over mod recurse</code>: <code>18</code> と <code>12</code> が入れ替わり、<code>18 % 12</code> が計算されます(余りは <code>6</code>)。 ** <code>gcd</code> が再帰的に呼び出され、新しい値 <code>12</code> と <code>6</code> がスタックにプッシュされます。 *** <code>dup 0=</code>: <code>6</code> は0ではないので、次の処理に進みます。 *** <code>swap over mod recurse</code>: <code>6</code> と <code>12</code> が入れ替わり、<code>6 % 12</code> が計算されます(余りは <code>6</code>)。 *** <code>gcd</code> が再帰的に呼び出され、新しい値 <code>6</code> と <code>6</code> がスタックにプッシュされます。 **** <code>dup 0=</code>: <code>6</code> は0ではないので、次の処理に進みます。 **** <code>swap over mod recurse</code>: <code>6</code> と <code>6</code> が入れ替わり、<code>6 % 6</code> が計算されます(余りは <code>0</code>)。 **** <code>0=</code>: <code>0</code> が0なので、<code>drop</code> が実行されて、スタックのトップの値 <code>0</code> が削除されます。 * 最終的に、スタックのトップには <code>6</code> が残ります。これが <code>12</code> と <code>18</code> の最大公約数です。 したがって、<code>12 18 gcd .</code> を実行すると、<code>6</code> が表示されます。 === 変数の宣言・代入と参照 === Forthにおける <code>VARIABLE</code> は、変数を定義するためのワードです。Forthでは、変数はメモリ内のアドレスに名前を関連付ける方法で定義されます。 以下は、<code>VARIABLE</code> を使用して変数を定義する方法とその使い方の例です。 ==== <code>VARIABLE</code> の使用方法 ==== <code>VARIABLE</code> は以下のように使用します: :<syntaxhighlight lang=forth> VARIABLE my-var \ my-var という名前の変数を定義する </syntaxhighlight> この行は、名前が <code>my-var</code> の変数を定義します。この変数はメモリ内の特定のアドレスに関連付けられます。 ==== 変数の使用方法 ==== 定義された変数を使用するには、<code>@</code>(fetch)や <code>!</code>(store)などのワードを使います。これらのワードを使って変数の値を取得したり設定したりできます。 - <code>@</code> は、変数の値をスタックにプッシュします。 - <code>!</code> は、スタックのトップの値を変数に代入します。 例えば、次のように変数に値を設定して取得します: :<syntaxhighlight lang=forth> 123 my-var ! \ 変数 my-var に値 123 を代入する my-var @ . \ 変数 my-var の値を表示する </syntaxhighlight> この例では、変数 <code>my-var</code> に <code>123</code> を代入し、その後 <code>@</code> を使って変数の値を取得して表示しています。 ==== 実際の例 ==== 以下は、<code>VARIABLE</code> を使って変数を定義し、値を設定して取得する具体的な例です: :<syntaxhighlight lang=forth> VARIABLE my-var \ my-var という名前の変数を定義する 123 my-var ! \ 変数 my-var に値 123 を代入する my-var @ . \ 変数 my-var の値を表示する </syntaxhighlight> この例では、変数 <code>my-var</code> を定義し、<code>123</code> を代入してその値を表示しています。<code>!</code> で変数に値を設定し、<code>@</code> で変数の値を取得しています。 変数はプログラムでデータを保持する際に便利です。Forthでは、変数の値は直接メモリ上に代入されるため、効率的なデータ管理が可能です。 === 定数の定義と参照 === Forthの <code>CONSTANT</code> は、定数を定義するためのワードです。定数は変更されることのない値であり、プログラムの中で何度も使われる値を簡潔に表現するために使用されます。 ==== <code>CONSTANT</code> の使用方法 ==== <code>CONSTANT</code> は以下のように使用します: :<syntaxhighlight lang=forth> 123 CONSTANT my-const \ my-const という名前の定数を定義する </syntaxhighlight> この行は、名前が <code>my-const</code> の定数を定義し、その値を <code>123</code> に設定します。定数はプログラム中で使用される値を一元管理し、可読性を向上させます。 ==== 定数の使用方法 ==== 定義された定数は、その名前を使ってプログラム中で値を参照することができます。 :<syntaxhighlight lang=forth> my-const . \ 定数 my-const の値を表示する </syntaxhighlight> この例では、定数 <code>my-const</code> の値が表示されます。 ==== 実際の例 ==== 以下は、<code>CONSTANT</code> を使って定数を定義し、その定数を使用する具体的な例です: :<syntaxhighlight lang=forth> 123 CONSTANT my-const \ my-const という名前の定数を定義する my-const . \ 定数 my-const の値を表示する </syntaxhighlight> この例では、定数 <code>my-const</code> を <code>123</code> に設定し、その後定数の値を表示しています。 定数はプログラム中で共通の値を使い回す際に便利です。Forthの定数は一度定義されると値が変更されることはなく、プログラム全体で一貫性のある値を提供します。 === 基数 === Forthの <code>BASE</code> は、数値の基数(n進数のn)を設定するための変数です。Forthでは、数値の表現において基数を変更することができます。通常、Forthはデフォルトで10進数を使用しますが、<code>BASE</code> を変更することで他の基数(2進数、16進数など)で数値を表現することが可能です。 ==== <code>BASE</code> の使用方法 ==== <code>BASE</code> は以下のように使用します: :<syntaxhighlight lang=forth> 16 BASE ! \ 基数を16進数に設定する </syntaxhighlight> この行は、<code>BASE</code> の値を <code>16</code> に設定しています。これにより、その後の数値の表示や入力が16進数で行われるようになります。 ==== 基数の変更と数値の表現 ==== <code>BASE</code> を変更することで、その後の数値リテラルの表現が変わります。例えば、<code>BASE</code> を16進数に設定した場合、数値リテラルは16進数として解釈されます。 :<syntaxhighlight lang=forth> 16 BASE ! \ 基数を16進数に設定する FF . \ 16進数の255を表示する </syntaxhighlight> この例では、<code>BASE</code> を16進数に設定してから、<code>FF</code> を表示すると、16進数の <code>FF</code> (10進数の <code>255</code>)が表示されます。 ==== デフォルトの基数と再設定 ==== Forthのデフォルトの基数は10進数です。基数を変更した後は、必要に応じて再度基数を10進数に戻すことができます。 :<syntaxhighlight lang=forth> DECIMAL BASE ! \ 基数を10進数に戻す </syntaxhighlight> この行は、<code>BASE</code> を10進数に再設定しています。これにより、数値リテラルは再び10進数として解釈されるようになります。 よくある間違い: :<syntaxhighlight lang=forth> 10 BASE ! \ 基数を16進数から10進数に戻す??? </syntaxhighlight> : として基数を10に戻そうとするミスがあります。 : コードの 10 は16進数として解釈されるので基数は16のままです。 ==== 注意点 ==== <code>BASE</code> を変更すると、数値の解釈や表示が変わるため、基数の変更後には適切な基数に戻すことが重要です。また、<code>BASE</code> の値は変数として扱われるため、必要に応じて保存や復元することができます。 基数を変更することで、特定の基数で数値を扱うプログラムを簡単に記述することができます。 === イミディエイトワード === イミディエイトワード(immediate word)は、Forthプログラミング言語において特定の動作を持つワードの一種です。イミディエイトワードは、通常のワードとは異なり、コンパイル時ではなく実行時に直ちに処理されます。 以下は、イミディエイトワードの特性について詳しく説明します: # 実行時処理: #* イミディエイトワードは、定義された時点ではコンパイルされず、実行時に直ちに解釈および実行されます。 #* 通常のワード(コンパイルワード)は、単なるコンパイル時にスタックに動作を積むだけであり、後で実行されますが、イミディエイトワードは定義された時点ですぐに実行されます。 # 定義方法: #* イミディエイトワードは、<code>IMMEDIATE</code> を使用して定義されます。 #* これにより、そのワードが定義された直後に実行されるようにマークされます。 # 使用例: #* 例えば、<code>."</code>(ダブルクォートピリオド)はイミディエイトワードです。これは、コンパイル時ではなく実行時に文字列を表示します。 #* <code>: greeting ." Hello, world!" ;</code> という定義では、<code>. "</code>Hello, world!"<code> はコンパイル時に実行されず、</code>greeting` を実行したときに実行されます。 # 動的な挙動: #* イミディエイトワードは、通常のワードとは異なり、実行時の環境やスタックの状態に応じて動的に振る舞います。 #* これにより、実行時に動的なテキストや操作を生成するために使用することができます。 イミディエイトワードは、Forthの柔軟性と強力な動的な特性を提供します。コンパイル時に制御構造や動作を決定するだけでなく、実行時に動的な挙動を持つことができます。 {{コラム|Forthの文法|2=Forthのプログラムは、空白文字で区切られた「ワード」の並びで構成されます。ワードには、数値リテラル、制御構造、演算子、そして他のワードを呼び出す構文などがあります。Forthには高水準の構文がなく、基本的な構文要素は非常にシンプルです。 例えば、<code>2 3 +</code> と入力すると、2と3がスタックにプッシュされ、最後の<code>+</code>がスタック上の2つの数値を加算します。この結果である5がスタックに残ります。つまり、Forthではプログラムの実行とデータ操作が、ワードの解釈とスタック操作によって行われるのです。 Forthは、基本的に行指向の言語です。プログラムは複数行に分割できますが、改行の前後で文が継続する場合は、スペースを入れる必要があります。このため、適切なインデントを使ってプログラムの構造をわかりやすくすることが重要です。 }} == データ型 == Forthには明示的なデータ型宣言がないため、データ型は主に暗黙的に扱われます。Forthでは、データ型はデータの解釈や使用方法に依存します。以下では、Forthでよく使用されるデータ型について説明します。 === セル(Cell) === セルは、通常2バイトまたは4バイトのサイズを持つ整数型です。Forthの基本的なデータ型であり、スタックやメモリ内のデータはセル単位で扱われます。セルのサイズは実装によって異なる場合があります。 === 符号付き整数(Signed Integer)と符号なし整数(Unsigned Integer) === Forthは整数を符号付きとしても、符号なしとしても扱うことができます。通常はセル内のビットパターンに基づいて解釈されます。算術演算や比較演算などが適用されますが、具体的な整数型に明示的に制限はありません。 === 文字(Character) === Forthでは文字は通常、符号なし整数として扱われます。ASCII文字セット内の範囲(通常は0から255)の数値として表現されます。文字に対する演算は、数値としての操作として扱われます。 === 文字列(String) === 文字列はカウント付き文字列(Counted String)やnull終端文字列(Null-terminated String)として表現されることがあります。カウント付き文字列では、最初のバイトが文字列の長さを示し、その後に文字のデータが続きます。文字列は通常、メモリ上の連続した領域に格納されます。文字列の操作には、<code>WORD</code>、<code>FIND</code>、<code>C"</code>などの専用のワードが用意されています。 === アドレス(Address) === Forthではアドレスも整数として扱われます。アドレスはメモリ上の位置を示す整数値であり、アドレス演算は通常の整数演算と同様に行われます。アドレス演算には、<code>CHAR+</code>、<code>CELLS</code>、<code>FLOAT+</code>などの専用のワードが用意されています。 === データ型の制約と振る舞い === Forthでは、データ型に関する制約やチェックはコンパイラやランタイムによっては'''行われません'''。プログラマはデータを正しく扱う責任があります。特にプログラムの移植性を考慮する場合は、適切なデータ型の使用が重要です。 データ型はForthの柔軟性とパフォーマンスの両方をサポートするため、プログラマに柔軟性と責任を与えます。それぞれのアプリケーションや環境に応じて、適切なデータ型を選択することが重要です。 == 浮動小数点数 == Forthの浮動小数点数についての情報は、Forth-2012仕様におけるオプションの浮動小数点数ワードセットに関連しています。以下にその内容の要点をまとめます。 ; 浮動小数点数の基本 :* 浮動小数点数は、<code>DECIMAL</code>の<code>BASE</code>で入力する必要があります。任意の基数での浮動小数点数の入力は許可されていません。 :* 標準システムで解釈されるすべての浮動小数点数には、指数インジケーター "E" を含める必要があります。 :;浮動小数点数の例 ::<syntaxhighlight lang=forth> 1e 3.14e 1.2e3 1e9 </syntaxhighlight> ; 浮動小数点数のフォーマットと範囲 :* 浮動小数点数の有効桁数や指数のフォーマット、範囲は、Forth-2012では実装に依存します。IEEE浮動小数点数フォーマットが一般的に使用されています。 ; 浮動小数点数のワードセット :* Floating-Point Extensionsワードセットには、<code>DF@</code>、<code>SF@</code>、<code>DF!</code>、<code>SF!</code>などのワードが含まれています。これらは、倍精度および単精度のIEEE浮動小数点フォーマットの数値をメモリに格納するためのものです。 ; 浮動小数点数の入力 :* 浮動小数点数をASCII形式で入力するためには、<code>>FLOAT</code>ワードが使用されます。これは、標準Forthシステムや他の広く使用されるプログラミング環境からデータを受け入れるために広範な構文を許容します。 ; 実装の注意点 :* カスタムの浮動小数点数データ構造を定義する際には、アドレスの整列(alignment)に注意する必要があります。<code>CREATE</code>が適切な浮動小数点数の整列を行わない場合は、コンパイル時および実行時に適切な整列を指定する必要があります。 == 実行トークン == Forthにおける実行トークン(Execution Token; xt)は、ワード(Word)や定義体(Definition)の実行を指示するためのデータ構造です。実行トークンは、コードワードを指すための一意の識別子として機能します。以下は、Forthの実行トークンについての詳細です。 ; 実行トークンの定義 : 実行トークンは、通常、ワードや定義体の実行を示すために使用される整数またはポインタです。これは通常、コンパイラやインタプリタ内部で使用され、特定のワードや定義体を表す一意の識別子として機能します。 ; 実行トークンの使用 : Forthのコードは、実行トークンを使用してワードや定義体を実行します。実行トークンは通常、スタックや辞書(Dictionary)に格納され、必要なときに取り出されて使用されます。 ; ' (Tick) 記号 : 一般的なForthのプログラミングスタイルでは、実行トークンを取得するためにシングルクォート(')記号が使用されます。例えば、<code>' DUP</code> は <code>DUP</code> ワードの実行トークンを取得します。 ; 実行トークンと定義体の関連付け : 実行トークンは、定義体やコードワードと関連付けられます。通常、辞書内のワードエントリは、そのワードの実行トークンを参照します。これにより、プログラムは実行トークンを使用して、辞書内のワードを特定して実行することができます。 ; ランタイムスタックとの関係 : Forthのランタイムスタックは、実行トークンを使用してコードを実行します。コンパイルされたForthコードは、ランタイムスタック上で実行トークンを取り出して、対応するワードや定義体を実行します。 ; 実行トークンの特徴 : 実行トークンは、Forthの柔軟性と効率性を向上させるために使用されます。コンパイラやインタプリタは、実行トークンを介してワードを効率的に実行し、辞書の管理を行います。 ; 実行トークンの安全性 : Forthでは、実行トークンは通常、ユーザーからは直接操作されず、コンパイラやランタイムシステム内部で使用されます。これにより、実行トークンを誤って操作することがなく、安全なプログラミング環境が提供されます。 Forthの実行トークンは、言語の内部実装の詳細を隠蔽し、プログラマに柔軟性と効率性を提供する重要な概念です。 == コンパイル時ワード == Forthには、コンパイル時に処理される特殊なワードがあります。これらをコンパイル時ワードと呼びます。 主なコンパイル時ワードには以下のようなものがあります: # コンパイル時の定義操作 #* <code>:</code> (コロン) - 新しい定義を開始する(<code>:</code>自身は通常の逐次ワード) #* <code>;</code> (セミコロン) - 定義を終了しコンパイルモードを抜ける #* <code>CONSTANT</code>、<code>VARIABLE</code>、<code>DEFER</code> - 定数、変数、遅延定義を作成する # コンパイル時の制御 #* <code>IF</code>、<code>ELSE</code>、<code>THEN</code>、<code>BEGIN</code>、<code>UNTIL</code> など - 条件分岐やループなどの制御構造を定義する #* <code>LITERAL</code> - スタックトップの値をコンパイル時に埋め込む # その他のコンパイル時操作 #* <code>IMMEDIATE</code> - 定義をすぐに実行されるように指定する #* <code>[COMPILE]</code> - 次のワードをコンパイル時に実行する #* <code>POSTPONE</code> - 次のワードの実行トークンをコンパイルする これらのコンパイル時ワードは、Forthのプログラムの構造を定義したり、実行時の振る舞いを制御したりするために使われます。 通常のワードとは異なり、これらのコンパイル時ワードはコンパイル時に処理され、実行時には特殊な動作をするようになっています。これにより、Forthのプログラミングモデルを柔軟に拡張することができます。 == データ構造とメモリ管理 == Forthは組み込みシステムなどのリソース制約の厳しい用途を想定して設計されているため、メモリの効率的な利用が重視されています。この章では、Forthにおけるデータ構造とメモリ管理の方法を説明します。 === コントロールフロースタック === コントロールフロースタックとは、Forthのプログラムの制御フローを管理するために使用される仮想的なスタックです。 その主な役割は以下の通りです: # 制御フロー命令の対応関係の管理 #* 制御フロー命令(<code>IF</code>, <code>THEN</code>, <code>ELSE</code>, <code>BEGIN</code>, <code>WHILE</code>, <code>REPEAT</code> など)の対応関係を管理します。 #* 開始と終了の命令が適切に対応していることを確認します。 # 制御フロー中のデータスタック操作の制約 #* 制御フロー中のデータスタックの使用方法に制約を課します。 #* 制御フロー命令の入れ子関係に応じて、適切なデータスタックの状態が維持されるようにします。 コントロールフロースタックは物理的に実装されていなくても良いと仕様で定められています。 代わりに、システムはコンパイル時や実行時にこのスタックの挙動を模倣する方法を採ることができます。 つまり、コントロールフロースタックはForthの制御構造の妥当性を保証する上で重要な概念であり、プログラムの正しい実行を支えているのです。 通常のプログラミングでコントロールフロースタックを強く意識することはありませんが、制御構造を自らワードとして定義しようとする場合、コントロールフロースタックの振る舞いに注意する必要があります。 === リターンスタック === Forthには、データスタックとは別に、リターンスタックと呼ばれる重要なスタックが存在します。リターンスタックの主な役割は以下の通りです: # 関数呼び出しとリターン #* 関数を呼び出すとき、その関数の呼び出し元の命令アドレスがリターンスタックにプッシュされます。 #* 関数から抜け出すときは、リターンスタックからアドレスがポップされ、その場所に制御が戻されます。 #* これによって、関数呼び出しの際の制御の移動を管理することができます。 # 一時的データ保管 #* リターンスタックは、データを一時的に保管する場所としても使えます。 #* データスタックからデータを>Rでリターンスタックにプッシュし、後でR>で取り出すことができます。 #* これにより、データスタックの状態を一時的に変更せずに、値を保持しておくことができます。 リターンスタックの使用には注意点があります: * ワード内やループ内では、<code>>R</code>と <code>R></code>の回数が一致している必要があります。 * リターンスタックの値は、同じブロック内でのみ参照・取り出しできます。 * ループの脱出時やDO-ループ内からは、リターンスタックの値を取り出せません。 つまり、リターンスタックは制御フローの管理と一時的なデータ保管に使われますが、その使い方には一定の制限があるため、注意深く扱う必要があります。 プログラムの複雑さが増すと、リターンスタックの状態を適切に管理することが難しくなるため、できるだけ単純な使い方に留めるのが賢明です。 ; <code>>R ( x -- ) ( R: -- x )</code> : データスタックから値をポップしリターンスタックにプッシュする ; <code>R> ( R: -- x ) ( x -- )</code> : リターンスタックから値をポップしデータスタックにプッシュする ; <code>R@ ( -- x ) ( R: x -- x )</code> : リターンスタックのスタックトップをデータスタックにコピーする ; <code>2>R ( x1 x2 -- ) ( R: -- x1 x2 )</code> ; <code>2R> ( -- x1 x2 ) ( R: x1 x2 -- )</code> ; <code>2R@ ( -- x1 x2 ) ( R: x1 x2 -- x1 x2 )</code> スタックエフェクトに <code>R:</code> という新しい記号が出てきましたが、これはリターンスタックへの操作をしまします。このためリターンスタックはRスタックとも呼ばれています。 === 変数とアドレス指定 === Forthには、グローバル変数やローカル変数の概念がありません。代わりに、値を格納するためのメモリ領域を確保し、そのアドレスを使ってアクセスします。<code>VARIABLE</code>ワードを使うと、新しい変数領域が確保され、その開始アドレスがスタックに置かれます。 :<syntaxhighlight lang=forth> VARIABLE COUNTER \ カウンター変数を定義 COUNTER @ . \ 変数の値を表示(初期値は0) 1 COUNTER +! \ 変数にインクリメント </syntaxhighlight> 変数の値を取り出すには<code>@</code>(フェッチ)、格納するには<code>!</code>(ストア)を使います。<code>+!</code>のように算術演算と<code>!</code>を組み合わせたワードもあります。 Forthではアドレスを直接スタックに置いて操作することもできます。<code>HERE</code>はディクショナリの次の空きアドレスを取得し、<code>ALLOT</code>はディクショナリ領域を確保します。 ==== データスペース(Data Space) ==== Forthのデータスペースとは、メモリ内の連続した領域を指し、データやワードの定義などが格納される場所です。Forthでは、データスペースは主に '''ヒープ(heap)''' と '''ディクショナリ(dictionary)''' の2つの領域に分かれています。 * '''ヒープ''': データスタックやワードの実行時に使用される一時的な領域です。ここでは、動的に割り当てられたデータや一時的な計算に使用されるデータが保持されます。 * '''ディクショナリ''': ワード(ワード)の定義やその実装が格納される領域です。Forthのディクショナリはワードの名前とそれに対応する実行可能なコードへのポインタを保持します。 ==== <code>HERE</code> ワード ==== <code>HERE</code> はForthで使用される特定のワードであり、現在のデータスペース内の「ここ(here)」の位置を示します。具体的には、ディクショナリ内の次の空き領域の先頭アドレスを指します。 <code>HERE</code> を使用すると、新しいワードやデータをデータスペースに格納する際に位置を特定することができます。主にワードの定義やデータの動的な確保に使用されます。 例えば、新しい変数や配列を定義する場合、<code>HERE</code> の値を参照して適切なメモリ領域を割り当て、その後 <code>HERE</code> を更新します。 具体的な使用例を示します: :<syntaxhighlight lang=forth> HERE . \ 現在のHEREの値を表示(ディクショナリ内の次の空き領域のアドレス) 10 ALLOT \ 10バイトの領域を確保 HERE . \ 確保後のHEREの値を表示 </syntaxhighlight> この例では、まず <code>HERE</code> の値が表示され、次に <code>10 ALLOT</code> によって10バイトの領域が確保されます。その後、再度 <code>HERE</code> の値が表示され、確保された領域の終端アドレスが示されます。 <code>HERE</code> を適切に使用することで、動的なメモリ管理やデータスペースの操作が行えます。 ==== HEREを利用したデータスペースの活用例 ==== ; sieve.fr :<syntaxhighlight lang=forth> : prime? ( n -- ? ) here + c@ 0= ; : composite! ( n -- ) here + 1 swap c! ; : sieve ( n -- ) here over erase 2 begin 2dup dup * > while dup prime? if 2dup dup * do i composite! dup +loop then 1+ repeat drop ." Primes: " 2 do i prime? if i . then loop ; 100 sieve / Primes: 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 </syntaxhighlight> このForthのコードは、エラトステネスの篩(Sieve of Eratosthenes)アルゴリズムを実装しています。このアルゴリズムは、与えられた数 <code>n</code> 以下のすべての素数を見つけるために使用されます。以下では、与えられたコードの各部分を詳しく説明します。 ; <code>prime?</code> ワード :<syntaxhighlight lang=forth> : prime? ( n -- ? ) here + c@ 0= ; </syntaxhighlight> :; <code>( n -- ? )</code>: スタックから整数 <code>n</code> を取り出し、その数が素数であるかどうかの真偽値 <code>?</code> をスタックに積む。 :* <code>here + c@</code>: <code>here</code> は現在のデータスペースの末尾を示し、それに <code>+</code> を使ってワードの<code>n</code>番目のアドレスを取得する。そして <code>c@</code> はそのアドレスの内容(1バイトの文字)を取得する。 :* <code>0=</code>: 取得したバイトが0かどうかをチェックし、0ならば真(素数)を返す。 ; <code>composite!</code> ワード :<syntaxhighlight lang=forth> : composite! ( n -- ) here + 1 swap c! ; </syntaxhighlight> :; <code>( n -- )</code>: スタックから整数 <code>n</code> を取り出す。 :* <code>here + 1 swap c!</code>: <code>here</code> から<code>n</code>のアドレスにを1を1バイトで書き込む。 ; <code>sieve</code> ワード :<syntaxhighlight lang=forth> : sieve ( n -- ) here over erase 2 begin 2dup dup * > while dup prime? if 2dup dup * do i composite! dup +loop then 1+ repeat drop ." Primes: " 2 do i prime? if i . then loop ; </syntaxhighlight> :; <code>( n -- )</code>: スタックから整数 <code>n</code> を取り出す。 :* <code>here over erase</code>: 現在のデータスペース(<code>here</code> から先)を <code>n</code> バイト分消去する。 :* <code>2 begin ... repeat</code>: メインのループ。2から始めて、以下の条件に基づいて処理を繰り返す。 :** <code>2dup dup * ></code>: 現在の値を2つコピーし、2つを掛けた値が <code>n</code> を超えるまで続ける。 :** <code>dup prime? if ... then</code>: 現在の値が素数かどうかをチェックし、素数ならば以下を実行。 :*** <code>2dup dup * do ... dup +loop</code>: 素数の場合、その数の倍数を篩い落とす。内側のループで、その数の倍数を全て <code>composite!</code> でマークする。 :** <code>1+</code>: 現在の数値を1増やす。 :* <code>drop</code>: 最後の数値を削除する。 :* <code>." Primes: " 2 do i prime? if i . then loop</code>: 素数を表示するループ。2から始まり、<code>n</code> まで続ける。各数値が素数ならば表示する。 ; 実行 :<syntaxhighlight lang=forth> 100 sieve </syntaxhighlight> :100以下の素数を見つけるために <code>sieve</code> ワードが実行されます。 === CREATEを使った変数と配列の定義 === Forthの <code>CREATE</code> は、新しい変数や配列をディクショナリに定義するためのワードです。<code>CREATE</code> を使うことで、任意の名前で参照可能なデータ領域を確保し、その領域に対する操作を定義することができます。 以下に、<code>CREATE</code> ワードの基本的な構文と使用方法を示します。 ==== 構文 ==== :<syntaxhighlight lang=forth> CREATE name </syntaxhighlight> * <code>name</code>: 定義する変数や配列の名前を指定します。 ==== 使用方法 ==== # 変数の定義 #:<code>CREATE</code> を使って変数を定義する場合、単に変数の初期値を指定します。 #:<syntaxhighlight lang=forth> CREATE my-var 42 , </syntaxhighlight> #:上記の例では、<code>my-var</code> という名前の変数が定義され、初期値として <code>42</code> が設定されています。<code>,</code> はスタックのトップの値を <code>my-var</code> の定義領域に格納するワードです。 # 配列の定義 #: <code>CREATE</code> を使って配列を定義する場合、配列の要素数や初期値を指定します。 #:<syntaxhighlight lang=forth> CREATE my-array 5 ALLOT </syntaxhighlight> #: 上記の例では、<code>my-array</code> という名前の配列が定義され、5つの要素分の領域が確保されます。各要素には初期値が与えられていないため、初期化が必要な場合は別途行います。 ==== 使用例 ==== このForthのコードは、<code>CREATE</code> を使って変数と配列を定義し、それらに値を格納・表示する例です。 ; 変数の定義と使用 :<syntaxhighlight lang=forth> CREATE x \ 変数 x を定義 100 x ! \ x に 100 を代入 x @ . CR \ x の値を表示 </syntaxhighlight> * <code>CREATE x</code>: <code>x</code> という名前の変数を定義します。<code>CREATE</code> はディクショナリに新しいワードを登録しますが、データスペース自体は確保しません。 * <code>100 x !</code>: <code>x</code> のデータフィールドに <code>100</code> を格納します。 * <code>x @ . CR</code>: <code>x</code> のデータフィールドから値を読み取って表示します。<code>CR</code> は改行を出力します。 ; 配列の定義と使用 :<syntaxhighlight lang=forth> CREATE MY-ARY 100 ALLOT \ 100セルの配列を作成 42 MY-ARY 10 + ! \ 11番目の要素に42を代入 MY-ARY 10 + @ . \ 11番目の要素の値を表示 </syntaxhighlight> * <code>CREATE MY-ARY 100 ALLOT</code>: <code>MY-ARY</code> という名前の配列を定義し、100セル分のデータスペースを確保します。 * <code>42 MY-ARY 10 + !</code>: <code>MY-ARY</code> の11番目の要素(0から始まるインデックスなので、10を足します)に <code>42</code> を代入します。 * <code>MY-ARY 10 + @ .</code>: <code>MY-ARY</code> の11番目の要素の値を読み取って表示します。 この例では、<code>CREATE</code> を使って変数 <code>x</code> と配列 <code>MY-ARY</code> を定義し、それぞれに値を設定しています。<code>x</code> は単一の値を格納する変数であり、<code>MY-ARY</code> は複数の要素を持つ配列です。<code>!</code> を使ってデータを代入し、<code>@</code> を使ってデータを取得しています。 Forthの特性として、変数や配列の定義はディクショナリに登録されるため、名前に対して対応するデータ領域へのアクセスが可能となります。これにより、動的なデータ構造を効率的に管理することができます。 === アライメント === Forthの <code>ALIGN</code> ワードは、データ領域のアラインメントを行うためのワードです。アラインメントとは、データがメモリ上で配置される位置を調整することであり、特定のアドレス境界にデータを配置することを指します。 アラインメントの必要性は、プロセッサアーキテクチャに依存しますが、多くのアーキテクチャでは特定のデータ型(例:4バイト整数など)は特定の境界に配置される必要があります。アラインメントが正しく行われないと、メモリアクセスの効率が低下したり、アドレスエラーなどの例外が発生し処理を中断する可能性があります。 ; 構文 :<syntaxhighlight lang=forth> ALIGN </syntaxhighlight> ; 動作 : <code>ALIGN</code> ワードは、データスペースポインタ (<code>HERE</code>) をアラインメント条件に従って調整します。具体的には、通常は2バイトまたは4バイトの境界に <code>HERE</code> を調整します。これにより、次に確保されるデータ領域が適切な境界に配置されます。 ; 使用例 :<syntaxhighlight lang=forth> HERE ALIGN </syntaxhighlight> : 上記の例では、<code>HERE</code> の値をアラインメントされた位置に調整します。これにより、次に確保されるデータ領域が適切な境界に配置されます。 :<syntaxhighlight lang=forth> CREATE my-var ALIGN 2 ALLOT </syntaxhighlight> : この例では、<code>my-var</code> という名前の変数を定義していますが、そのデータ領域が2バイト境界にアラインメントされて確保されます。これにより、<code>my-var</code> のデータ領域は適切な境界に配置され、メモリアクセスの効率が向上します。 <code>ALIGN</code> ワードは、特定のアーキテクチャで必要なメモリアラインメントを確保するために重要な役割を果たします。メモリアクセスの効率を最大化するために、適切なアラインメントが常に考慮されるべきです。 == 入出力と組み込みワード == Forthには標準の入出力ワードがあり、コンソールやファイルからの入出力を行えます。また、様々な組み込みワードが用意されており、これらを活用することでForthの機能を拡張できます。 === 標準入出力 === Forthには、キーボードからの文字入力や、コンソールへの文字出力を行うためのワードが用意されています。 :<syntaxhighlight lang=forth> KEY \ キーボードから1文字読み込む EMIT \ スタック上の値(文字コード)を出力する ." \ 文字列を直接出力する </syntaxhighlight> <code>KEY</code>はキーボード入力を待ち、押された文字のASCIIコードをスタックに置きます。<code>EMIT</code>は逆に、スタック上の値を文字コードとして解釈し、コンソールに出力します。<code>." Hello"</code>のように、<code>."</code> の後に文字列を続けると、その文字列がコンソール出力されます。 数値入出力には、<code>?</code>、<code>U.</code>、<code>U.R</code>などのワードが使えます。<code>?</code>は数値を入力受け付け、<code>U.</code>は符号なし数値を、<code>U.R</code>は数値を指定した基数(2進数、16進数など)で出力します。 === ファイルアクセス === ファイル入出力には、様々なワードが用意されています。<code>OPEN-FILE</code>でファイルを開き、<code>READ-FILE</code>や<code>WRITE-FILE</code>でデータの読み書きができます。 :<syntaxhighlight lang=forth> S" data.txt" R/O OPEN-FILE THROW VALUE HANDLE \ ファイルを読み取りモードで開く HANDLE READ-FILE ABORT" READ ERROR" \ ファイルを読み込む HANDLE CLOSE-FILE THROW \ ファイルを閉じる </syntaxhighlight> ファイル名は、<code>S"</code> で文字列をスタックに置いた後、<code>R/O</code>(読み取り専用)や<code>W/O</code>(書き込み専用)といったモードを指定してファイルを開きます。<code>THROW</code>はエラーがあれば例外を発生させます。 <code>READ-FILE</code>や<code>WRITE-FILE</code>では、バッファ領域のアドレスと読み書きするバイト数をスタックに置く必要があります。 === 組み込みワードの利用 === Forthには、数学関数や論理演算、メモリ操作など、様々な組み込みワードが用意されています。必要に応じてこれらのワードを活用することで、プログラムにさまざまな機能を付加できます。 :<syntaxhighlight lang=forth> 2 3 MAX . \ 最大値(3)を出力 S" HELLO" SWAP DROP \ スタック操作サンプル HEX 1F20 4 DUMP \ メモリダンプ </syntaxhighlight> <code>MAX</code>は2つの数値の最大値を、<code>SWAP</code>は2つの値の順序を入れ替え、<code>DROP</code>は最上位の値を捨てます。<code>DUMP</code>は指定したアドレスからのメモリ内容をダンプ出力します。 組み込みワードには、浮動小数点演算、文字列処理、マルチタスク、IPCなど、様々な分野のものがあります。また、必要に応じてワードを自作したり、外部ライブラリからリンクしたりできます。Forthはコンパクトなシステムながら、組み込みワードの充実により高い機能性を発揮します。 == アプリケーション開発 == Forthは小規模な組み込みシステムから大規模なアプリケーションまで、幅広い用途に使用できる言語です。この章では、Forthにおけるアプリケーション開発の手法と、実例について解説します。 === モジュール化とワード管理 === Forthはワードをベースとしたモジュール性の高いプログラミングができます。大きなアプリケーションを開発する際は、適切にモジュール分割してワードを設計・管理することが重要です。 Forthにはネームスペースの概念がありません。そのため、ワード名の重複を避けるためには、プレフィックスなどの命名規則を定めることが一般的です。たとえば<code>STRING-LENGTH</code>のように、ワードの役割がわかるよう名前を付けます。 また、ワードをまとめてファイルに保存し、必要に応じて読み込む方法があります。Forthの多くの処理系は、ワードの定義をソースファイルに保存したり、メモリイメージを永続化したりできます。 :<syntaxhighlight lang=forth> MARKER MODULE>STRING : STRING-LENGTH \ 文字列の長さを求める ... ; : STRING-REVERSE \ 文字列を反転する ... ; STRING-REVERSESTRING-LENGTH +MODULE </syntaxhighlight> 作成したワードは<code>MODULE>NAME</code>でモジュール名を付け、<code>+MODULE</code>でモジュールを完成させることができます。他のソースから<code>USE MODULE>NAME</code>とすれば、そのモジュールのワードが使用可能になります。 大規模なシステムでは、このようなソースレベルの分割に加え、オーバーレイ、仮想メモリ、マルチタスク機能を活用することで、メモリの効率的な使用が可能です。 === グラフィックス処理 === Forthでもグラフィック処理が可能ですが、組み込みの機能は限られています。ほとんどの処理はユーザ定義ワードとして実装する必要があります。 ビットマップ画像の表示や、ウィンドウ、マウスカーソルなどの基本的なGUIの作成はある程度可能です。高度な3Dグラフィックスなどを実現するには、外部ライブラリを利用する必要があります。 :<syntaxhighlight lang=forth> NEED FRAMEBUFFER \ フレームバッファへのアクセスモジュール : DRAW-LINE ( x1 y1 x2 y2 -- ) \ ブレザンハムのアルゴリズムでライン描画 ... ; : DRAW-RECT ( x y w h -- ) 2SWAP 2>R 2R> \ (x y w h -- x y x+w y+h) DRAW-LINE 2>R 2R> DRAW-LINE 2SWAP DRAW-LINE 2SWAP DRAW-LINE ; FRAMEBUFFER-INIT \ グラフィックスサブシステムの初期化 100 100 300 200 DRAW-RECT \ 長方形を描画 </syntaxhighlight> 上記では、フレームバッファの制御関数がロードされた前提で、<code>DRAW-LINE</code>を使って<code>DRAW-RECT</code>(長方形描画)を実装しています。スタックを活用して座標値を受け渡し、基本的な幾何図形を描画しています。 Forthはグラフィックスパイプラインなどの高度な機能を組み込んでいませんが、スタックベースの処理により、低レベルのデバイスアクセスが可能です。組み込みシステムのディスプレイやLED制御など、グラフィックス関連の処理に適しています。 === システムプログラミング === Forthの本質的な特性として、システムプログラミングに適していることがあげられます。小規模でコンパクト、高速動作、低レベルなメモリアクセスが可能というメリットがあります。 OSカーネル、デバイスドライバ、BIOS、ブートローダなどの開発にForthは広く使われてきました。組み込みシステムでは、センサーやI/Oデバイスの制御に最適です。スタック指向のモデルにより、レジスタレベルの処理が直接かけるのも特徴です。 例えば、Forthを使ってブートローダを実装する場合には、次のようなプログラムになります。 :<syntaxhighlight lang=forth> HEX 07C0 INPORT DROP \ DOSデータ領域クリア 0800 0 20 MOVE \ リセットベクタ設定 KERNEL.IMG LOAD \ カーネル読み込み A000 OUTPORT \ VGAモードへ切り替え 1000 JMP \ カーネル実行 ... \ BIOSブート用の簡単なForth読み込みコード :KERNEL.IMG LOAD CORE SWAP CPU KERNEL ; </syntaxhighlight> BIOSなどの低レベル機能を呼び出してブートローダを構築する処理が、Forthの文法でコンパクトに記述できる様子がわかります。 また、Forth自身が小規模で可搬性が高いため、Forth処理系そのものもForthで書かれた簡単なコアを、ホストOSやアーキテクチャに合わせてセルフホスト (移植) する手法が一般的です。これは、アプリケーションと実行環境を一体化して開発できる利点があります。 == 高度なトピック == ここまでForthの基本的な構文と概念、データ構造、アプリケーション開発の実例などを解説してきました。この章では、Forthの高度な利用方法としてパフォーマンス最適化、マルチスレッド・マルチタスク、メタプログラミングについて取り上げます。 === 最適化とパフォーマンス === Forthはコンパクトで高速な言語ですが、さらなる最適化の余地があります。ワードの定義を工夫したり、ネイティブコードコンパイラを使ったりすることで、パフォーマンスを向上できます。 ワード定義の最適化では、冗長な演算を排除したり、インラインコーディングの手法を用いたりします。例えば、次のようなワード定義があるとします。 :<syntaxhighlight lang=forth> : MAX2 ( n1 n2 -- max ) 2DUP > IF SWAP DROP ELSE NIP THEN ; </syntaxhighlight> この<code>MAX2</code>は一時的に2つの値を複製(<code>2DUP</code>)し、<code>IF</code>..<code>ELSE</code>..<code>THEN</code>の条件分岐で最大値を選びます。しかし、この一時複製が無駄な演算となっています。次のように書くとコードがシンプルになります。 :<syntaxhighlight lang=forth> : MAX2 ( n1 n2 -- max ) OVER OVER > IF SWAP THEN ; </syntaxhighlight> ワードの最適化には一般的なテクニックがあり、Forthのコンパイラ作者から提案されているものを参考にするとよいでしょう。 また、Forthにはネイティブコードコンパイラと呼ばれるもので、ワードの実行コードをネイティブマシン語に変換できるものがあります。Forthの対話的な実行環境は便利ですが、ネイティブコードの方が高速に動作します。こうした最適化手法を使い分けることで、Forthのパフォーマンスを飛躍的に向上できます。 === マルチスレッドとマルチタスク === Forthには並列実行の機構が組み込まれていないため、マルチスレッドやマルチタスク処理を実現するにはユーザ定義の実装が必要です。しかし、Forthの言語特性を活かせばきわめてコンパクトな並列処理ができます。 マルチスレッドでは、スタックを分離し、スレッド毎にスタックのコピーを持つ手法が一般的です。スレッドの切り替えはスタックのコンテキストスイッチで実現できます。また、Forthのデータストアクセス方式を応用すれば、IPC(プロセス間通信)の仕組みを作ることもできます。 :<syntaxhighlight lang=forth> : NEW-TASK ( -- ) HERE CURRENT-STACK >R CREATE-STACK SWAP [: DO-SOME-WORK ;] ( compile: word behavior ) R> SET-CURRENT ; </syntaxhighlight> この例では、新しいタスクを作成するワード<code>NEW-TASK</code>を定義しています。<code>CREATE-STACK</code>でスタックを新しく割り当て、<code>DO-SOME-WORK</code>のようなワード定義をタスクとして登録します。実行時にはスケジューラによってこれらのタスクが実行されます。 マルチタスク機構を実装する例は多数あり、スレッド単位でデータを扱う方式、メッセージキューによる方式、それぞれ長所と短所があります。並列処理にはデッドロックなどの問題点もありますが、Forthではコンパクトでシンプルなコード記述が可能です。 === メタプログラミング === Forthにはプログラムを生成・変更するメタプログラミングの機能があり、コードを自動生成したり、プログラムを動的に変更したりできます。この機能は、Forthをドメイン固有言語(DSL)の開発などに適用できることを意味しています。 メタプログラミングには、コンパイル時に評価される構文<code>[...]</code>と実行時構文<code>EVAL</code>があります。どちらもプログラムをデータとして扱えるため、動的にプログラムを生成・変更できます。 :<syntaxhighlight lang=forth> : HILBERT-CURVE ( n -- ) 0 ?DO [: 2DUP RECURSE >R >R 1 HCURVE R> R> RECURSE 3 HCURVE ;] POSTPONE LITERAL POSTPONE HCURVE LOOP ; </syntaxhighlight> この例では、ヒルベルト曲線を描画するコードを動的に生成しています。<code>POSTPONE</code>はワードのコンパイルを遅延させ、<code>[: ... ;]</code>の構文はその間のテキストを実行可能なコードとしてコンパイルします。この手法により、 Hilbertカーブの次元(<code>n</code>)に応じて、その描画コードを生成しています。 Forthのメタプログラミング機能は、高度な用途に役立ちます。例えば、ユーザインターフェースビルダー、コードジェネレーター、プログラムシンセサイザなどでその力を発揮できます。Forthの柔軟性を最大限に活かせる側面といえるでしょう。 == サンプルプログラムとプロジェクト == Forthの理解を深めるには、実際にコードを書いて動作を確認することが大切です。この章では、様々なサンプルコードを紹介するとともに、実践的なForthプロジェクトの例を示します。 === 様々なサンプルコード === 以下はForthの基本的な機能を示すサンプルコード集です。 ; 再帰によるフィボナッチ数列 :<syntaxhighlight lang=forth> : FIB ( n -- fib-n ) DUP 0= IF DROP 1 EXIT THEN DUP 1 = IF DROP 1 EXIT THEN DUP 1- RECURSE SWAP 2 - RECURSE + ; </syntaxhighlight> ; 文字列操作 :<syntaxhighlight lang=forth> : UPPERCASE ( addr n -- addr n ) OVER + SWAP ?DO I C@ [CHAR] a [CHAR] z 1+ WITHIN IF [CHAR] A [CHAR] a - + THEN I C! LOOP ; : REVERSE-WORDS ( addr n -- ) [CHAR] \ SKIP SPACES OVER >R BEGIN OVER C@ [CHAR] \ <> WHILE [CHAR] \ PARSE DUP >R REVERSE R> OVER C! CHAR+ REPEAT R> DROP 2DROP ; </syntaxhighlight> ; ベクトル・行列計算 :<syntaxhighlight lang=forth> REQUIRE DOUBLE \ 倍精度浮動小数点サポート : VZEROS ( n -- addr ) \ n要素のゼロベクトルを生成 CREATE HERE 0 SWAP 8 * DUP ALLOT FILL ; : MZEROS ( rows cols -- addr ) \ rows x cols の零行列を生成 SWAP VZEROS SWAP 0 ?DO OVER VZEROS COLS + LOOP ; </syntaxhighlight> ; 簡易グラフィックス :<syntaxhighlight lang=forth> VARIABLE FRAMEBUF \ フレームバッファアドレス : PIXEL ( x y color -- ) \ 1ピクセル書き込み FRAMEBUF @ >R 2 * R@ + 3 * RP@ C!+ RP@ C!+ RDROP ; : LINE ( x1 y1 x2 y2 c -- ) \ ラインの描画 >R 2SWAP R> 2>R 2R@ PIXEL 2R> PIXELLINE ; </syntaxhighlight> これらの例は、スタックを使った処理の流れ、ユーザ定義ワードの作成、再帰など、Forthのプログラミング手法の基本を示しています。コンパクトながらも表現力の高さがわかるでしょう。 === 実践的なプロジェクト例 === 次に、もう少し大がかりなForthプロジェクトの例を紹介します。 ; Forth Chip-8 エミュレーター Chip-8はレトロなゲームコンソールで、Forthでその命令セットをエミュレートするプロジェクトです。グラフィックス、入力処理、命令デコーダなどを実装します。 ; カーネルとブートローダ ForthでOSカーネルの基本部分を実装し、ブートローダと合わせてシステムを構築するプロジェクト。メモリ管理、タスク管理、ファイルシステム、ドライバなどの機能が実装できます。 ; Webサーバー ForthでHTTPリクエストを処理するWebサーバーを作成。ソケット通信、文字列処理、ファイル入出力などの機能が必要になります。追加してWebアプリケーションフレームワークなども作れます。 ; オープンソースForthプロセッサ Forthを使ってCPU命令セットを記述し、ゲートレベルまでFPGAに実装するプロセッサの設計プロジェクト。ハードウェア記述言語との連携が重要です。 このようなプロジェクトを通して、Forthの実用性とシステムプログラミングでの可能性を体験できます。Forthという言語自体を使って、OSやハードウェアコンポーネントを実装できるのが最大の特徴です。いずれのプロジェクトも一般的な規模になると、モジュール分割やワード管理、ツール活用などの工夫が必要になります。 == 参考資料 == Forthについてより深く学ぶには、書籍や公開されているオンラインリソースを参照するのが有効な方法です。また、活発なForthコミュニティに参加することで、他の開発者からの助言を得られます。 === 関連書籍の紹介 === Forthの入門書から応用、さらには処理系の実装に至るまで、多くの優れた書籍が出版されています。 * 「Forth入門」レオ・ブロディ (ISBN:978-4875930297 工学社) ** Forth言語の基本から、アプリケーション開発までをカバーした長年の定番書。 * 「Thinking Forth」Leo Brodie (Punchy Publishing) / Forth思考 ―問題解決のための言語と哲学― レオ・ブロディー著 ** Forth哲学に重きを置いた名著。Forthの考え方を深く解説。 * 「Forth Programmer's Handbook」(ISBN:978-1419675492 Forth Inc.) ** ANS Forthの規格書で、WordSetの詳細が書かれている。 これらの書籍を手に入れられれば、Forthの理解が格段に進むはずです。電子書籍としても出版されているものがあります。 === オンラインリソース === {{Wikipedia}} インターネット上にも無料で参照できるForth関連の豊富なリソースが存在します。 * Forth Interest Group ( https://www.forth.org/ ) ** Forthに関する書籍、記事、リソースなどが集まるポータル。 * Forth-Standard-Committee 公式サイト( https://forth-standard.org/ ) Webサイト、ソースコード、ニュースレターなど、さまざまな形でリソースが公開されているので、活用していきたいものです。 === Forthコミュニティ === 長年にわたりForth言語を支える活発なコミュニティが存在し、開発者同士が支え合う環境があります。 * Newsgroups: comp.lang.forth ** ディスカッションの場となるForth専用のニュースグループ。 * 地域 Forth グループ ** ヨーロッパ、アメリカ、アジアなどの地域Forthグループ。 オンラインフォーラムやメーリングリスト、対面の勉強会など、様々な形でForth開発者同士が交流を深めています。初心者でもこうしたコミュニティに参加することで、サポートを受けられます。Forthの小さな世界ですが、地域を越えて開発が行われているのが特徴です。 Forthの参考文献やオンラインリソース、そしてコミュニティを上手く活用することで、この独特な言語の理解が一層深まるはずです。 == 脚註 == <references /> [[Category:Forth|*]] [[Category:プログラミング言語]] kxi87cf414zm7phu9vdpevg50lhn52r 246673 246672 2024-04-14T01:31:48Z Ef3 694 /*ローカル変数*/ ForthのOPTIONAL Locals word set(ローカルワードセット)は、Forthのプログラミングでローカル変数を定義するための機能を提供します。以下は、このワードセットに関する情報の要約です。 wikitext text/x-wiki == はじめに == Forthはスタック指向のプログラミング言語であり、そのシンプルさと柔軟性から広く用いられています。 本書は、プログラマがForthを効果的に使いこなすための手引書として設計されています。例示や実践的なヒントが豊富に盛り込まれており、読者は理論を理解しながら実際のプロジェクトに応用できるでしょう。 本書を通じて、Forthの魅力と実力を十分に体感し、その利用価値を最大限に引き出すことができるでしょう。 本書では、ForthのCore Word Setに準拠した標準的なForthシステムを題材とします。 == Forthプログラミングの基礎 == Forthはスタック指向のプログラミング言語であり、独自の特徴を持っています。以下では、Forthプログラミングの基礎を解説します。 === スタック操作 === [[スタック構造|スタック]]は、Forthにおける中心的なデータ構造です。ほとんどのワードは、スタックから値を取り出したり、スタックに値を代入したりします。スタックは、後入れ先出し(LIFO; Last In First Out)のデータ構造で、Forthの演算はスタック上で行われます。 === 例 === 以下は、Forthでの簡単な計算の例です: :<syntaxhighlight lang=forth> 3 4 + . </syntaxhighlight> : まず<code>3</code>をスタックに置き、<code>4 + .</code> を解釈します。 : 次に、<code>4</code>をスタックに置き、<code>3 4</code> となり、<code>+ .</code> が残ります。 : そして、<code>+</code> はスタックのトップの2つの要素を加算して結果を戻し、スタックには<code>7</code>だけが残ります。 : 最後に、<code>.</code>(ドット)はスタックから<code>7</code>を取り除いてそれを表示します。 :{| |- !コード!!style='width:3em'| 3 !!style='width:3em'| 4 !!style='width:3em'| + !!style='width:3em'| . |- !スタックトップ |style="border:1px solid black; text-align:center"| 3 ||style="border:1px solid black; text-align:center"| 4 ||style="border:1px solid black; text-align:center"| 7 || |- ! | ||style="border:1px solid black; text-align:center"| 3 || || |- !出力 | || || ||style="text-align:center; font-weight: bold"| 7 |} === コメント === Forthでは、コメントは括弧で囲んで表現されます。例えば: :<syntaxhighlight lang=forth> ( これはコメントです ) </syntaxhighlight> <code>/</code> から行末までもコメントです :<syntaxhighlight lang=forth> 3 4 + \ 3 + 4 の結果をスタックトップに残す </syntaxhighlight> コメントは、インタプリタの動作に影響を与えません。 === スタックエフェクト === Forthの各ワードは、スタック上で特定の操作を行います。ワードのドキュメントでは、それがスタックに対してどのような影響を与えるかを示す記述があります。例えば: :<syntaxhighlight lang=forth> + ( a b -- c ) </syntaxhighlight> この記述は、<code>+</code>ワードが2つの引数(<code>a</code>と<code>b</code>)を消費し、1つの結果(<code>c</code>)をスタックに残すことを意味します。 === Forthのワードとは?その定義と使用について === Forthにおける「ワード」とは、基本的には単語や言葉を意味しますが、Forthプログラミングでは、より具体的には次の2つの意味を持ちます。 # 定義済みの単語 #: ワードは、Forthの語彙において定義された単語や操作を指します。Forthでは、これらのワードはスタック操作や制御構造、算術演算などの基本的な機能を表します。例えば、<code>+</code>は2つの数値を取り出して足し合わせ、結果をスタックに戻すワードです。 # 新しい単語の定義 #: ワードは、Forthプログラム内で新しい単語を定義するための仕組みとしても使われます。これは、既存のワードを組み合わせて、新しい機能を持つ単語を定義することを意味します。例えば、<code>DOUBLE</code>というワードを定義して、与えられた数値を2倍にするような操作を定義することができます。 ワードの定義は、通常、次のような形式で行われます: :<syntaxhighlight lang=forth> : ワード名 ( 定義部分 ) ; </syntaxhighlight> ここで、<code>: ワード名</code>は新しいワードの定義を開始し、<code>;</code>は定義の終了を示します。定義部分には、既存のワードや操作を組み合わせて、新しい機能を実現するForthのコードが記述されます。 === ワードの定義と使用例 === Forthにおけるワードの定義と使用についてさらに詳しく説明します。 # ワードの定義 : #: ワードは、<code>:</code> と <code>;</code> の間に記述されたコードブロックで定義されます。 #: 例えば、<code>SQUARE</code>という新しいワードを定義してみましょう。 #:<syntaxhighlight lang=forth> : SQUARE ( n -- n*n ) DUP * ; </syntaxhighlight> #: ここでは、<code>SQUARE</code>というワードが定義されています。このワードは、スタックから1つの数値を取り出し、その数値を自乗して結果をスタックに戻します。 # ワードの使用 : #: 定義したワードは、Forthプログラム内で直接使用することができます。 #:<syntaxhighlight lang=forth> 5 SQUARE . \ スタックから5を取り出して自乗し、結果を表示する </syntaxhighlight> #:上記の例では、<code>5 SQUARE .</code> というForthコードが実行されます。まず、<code>5</code>がスタックに積まれ、次に<code>SQUARE</code>ワードが実行されて、<code>5</code>の自乗である<code>25</code>が計算されます。最後に<code>.</code>はスタックのトップの値を表示しますので、結果として<code>25</code>が表示されます。 # 組み込みワードとカスタムワード : #: Forthには組み込みのワード(<code>+</code>, <code>-</code>, <code>*</code>, <code>/</code>など)がありますが、ユーザーはこれに加えて独自のワードを定義することができます。カスタムワードを使うことで、プログラムをより効率的に構築できます。 # 再帰的なワード : #: Forthでは、ワードは自身の中で再帰的に呼び出すことができます。これにより、複雑な演算や制御構造を簡潔に表現することが可能です。 ワードの定義と使用は、Forthプログラムの中核的な部分を構成します。これにより、プログラムの再利用性、メンテナンス性、可読性が向上し、効率的なコーディングが実現されます。 === 基本的な制御構造 === Forthの制御構造は、他のプログラミング言語とは異なり「制御構造もワードの集合から定義する」という独自の特徴を持っています。Forthでは、基本的な制御構造として条件分岐とループが利用されます。 制御構造に関するワードは、コンパイル時(つまり <code>:</code> から <code>;</code> までの間)でのみ使用でき会話モードでは使用できません。 ==== 条件分岐 ==== Forthでは、条件分岐は主に <code>IF</code>, <code>ELSE</code>, <code>THEN</code> のワードを組み合わせて実現されます。 ; 例: :<syntaxhighlight lang=forth> : ABS ( n -- |n| ) DUP 0< IF NEGATE THEN ; </syntaxhighlight> この例では、<code>ABS</code>というワードを定義しています。このワードは、スタックから数値を取り出し、その絶対値を計算して結果をスタックに戻します。<code>DUP 0<</code> はスタックトップの値が0より小さいかどうかをチェックし、<code>IF</code> から <code>THEN</code> の間に記述されたブロックが条件を満たす場合に実行されます。つまり、もし数値が負の場合は <code>NEGATE</code> が実行されます。 ==== ループ ==== Forthでは、ループは <code>DO</code>, <code>LOOP</code> や <code>BEGIN</code>, <code>WHILE</code>, <code>REPEAT</code> のワードを使って実装されます。 ; 例: :<syntaxhighlight lang=forth> : COUNTDOWN ( n -- ) 0 DO I . LOOP ; </syntaxhighlight> 上記の例では、0から与えられた数値(<code>n</code>)までカウントダウンする<code>COUNTDOWN</code>というワードを定義しています。 ==== その他の制御構造 ==== Forthには他にも、<code>CASE</code>, <code>OF</code>, <code>ENDOF</code>, <code>ENDCASE</code> を使った条件分岐や、<code>IF-ELSE-ENDIF</code> 構造、<code>BEGIN-UNTIL</code>、<code>BEGIN-WHILE-REPEAT</code> など、さまざまな制御構造が存在し、新たな制御構造をユーザーが定義することすら出来ます。 Forthの制御構造は、スタック指向の特性に基づいてシンプルかつ柔軟に設計されており、独自のプログラミングスタイルを持つことが特徴です。 === スタック操作の基本命令 === Forthにはスタック上のデータを操作するための基本的な命令があります。 * <code>DUP</code>: ( n -- n n ) スタックのトップの要素を複製する * <code>DROP</code>: ( n -- ) スタックのトップの要素を削除する * <code>SWAP</code>: ( n1 n2 -- n2 n1 ) スタックのトップとその下の要素を交換する * <code>OVER</code>: (n1 n2 -- n1 n2 n1 ) スタックのトップの2つ下の要素を複製してトップに置く * <code>ROT</code>: ( n1 n2 n3 — n2 n3 n1 ) スタックのトップの3つ下の要素をトップに回転する === 基本的な演算 === Forthには、算術演算(<code>+</code>、<code>-</code>、<code>*</code>、<code>/</code>など)、論理演算(<code>AND</code>、<code>OR</code>、<code>NOT</code>)、比較(<code>=</code>、<code><></code>、<code>></code>、<code><</code>など)の基本ワードが用意されています。これらのワードは、スタック上の値を取り、演算結果をスタックに代入します。 === 再帰的呼び出し === Forthで再帰的呼び出しを行う場合、ワード <code>recurse</code> を使ってワード自身を表します。 再帰的なワードを定義する方法について説明します。 ==== 階乗 ==== 再帰的な階乗(factorial)を定義します。 :<syntaxhighlight lang=forth> : factorial ( n -- result ) dup 0= if \ スタックのトップの値が0かどうかをチェック drop 1 \ もし0ならば、結果は1として処理を終了 else dup 1 - \ スタックのトップの値から1を引いた値をコピー recurse * \ 再帰的に自身を呼び出して、その結果にスタックのトップの値を掛ける then ; </syntaxhighlight> この定義の内容を説明します。 * ワード <code>factorial</code> は、<code>( n -- result )</code> のスタックエフェクトを持ちます。<code>n</code> は階乗を計算する整数です。 * <code>dup 0=</code>: スタックのトップの値が0かどうかをチェックします。 ** もし0ならば、<code>drop 1</code> が実行されて、スタックのトップの値(<code>n</code>)が削除され、結果として <code>1</code> がスタックにプッシュされます。 * <code>else</code>: もしスタックのトップの値が0でない場合は、次の操作が実行されます。 ** <code>dup 1 -</code>: スタックのトップの値から <code>1</code> を引いた値をスタックにプッシュします。これは <code>n - 1</code> の計算です。 ** <code>recurse *</code>: 自身の <code>factorial</code> を再帰的に呼び出して、結果に対してスタックのトップの値(<code>n</code>)を掛けます。これにより、<code>n! = n * (n-1)!</code> の計算が行われます。 * <code>then</code>: <code>if</code> ブロックの終了を示します。 例えば、<code>5 factorial .</code> を実行すると、<code>5</code> の階乗(<code>5!</code>)が計算されます。 :<syntaxhighlight lang=forth> 5 factorial . </syntaxhighlight> この例では、<code>5!</code> の計算手順は以下の通りです: * <code>5</code> がスタックにプッシュされる。 * <code>factorial</code> が呼び出される。 ** <code>dup 0=</code>: スタックのトップの値が0でないので、次の処理が実行される。 ** <code>dup 1 -</code>: <code>5 - 1</code> が計算されて <code>4</code> がスタックにプッシュされる。 ** <code>recurse *</code>: <code>4</code> の階乗 (<code>4!</code>) が再帰的に計算される。 *** <code>dup 0=</code>: スタックのトップの値が0でないので、次の処理が実行される。 *** <code>dup 1 -</code>: <code>4 - 1</code> が計算されて <code>3</code> がスタックにプッシュされる。 *** <code>recurse *</code>: <code>3</code> の階乗 (<code>3!</code>) が再帰的に計算される。 **** ... ***** 最終的に、<code>1</code> の階乗 (<code>1!</code>) が計算されて <code>1</code> がスタックにプッシュされる。 **** <code>5 *</code>: <code>5</code> と <code>4!</code> の結果を掛けて <code>120</code> がスタックにプッシュされる。 *** <code>5 *</code>: <code>5</code> と <code>120</code> の結果を掛けて <code>120</code> がスタックにプッシュされる。 * <code>. (dot)</code> コンパイラワ ==== 最大公約数(GCD) ==== 再帰的にユークリッドのアルゴリズムを使用して最大公約数(Greatest Common Divisor, GCD)を計算します。 :<syntaxhighlight lang=forth> : gcd ( u1 u2 -- gcd ) dup 0= if \ スタックのトップの値が0かどうかをチェック drop \ スタックのトップの値が0ならば削除して終了 else swap over mod recurse \ スタックのトップと2番目の値を入れ替えて、modを計算し再帰的に呼び出す then ; </syntaxhighlight> このプログラムの動作をステップごとに説明します: # <code>dup 0=</code>: スタックのトップの値(<code>u1</code>)が0かどうかをチェックします。 #* もし0ならば、<code>drop</code> が実行されて、スタックのトップの値(<code>u1</code>)が削除されます。この場合は再帰の終了条件となります。 # <code>else</code>: もしスタックのトップの値(<code>u1</code>)が0でない場合は、次の操作が実行されます。 # <code>swap over mod recurse</code>: #* <code>swap</code>: スタックのトップと2番目の値を入れ替えます。これにより、<code>u1</code> と <code>u2</code> の値が入れ替わります。 #* <code>over</code>: スタックの2番目の値(入れ替え前の <code>u1</code>)をスタックのトップにコピーします。 #* <code>mod</code>: スタックのトップの2つの値を取り出して、<code>u1 % u2</code>(<code>u1</code> を <code>u2</code> で割った余り)を計算し、その結果をスタックにプッシュします。 #* <code>recurse</code>: 自身の <code>gcd</code> を再帰的に呼び出します。これにより、新しい <code>u1</code> と <code>u2</code> の値がスタックに積まれ、再帰的に最大公約数が計算されます。 # <code>then</code>: <code>if</code> ブロックの終了を示します。 例えば、<code>12 18 gcd .</code> を実行すると、以下のように動作します: * <code>12</code> と <code>18</code> がスタックにプッシュされます。 * <code>gcd</code> が呼び出されます。 ** <code>dup 0=</code>: <code>18</code> は0ではないので、次の処理に進みます。 ** <code>swap over mod recurse</code>: <code>18</code> と <code>12</code> が入れ替わり、<code>18 % 12</code> が計算されます(余りは <code>6</code>)。 ** <code>gcd</code> が再帰的に呼び出され、新しい値 <code>12</code> と <code>6</code> がスタックにプッシュされます。 *** <code>dup 0=</code>: <code>6</code> は0ではないので、次の処理に進みます。 *** <code>swap over mod recurse</code>: <code>6</code> と <code>12</code> が入れ替わり、<code>6 % 12</code> が計算されます(余りは <code>6</code>)。 *** <code>gcd</code> が再帰的に呼び出され、新しい値 <code>6</code> と <code>6</code> がスタックにプッシュされます。 **** <code>dup 0=</code>: <code>6</code> は0ではないので、次の処理に進みます。 **** <code>swap over mod recurse</code>: <code>6</code> と <code>6</code> が入れ替わり、<code>6 % 6</code> が計算されます(余りは <code>0</code>)。 **** <code>0=</code>: <code>0</code> が0なので、<code>drop</code> が実行されて、スタックのトップの値 <code>0</code> が削除されます。 * 最終的に、スタックのトップには <code>6</code> が残ります。これが <code>12</code> と <code>18</code> の最大公約数です。 したがって、<code>12 18 gcd .</code> を実行すると、<code>6</code> が表示されます。 === 変数の宣言・代入と参照 === Forthにおける <code>VARIABLE</code> は、変数を定義するためのワードです。Forthでは、変数はメモリ内のアドレスに名前を関連付ける方法で定義されます。 以下は、<code>VARIABLE</code> を使用して変数を定義する方法とその使い方の例です。 ==== <code>VARIABLE</code> の使用方法 ==== <code>VARIABLE</code> は以下のように使用します: :<syntaxhighlight lang=forth> VARIABLE my-var \ my-var という名前の変数を定義する </syntaxhighlight> この行は、名前が <code>my-var</code> の変数を定義します。この変数はメモリ内の特定のアドレスに関連付けられます。 ==== 変数の使用方法 ==== 定義された変数を使用するには、<code>@</code>(fetch)や <code>!</code>(store)などのワードを使います。これらのワードを使って変数の値を取得したり設定したりできます。 - <code>@</code> は、変数の値をスタックにプッシュします。 - <code>!</code> は、スタックのトップの値を変数に代入します。 例えば、次のように変数に値を設定して取得します: :<syntaxhighlight lang=forth> 123 my-var ! \ 変数 my-var に値 123 を代入する my-var @ . \ 変数 my-var の値を表示する </syntaxhighlight> この例では、変数 <code>my-var</code> に <code>123</code> を代入し、その後 <code>@</code> を使って変数の値を取得して表示しています。 ==== 実際の例 ==== 以下は、<code>VARIABLE</code> を使って変数を定義し、値を設定して取得する具体的な例です: :<syntaxhighlight lang=forth> VARIABLE my-var \ my-var という名前の変数を定義する 123 my-var ! \ 変数 my-var に値 123 を代入する my-var @ . \ 変数 my-var の値を表示する </syntaxhighlight> この例では、変数 <code>my-var</code> を定義し、<code>123</code> を代入してその値を表示しています。<code>!</code> で変数に値を設定し、<code>@</code> で変数の値を取得しています。 変数はプログラムでデータを保持する際に便利です。Forthでは、変数の値は直接メモリ上に代入されるため、効率的なデータ管理が可能です。 === 定数の定義と参照 === Forthの <code>CONSTANT</code> は、定数を定義するためのワードです。定数は変更されることのない値であり、プログラムの中で何度も使われる値を簡潔に表現するために使用されます。 ==== <code>CONSTANT</code> の使用方法 ==== <code>CONSTANT</code> は以下のように使用します: :<syntaxhighlight lang=forth> 123 CONSTANT my-const \ my-const という名前の定数を定義する </syntaxhighlight> この行は、名前が <code>my-const</code> の定数を定義し、その値を <code>123</code> に設定します。定数はプログラム中で使用される値を一元管理し、可読性を向上させます。 ==== 定数の使用方法 ==== 定義された定数は、その名前を使ってプログラム中で値を参照することができます。 :<syntaxhighlight lang=forth> my-const . \ 定数 my-const の値を表示する </syntaxhighlight> この例では、定数 <code>my-const</code> の値が表示されます。 ==== 実際の例 ==== 以下は、<code>CONSTANT</code> を使って定数を定義し、その定数を使用する具体的な例です: :<syntaxhighlight lang=forth> 123 CONSTANT my-const \ my-const という名前の定数を定義する my-const . \ 定数 my-const の値を表示する </syntaxhighlight> この例では、定数 <code>my-const</code> を <code>123</code> に設定し、その後定数の値を表示しています。 定数はプログラム中で共通の値を使い回す際に便利です。Forthの定数は一度定義されると値が変更されることはなく、プログラム全体で一貫性のある値を提供します。 === 基数 === Forthの <code>BASE</code> は、数値の基数(n進数のn)を設定するための変数です。Forthでは、数値の表現において基数を変更することができます。通常、Forthはデフォルトで10進数を使用しますが、<code>BASE</code> を変更することで他の基数(2進数、16進数など)で数値を表現することが可能です。 ==== <code>BASE</code> の使用方法 ==== <code>BASE</code> は以下のように使用します: :<syntaxhighlight lang=forth> 16 BASE ! \ 基数を16進数に設定する </syntaxhighlight> この行は、<code>BASE</code> の値を <code>16</code> に設定しています。これにより、その後の数値の表示や入力が16進数で行われるようになります。 ==== 基数の変更と数値の表現 ==== <code>BASE</code> を変更することで、その後の数値リテラルの表現が変わります。例えば、<code>BASE</code> を16進数に設定した場合、数値リテラルは16進数として解釈されます。 :<syntaxhighlight lang=forth> 16 BASE ! \ 基数を16進数に設定する FF . \ 16進数の255を表示する </syntaxhighlight> この例では、<code>BASE</code> を16進数に設定してから、<code>FF</code> を表示すると、16進数の <code>FF</code> (10進数の <code>255</code>)が表示されます。 ==== デフォルトの基数と再設定 ==== Forthのデフォルトの基数は10進数です。基数を変更した後は、必要に応じて再度基数を10進数に戻すことができます。 :<syntaxhighlight lang=forth> DECIMAL BASE ! \ 基数を10進数に戻す </syntaxhighlight> この行は、<code>BASE</code> を10進数に再設定しています。これにより、数値リテラルは再び10進数として解釈されるようになります。 よくある間違い: :<syntaxhighlight lang=forth> 10 BASE ! \ 基数を16進数から10進数に戻す??? </syntaxhighlight> : として基数を10に戻そうとするミスがあります。 : コードの 10 は16進数として解釈されるので基数は16のままです。 ==== 注意点 ==== <code>BASE</code> を変更すると、数値の解釈や表示が変わるため、基数の変更後には適切な基数に戻すことが重要です。また、<code>BASE</code> の値は変数として扱われるため、必要に応じて保存や復元することができます。 基数を変更することで、特定の基数で数値を扱うプログラムを簡単に記述することができます。 === イミディエイトワード === イミディエイトワード(immediate word)は、Forthプログラミング言語において特定の動作を持つワードの一種です。イミディエイトワードは、通常のワードとは異なり、コンパイル時ではなく実行時に直ちに処理されます。 以下は、イミディエイトワードの特性について詳しく説明します: # 実行時処理: #* イミディエイトワードは、定義された時点ではコンパイルされず、実行時に直ちに解釈および実行されます。 #* 通常のワード(コンパイルワード)は、単なるコンパイル時にスタックに動作を積むだけであり、後で実行されますが、イミディエイトワードは定義された時点ですぐに実行されます。 # 定義方法: #* イミディエイトワードは、<code>IMMEDIATE</code> を使用して定義されます。 #* これにより、そのワードが定義された直後に実行されるようにマークされます。 # 使用例: #* 例えば、<code>."</code>(ダブルクォートピリオド)はイミディエイトワードです。これは、コンパイル時ではなく実行時に文字列を表示します。 #* <code>: greeting ." Hello, world!" ;</code> という定義では、<code>. "</code>Hello, world!"<code> はコンパイル時に実行されず、</code>greeting` を実行したときに実行されます。 # 動的な挙動: #* イミディエイトワードは、通常のワードとは異なり、実行時の環境やスタックの状態に応じて動的に振る舞います。 #* これにより、実行時に動的なテキストや操作を生成するために使用することができます。 イミディエイトワードは、Forthの柔軟性と強力な動的な特性を提供します。コンパイル時に制御構造や動作を決定するだけでなく、実行時に動的な挙動を持つことができます。 {{コラム|Forthの文法|2=Forthのプログラムは、空白文字で区切られた「ワード」の並びで構成されます。ワードには、数値リテラル、制御構造、演算子、そして他のワードを呼び出す構文などがあります。Forthには高水準の構文がなく、基本的な構文要素は非常にシンプルです。 例えば、<code>2 3 +</code> と入力すると、2と3がスタックにプッシュされ、最後の<code>+</code>がスタック上の2つの数値を加算します。この結果である5がスタックに残ります。つまり、Forthではプログラムの実行とデータ操作が、ワードの解釈とスタック操作によって行われるのです。 Forthは、基本的に行指向の言語です。プログラムは複数行に分割できますが、改行の前後で文が継続する場合は、スペースを入れる必要があります。このため、適切なインデントを使ってプログラムの構造をわかりやすくすることが重要です。 }} == データ型 == Forthには明示的なデータ型宣言がないため、データ型は主に暗黙的に扱われます。Forthでは、データ型はデータの解釈や使用方法に依存します。以下では、Forthでよく使用されるデータ型について説明します。 === セル(Cell) === セルは、通常2バイトまたは4バイトのサイズを持つ整数型です。Forthの基本的なデータ型であり、スタックやメモリ内のデータはセル単位で扱われます。セルのサイズは実装によって異なる場合があります。 === 符号付き整数(Signed Integer)と符号なし整数(Unsigned Integer) === Forthは整数を符号付きとしても、符号なしとしても扱うことができます。通常はセル内のビットパターンに基づいて解釈されます。算術演算や比較演算などが適用されますが、具体的な整数型に明示的に制限はありません。 === 文字(Character) === Forthでは文字は通常、符号なし整数として扱われます。ASCII文字セット内の範囲(通常は0から255)の数値として表現されます。文字に対する演算は、数値としての操作として扱われます。 === 文字列(String) === 文字列はカウント付き文字列(Counted String)やnull終端文字列(Null-terminated String)として表現されることがあります。カウント付き文字列では、最初のバイトが文字列の長さを示し、その後に文字のデータが続きます。文字列は通常、メモリ上の連続した領域に格納されます。文字列の操作には、<code>WORD</code>、<code>FIND</code>、<code>C"</code>などの専用のワードが用意されています。 === アドレス(Address) === Forthではアドレスも整数として扱われます。アドレスはメモリ上の位置を示す整数値であり、アドレス演算は通常の整数演算と同様に行われます。アドレス演算には、<code>CHAR+</code>、<code>CELLS</code>、<code>FLOAT+</code>などの専用のワードが用意されています。 === データ型の制約と振る舞い === Forthでは、データ型に関する制約やチェックはコンパイラやランタイムによっては'''行われません'''。プログラマはデータを正しく扱う責任があります。特にプログラムの移植性を考慮する場合は、適切なデータ型の使用が重要です。 データ型はForthの柔軟性とパフォーマンスの両方をサポートするため、プログラマに柔軟性と責任を与えます。それぞれのアプリケーションや環境に応じて、適切なデータ型を選択することが重要です。 == 浮動小数点数 == Forthの浮動小数点数についての情報は、Forth-2012仕様におけるオプションの浮動小数点数ワードセットに関連しています。以下にその内容の要点をまとめます。 ; 浮動小数点数の基本 :* 浮動小数点数は、<code>DECIMAL</code>の<code>BASE</code>で入力する必要があります。任意の基数での浮動小数点数の入力は許可されていません。 :* 標準システムで解釈されるすべての浮動小数点数には、指数インジケーター "E" を含める必要があります。 :;浮動小数点数の例 ::<syntaxhighlight lang=forth> 1e 3.14e 1.2e3 1e9 </syntaxhighlight> ; 浮動小数点数のフォーマットと範囲 :* 浮動小数点数の有効桁数や指数のフォーマット、範囲は、Forth-2012では実装に依存します。IEEE浮動小数点数フォーマットが一般的に使用されています。 ; 浮動小数点数のワードセット :* Floating-Point Extensionsワードセットには、<code>DF@</code>、<code>SF@</code>、<code>DF!</code>、<code>SF!</code>などのワードが含まれています。これらは、倍精度および単精度のIEEE浮動小数点フォーマットの数値をメモリに格納するためのものです。 ; 浮動小数点数の入力 :* 浮動小数点数をASCII形式で入力するためには、<code>>FLOAT</code>ワードが使用されます。これは、標準Forthシステムや他の広く使用されるプログラミング環境からデータを受け入れるために広範な構文を許容します。 ; 実装の注意点 :* カスタムの浮動小数点数データ構造を定義する際には、アドレスの整列(alignment)に注意する必要があります。<code>CREATE</code>が適切な浮動小数点数の整列を行わない場合は、コンパイル時および実行時に適切な整列を指定する必要があります。 == ローカル変数 == ForthのOPTIONAL Locals word set(ローカルワードセット)は、Forthのプログラミングでローカル変数を定義するための機能を提供します。以下は、このワードセットに関する情報の要約です。 ; ローカル変数の定義方法 :* <code>(LOCAL)</code> ワードや <code>LOCALS|</code> ワードを使用して、ローカル変数を定義します。 :* <code>{ ... }</code> または <code>{: ... :}</code> の表記を使用して、ローカル変数を囲みます。<code>: ... :</code> の形式は、他のシステムとの名前の衝突を避けるための妥協形式です。 ; ローカル変数の種類 :* ローカル変数は、初期化されたものと初期化されていないものに分けられます。初期化されたローカル変数はデータスタックから実行時に初期化されます。 ; 定義の終了 :* ローカル変数の定義は <code>--</code> もしくは <code>:}</code> で終了します。これにより、ローカル変数の定義中に完全なスタックコメントを記述することが可能です。 ; 文法と慣習 :* ローカル変数の引数と値の区切りには <code>|</code> を使用しますが、他のシステムでは <code>{ ... }</code> の表記が競合する場合があります。 :* 実装によっては、別の区切り文字(例: <code>\</code>, <code>¦</code>)を使用する場合がありますが、移植性を確保するためには <code>|</code> の使用が推奨されます。 ; 予約事項 :* ローカル変数の名前には、特定の文字(<code>:</code>、<code>[</code>、<code>^</code>)で終わる名前は予約されています。 Forthのローカル変数機能は、実装によって異なる場合がありますが、一般的な慣習として、<code>(LOCAL)</code> や <code>{: ... :}</code> の表記が広く使用されています。移植可能なプログラムを書く場合は、このような慣習に準拠することが重要です。 == 実行トークン == Forthにおける実行トークン(Execution Token; xt)は、ワード(Word)や定義体(Definition)の実行を指示するためのデータ構造です。実行トークンは、コードワードを指すための一意の識別子として機能します。以下は、Forthの実行トークンについての詳細です。 ; 実行トークンの定義 : 実行トークンは、通常、ワードや定義体の実行を示すために使用される整数またはポインタです。これは通常、コンパイラやインタプリタ内部で使用され、特定のワードや定義体を表す一意の識別子として機能します。 ; 実行トークンの使用 : Forthのコードは、実行トークンを使用してワードや定義体を実行します。実行トークンは通常、スタックや辞書(Dictionary)に格納され、必要なときに取り出されて使用されます。 ; ' (Tick) 記号 : 一般的なForthのプログラミングスタイルでは、実行トークンを取得するためにシングルクォート(')記号が使用されます。例えば、<code>' DUP</code> は <code>DUP</code> ワードの実行トークンを取得します。 ; 実行トークンと定義体の関連付け : 実行トークンは、定義体やコードワードと関連付けられます。通常、辞書内のワードエントリは、そのワードの実行トークンを参照します。これにより、プログラムは実行トークンを使用して、辞書内のワードを特定して実行することができます。 ; ランタイムスタックとの関係 : Forthのランタイムスタックは、実行トークンを使用してコードを実行します。コンパイルされたForthコードは、ランタイムスタック上で実行トークンを取り出して、対応するワードや定義体を実行します。 ; 実行トークンの特徴 : 実行トークンは、Forthの柔軟性と効率性を向上させるために使用されます。コンパイラやインタプリタは、実行トークンを介してワードを効率的に実行し、辞書の管理を行います。 ; 実行トークンの安全性 : Forthでは、実行トークンは通常、ユーザーからは直接操作されず、コンパイラやランタイムシステム内部で使用されます。これにより、実行トークンを誤って操作することがなく、安全なプログラミング環境が提供されます。 Forthの実行トークンは、言語の内部実装の詳細を隠蔽し、プログラマに柔軟性と効率性を提供する重要な概念です。 == コンパイル時ワード == Forthには、コンパイル時に処理される特殊なワードがあります。これらをコンパイル時ワードと呼びます。 主なコンパイル時ワードには以下のようなものがあります: # コンパイル時の定義操作 #* <code>:</code> (コロン) - 新しい定義を開始する(<code>:</code>自身は通常の逐次ワード) #* <code>;</code> (セミコロン) - 定義を終了しコンパイルモードを抜ける #* <code>CONSTANT</code>、<code>VARIABLE</code>、<code>DEFER</code> - 定数、変数、遅延定義を作成する # コンパイル時の制御 #* <code>IF</code>、<code>ELSE</code>、<code>THEN</code>、<code>BEGIN</code>、<code>UNTIL</code> など - 条件分岐やループなどの制御構造を定義する #* <code>LITERAL</code> - スタックトップの値をコンパイル時に埋め込む # その他のコンパイル時操作 #* <code>IMMEDIATE</code> - 定義をすぐに実行されるように指定する #* <code>[COMPILE]</code> - 次のワードをコンパイル時に実行する #* <code>POSTPONE</code> - 次のワードの実行トークンをコンパイルする これらのコンパイル時ワードは、Forthのプログラムの構造を定義したり、実行時の振る舞いを制御したりするために使われます。 通常のワードとは異なり、これらのコンパイル時ワードはコンパイル時に処理され、実行時には特殊な動作をするようになっています。これにより、Forthのプログラミングモデルを柔軟に拡張することができます。 == データ構造とメモリ管理 == Forthは組み込みシステムなどのリソース制約の厳しい用途を想定して設計されているため、メモリの効率的な利用が重視されています。この章では、Forthにおけるデータ構造とメモリ管理の方法を説明します。 === コントロールフロースタック === コントロールフロースタックとは、Forthのプログラムの制御フローを管理するために使用される仮想的なスタックです。 その主な役割は以下の通りです: # 制御フロー命令の対応関係の管理 #* 制御フロー命令(<code>IF</code>, <code>THEN</code>, <code>ELSE</code>, <code>BEGIN</code>, <code>WHILE</code>, <code>REPEAT</code> など)の対応関係を管理します。 #* 開始と終了の命令が適切に対応していることを確認します。 # 制御フロー中のデータスタック操作の制約 #* 制御フロー中のデータスタックの使用方法に制約を課します。 #* 制御フロー命令の入れ子関係に応じて、適切なデータスタックの状態が維持されるようにします。 コントロールフロースタックは物理的に実装されていなくても良いと仕様で定められています。 代わりに、システムはコンパイル時や実行時にこのスタックの挙動を模倣する方法を採ることができます。 つまり、コントロールフロースタックはForthの制御構造の妥当性を保証する上で重要な概念であり、プログラムの正しい実行を支えているのです。 通常のプログラミングでコントロールフロースタックを強く意識することはありませんが、制御構造を自らワードとして定義しようとする場合、コントロールフロースタックの振る舞いに注意する必要があります。 === リターンスタック === Forthには、データスタックとは別に、リターンスタックと呼ばれる重要なスタックが存在します。リターンスタックの主な役割は以下の通りです: # 関数呼び出しとリターン #* 関数を呼び出すとき、その関数の呼び出し元の命令アドレスがリターンスタックにプッシュされます。 #* 関数から抜け出すときは、リターンスタックからアドレスがポップされ、その場所に制御が戻されます。 #* これによって、関数呼び出しの際の制御の移動を管理することができます。 # 一時的データ保管 #* リターンスタックは、データを一時的に保管する場所としても使えます。 #* データスタックからデータを>Rでリターンスタックにプッシュし、後でR>で取り出すことができます。 #* これにより、データスタックの状態を一時的に変更せずに、値を保持しておくことができます。 リターンスタックの使用には注意点があります: * ワード内やループ内では、<code>>R</code>と <code>R></code>の回数が一致している必要があります。 * リターンスタックの値は、同じブロック内でのみ参照・取り出しできます。 * ループの脱出時やDO-ループ内からは、リターンスタックの値を取り出せません。 つまり、リターンスタックは制御フローの管理と一時的なデータ保管に使われますが、その使い方には一定の制限があるため、注意深く扱う必要があります。 プログラムの複雑さが増すと、リターンスタックの状態を適切に管理することが難しくなるため、できるだけ単純な使い方に留めるのが賢明です。 ; <code>>R ( x -- ) ( R: -- x )</code> : データスタックから値をポップしリターンスタックにプッシュする ; <code>R> ( R: -- x ) ( x -- )</code> : リターンスタックから値をポップしデータスタックにプッシュする ; <code>R@ ( -- x ) ( R: x -- x )</code> : リターンスタックのスタックトップをデータスタックにコピーする ; <code>2>R ( x1 x2 -- ) ( R: -- x1 x2 )</code> ; <code>2R> ( -- x1 x2 ) ( R: x1 x2 -- )</code> ; <code>2R@ ( -- x1 x2 ) ( R: x1 x2 -- x1 x2 )</code> スタックエフェクトに <code>R:</code> という新しい記号が出てきましたが、これはリターンスタックへの操作をしまします。このためリターンスタックはRスタックとも呼ばれています。 === 変数とアドレス指定 === Forthには、グローバル変数やローカル変数の概念がありません。代わりに、値を格納するためのメモリ領域を確保し、そのアドレスを使ってアクセスします。<code>VARIABLE</code>ワードを使うと、新しい変数領域が確保され、その開始アドレスがスタックに置かれます。 :<syntaxhighlight lang=forth> VARIABLE COUNTER \ カウンター変数を定義 COUNTER @ . \ 変数の値を表示(初期値は0) 1 COUNTER +! \ 変数にインクリメント </syntaxhighlight> 変数の値を取り出すには<code>@</code>(フェッチ)、格納するには<code>!</code>(ストア)を使います。<code>+!</code>のように算術演算と<code>!</code>を組み合わせたワードもあります。 Forthではアドレスを直接スタックに置いて操作することもできます。<code>HERE</code>はディクショナリの次の空きアドレスを取得し、<code>ALLOT</code>はディクショナリ領域を確保します。 ==== データスペース(Data Space) ==== Forthのデータスペースとは、メモリ内の連続した領域を指し、データやワードの定義などが格納される場所です。Forthでは、データスペースは主に '''ヒープ(heap)''' と '''ディクショナリ(dictionary)''' の2つの領域に分かれています。 * '''ヒープ''': データスタックやワードの実行時に使用される一時的な領域です。ここでは、動的に割り当てられたデータや一時的な計算に使用されるデータが保持されます。 * '''ディクショナリ''': ワード(ワード)の定義やその実装が格納される領域です。Forthのディクショナリはワードの名前とそれに対応する実行可能なコードへのポインタを保持します。 ==== <code>HERE</code> ワード ==== <code>HERE</code> はForthで使用される特定のワードであり、現在のデータスペース内の「ここ(here)」の位置を示します。具体的には、ディクショナリ内の次の空き領域の先頭アドレスを指します。 <code>HERE</code> を使用すると、新しいワードやデータをデータスペースに格納する際に位置を特定することができます。主にワードの定義やデータの動的な確保に使用されます。 例えば、新しい変数や配列を定義する場合、<code>HERE</code> の値を参照して適切なメモリ領域を割り当て、その後 <code>HERE</code> を更新します。 具体的な使用例を示します: :<syntaxhighlight lang=forth> HERE . \ 現在のHEREの値を表示(ディクショナリ内の次の空き領域のアドレス) 10 ALLOT \ 10バイトの領域を確保 HERE . \ 確保後のHEREの値を表示 </syntaxhighlight> この例では、まず <code>HERE</code> の値が表示され、次に <code>10 ALLOT</code> によって10バイトの領域が確保されます。その後、再度 <code>HERE</code> の値が表示され、確保された領域の終端アドレスが示されます。 <code>HERE</code> を適切に使用することで、動的なメモリ管理やデータスペースの操作が行えます。 ==== HEREを利用したデータスペースの活用例 ==== ; sieve.fr :<syntaxhighlight lang=forth> : prime? ( n -- ? ) here + c@ 0= ; : composite! ( n -- ) here + 1 swap c! ; : sieve ( n -- ) here over erase 2 begin 2dup dup * > while dup prime? if 2dup dup * do i composite! dup +loop then 1+ repeat drop ." Primes: " 2 do i prime? if i . then loop ; 100 sieve / Primes: 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 </syntaxhighlight> このForthのコードは、エラトステネスの篩(Sieve of Eratosthenes)アルゴリズムを実装しています。このアルゴリズムは、与えられた数 <code>n</code> 以下のすべての素数を見つけるために使用されます。以下では、与えられたコードの各部分を詳しく説明します。 ; <code>prime?</code> ワード :<syntaxhighlight lang=forth> : prime? ( n -- ? ) here + c@ 0= ; </syntaxhighlight> :; <code>( n -- ? )</code>: スタックから整数 <code>n</code> を取り出し、その数が素数であるかどうかの真偽値 <code>?</code> をスタックに積む。 :* <code>here + c@</code>: <code>here</code> は現在のデータスペースの末尾を示し、それに <code>+</code> を使ってワードの<code>n</code>番目のアドレスを取得する。そして <code>c@</code> はそのアドレスの内容(1バイトの文字)を取得する。 :* <code>0=</code>: 取得したバイトが0かどうかをチェックし、0ならば真(素数)を返す。 ; <code>composite!</code> ワード :<syntaxhighlight lang=forth> : composite! ( n -- ) here + 1 swap c! ; </syntaxhighlight> :; <code>( n -- )</code>: スタックから整数 <code>n</code> を取り出す。 :* <code>here + 1 swap c!</code>: <code>here</code> から<code>n</code>のアドレスにを1を1バイトで書き込む。 ; <code>sieve</code> ワード :<syntaxhighlight lang=forth> : sieve ( n -- ) here over erase 2 begin 2dup dup * > while dup prime? if 2dup dup * do i composite! dup +loop then 1+ repeat drop ." Primes: " 2 do i prime? if i . then loop ; </syntaxhighlight> :; <code>( n -- )</code>: スタックから整数 <code>n</code> を取り出す。 :* <code>here over erase</code>: 現在のデータスペース(<code>here</code> から先)を <code>n</code> バイト分消去する。 :* <code>2 begin ... repeat</code>: メインのループ。2から始めて、以下の条件に基づいて処理を繰り返す。 :** <code>2dup dup * ></code>: 現在の値を2つコピーし、2つを掛けた値が <code>n</code> を超えるまで続ける。 :** <code>dup prime? if ... then</code>: 現在の値が素数かどうかをチェックし、素数ならば以下を実行。 :*** <code>2dup dup * do ... dup +loop</code>: 素数の場合、その数の倍数を篩い落とす。内側のループで、その数の倍数を全て <code>composite!</code> でマークする。 :** <code>1+</code>: 現在の数値を1増やす。 :* <code>drop</code>: 最後の数値を削除する。 :* <code>." Primes: " 2 do i prime? if i . then loop</code>: 素数を表示するループ。2から始まり、<code>n</code> まで続ける。各数値が素数ならば表示する。 ; 実行 :<syntaxhighlight lang=forth> 100 sieve </syntaxhighlight> :100以下の素数を見つけるために <code>sieve</code> ワードが実行されます。 === CREATEを使った変数と配列の定義 === Forthの <code>CREATE</code> は、新しい変数や配列をディクショナリに定義するためのワードです。<code>CREATE</code> を使うことで、任意の名前で参照可能なデータ領域を確保し、その領域に対する操作を定義することができます。 以下に、<code>CREATE</code> ワードの基本的な構文と使用方法を示します。 ==== 構文 ==== :<syntaxhighlight lang=forth> CREATE name </syntaxhighlight> * <code>name</code>: 定義する変数や配列の名前を指定します。 ==== 使用方法 ==== # 変数の定義 #:<code>CREATE</code> を使って変数を定義する場合、単に変数の初期値を指定します。 #:<syntaxhighlight lang=forth> CREATE my-var 42 , </syntaxhighlight> #:上記の例では、<code>my-var</code> という名前の変数が定義され、初期値として <code>42</code> が設定されています。<code>,</code> はスタックのトップの値を <code>my-var</code> の定義領域に格納するワードです。 # 配列の定義 #: <code>CREATE</code> を使って配列を定義する場合、配列の要素数や初期値を指定します。 #:<syntaxhighlight lang=forth> CREATE my-array 5 ALLOT </syntaxhighlight> #: 上記の例では、<code>my-array</code> という名前の配列が定義され、5つの要素分の領域が確保されます。各要素には初期値が与えられていないため、初期化が必要な場合は別途行います。 ==== 使用例 ==== このForthのコードは、<code>CREATE</code> を使って変数と配列を定義し、それらに値を格納・表示する例です。 ; 変数の定義と使用 :<syntaxhighlight lang=forth> CREATE x \ 変数 x を定義 100 x ! \ x に 100 を代入 x @ . CR \ x の値を表示 </syntaxhighlight> * <code>CREATE x</code>: <code>x</code> という名前の変数を定義します。<code>CREATE</code> はディクショナリに新しいワードを登録しますが、データスペース自体は確保しません。 * <code>100 x !</code>: <code>x</code> のデータフィールドに <code>100</code> を格納します。 * <code>x @ . CR</code>: <code>x</code> のデータフィールドから値を読み取って表示します。<code>CR</code> は改行を出力します。 ; 配列の定義と使用 :<syntaxhighlight lang=forth> CREATE MY-ARY 100 ALLOT \ 100セルの配列を作成 42 MY-ARY 10 + ! \ 11番目の要素に42を代入 MY-ARY 10 + @ . \ 11番目の要素の値を表示 </syntaxhighlight> * <code>CREATE MY-ARY 100 ALLOT</code>: <code>MY-ARY</code> という名前の配列を定義し、100セル分のデータスペースを確保します。 * <code>42 MY-ARY 10 + !</code>: <code>MY-ARY</code> の11番目の要素(0から始まるインデックスなので、10を足します)に <code>42</code> を代入します。 * <code>MY-ARY 10 + @ .</code>: <code>MY-ARY</code> の11番目の要素の値を読み取って表示します。 この例では、<code>CREATE</code> を使って変数 <code>x</code> と配列 <code>MY-ARY</code> を定義し、それぞれに値を設定しています。<code>x</code> は単一の値を格納する変数であり、<code>MY-ARY</code> は複数の要素を持つ配列です。<code>!</code> を使ってデータを代入し、<code>@</code> を使ってデータを取得しています。 Forthの特性として、変数や配列の定義はディクショナリに登録されるため、名前に対して対応するデータ領域へのアクセスが可能となります。これにより、動的なデータ構造を効率的に管理することができます。 === アライメント === Forthの <code>ALIGN</code> ワードは、データ領域のアラインメントを行うためのワードです。アラインメントとは、データがメモリ上で配置される位置を調整することであり、特定のアドレス境界にデータを配置することを指します。 アラインメントの必要性は、プロセッサアーキテクチャに依存しますが、多くのアーキテクチャでは特定のデータ型(例:4バイト整数など)は特定の境界に配置される必要があります。アラインメントが正しく行われないと、メモリアクセスの効率が低下したり、アドレスエラーなどの例外が発生し処理を中断する可能性があります。 ; 構文 :<syntaxhighlight lang=forth> ALIGN </syntaxhighlight> ; 動作 : <code>ALIGN</code> ワードは、データスペースポインタ (<code>HERE</code>) をアラインメント条件に従って調整します。具体的には、通常は2バイトまたは4バイトの境界に <code>HERE</code> を調整します。これにより、次に確保されるデータ領域が適切な境界に配置されます。 ; 使用例 :<syntaxhighlight lang=forth> HERE ALIGN </syntaxhighlight> : 上記の例では、<code>HERE</code> の値をアラインメントされた位置に調整します。これにより、次に確保されるデータ領域が適切な境界に配置されます。 :<syntaxhighlight lang=forth> CREATE my-var ALIGN 2 ALLOT </syntaxhighlight> : この例では、<code>my-var</code> という名前の変数を定義していますが、そのデータ領域が2バイト境界にアラインメントされて確保されます。これにより、<code>my-var</code> のデータ領域は適切な境界に配置され、メモリアクセスの効率が向上します。 <code>ALIGN</code> ワードは、特定のアーキテクチャで必要なメモリアラインメントを確保するために重要な役割を果たします。メモリアクセスの効率を最大化するために、適切なアラインメントが常に考慮されるべきです。 == 入出力と組み込みワード == Forthには標準の入出力ワードがあり、コンソールやファイルからの入出力を行えます。また、様々な組み込みワードが用意されており、これらを活用することでForthの機能を拡張できます。 === 標準入出力 === Forthには、キーボードからの文字入力や、コンソールへの文字出力を行うためのワードが用意されています。 :<syntaxhighlight lang=forth> KEY \ キーボードから1文字読み込む EMIT \ スタック上の値(文字コード)を出力する ." \ 文字列を直接出力する </syntaxhighlight> <code>KEY</code>はキーボード入力を待ち、押された文字のASCIIコードをスタックに置きます。<code>EMIT</code>は逆に、スタック上の値を文字コードとして解釈し、コンソールに出力します。<code>." Hello"</code>のように、<code>."</code> の後に文字列を続けると、その文字列がコンソール出力されます。 数値入出力には、<code>?</code>、<code>U.</code>、<code>U.R</code>などのワードが使えます。<code>?</code>は数値を入力受け付け、<code>U.</code>は符号なし数値を、<code>U.R</code>は数値を指定した基数(2進数、16進数など)で出力します。 === ファイルアクセス === ファイル入出力には、様々なワードが用意されています。<code>OPEN-FILE</code>でファイルを開き、<code>READ-FILE</code>や<code>WRITE-FILE</code>でデータの読み書きができます。 :<syntaxhighlight lang=forth> S" data.txt" R/O OPEN-FILE THROW VALUE HANDLE \ ファイルを読み取りモードで開く HANDLE READ-FILE ABORT" READ ERROR" \ ファイルを読み込む HANDLE CLOSE-FILE THROW \ ファイルを閉じる </syntaxhighlight> ファイル名は、<code>S"</code> で文字列をスタックに置いた後、<code>R/O</code>(読み取り専用)や<code>W/O</code>(書き込み専用)といったモードを指定してファイルを開きます。<code>THROW</code>はエラーがあれば例外を発生させます。 <code>READ-FILE</code>や<code>WRITE-FILE</code>では、バッファ領域のアドレスと読み書きするバイト数をスタックに置く必要があります。 === 組み込みワードの利用 === Forthには、数学関数や論理演算、メモリ操作など、様々な組み込みワードが用意されています。必要に応じてこれらのワードを活用することで、プログラムにさまざまな機能を付加できます。 :<syntaxhighlight lang=forth> 2 3 MAX . \ 最大値(3)を出力 S" HELLO" SWAP DROP \ スタック操作サンプル HEX 1F20 4 DUMP \ メモリダンプ </syntaxhighlight> <code>MAX</code>は2つの数値の最大値を、<code>SWAP</code>は2つの値の順序を入れ替え、<code>DROP</code>は最上位の値を捨てます。<code>DUMP</code>は指定したアドレスからのメモリ内容をダンプ出力します。 組み込みワードには、浮動小数点演算、文字列処理、マルチタスク、IPCなど、様々な分野のものがあります。また、必要に応じてワードを自作したり、外部ライブラリからリンクしたりできます。Forthはコンパクトなシステムながら、組み込みワードの充実により高い機能性を発揮します。 == アプリケーション開発 == Forthは小規模な組み込みシステムから大規模なアプリケーションまで、幅広い用途に使用できる言語です。この章では、Forthにおけるアプリケーション開発の手法と、実例について解説します。 === モジュール化とワード管理 === Forthはワードをベースとしたモジュール性の高いプログラミングができます。大きなアプリケーションを開発する際は、適切にモジュール分割してワードを設計・管理することが重要です。 Forthにはネームスペースの概念がありません。そのため、ワード名の重複を避けるためには、プレフィックスなどの命名規則を定めることが一般的です。たとえば<code>STRING-LENGTH</code>のように、ワードの役割がわかるよう名前を付けます。 また、ワードをまとめてファイルに保存し、必要に応じて読み込む方法があります。Forthの多くの処理系は、ワードの定義をソースファイルに保存したり、メモリイメージを永続化したりできます。 :<syntaxhighlight lang=forth> MARKER MODULE>STRING : STRING-LENGTH \ 文字列の長さを求める ... ; : STRING-REVERSE \ 文字列を反転する ... ; STRING-REVERSESTRING-LENGTH +MODULE </syntaxhighlight> 作成したワードは<code>MODULE>NAME</code>でモジュール名を付け、<code>+MODULE</code>でモジュールを完成させることができます。他のソースから<code>USE MODULE>NAME</code>とすれば、そのモジュールのワードが使用可能になります。 大規模なシステムでは、このようなソースレベルの分割に加え、オーバーレイ、仮想メモリ、マルチタスク機能を活用することで、メモリの効率的な使用が可能です。 === グラフィックス処理 === Forthでもグラフィック処理が可能ですが、組み込みの機能は限られています。ほとんどの処理はユーザ定義ワードとして実装する必要があります。 ビットマップ画像の表示や、ウィンドウ、マウスカーソルなどの基本的なGUIの作成はある程度可能です。高度な3Dグラフィックスなどを実現するには、外部ライブラリを利用する必要があります。 :<syntaxhighlight lang=forth> NEED FRAMEBUFFER \ フレームバッファへのアクセスモジュール : DRAW-LINE ( x1 y1 x2 y2 -- ) \ ブレザンハムのアルゴリズムでライン描画 ... ; : DRAW-RECT ( x y w h -- ) 2SWAP 2>R 2R> \ (x y w h -- x y x+w y+h) DRAW-LINE 2>R 2R> DRAW-LINE 2SWAP DRAW-LINE 2SWAP DRAW-LINE ; FRAMEBUFFER-INIT \ グラフィックスサブシステムの初期化 100 100 300 200 DRAW-RECT \ 長方形を描画 </syntaxhighlight> 上記では、フレームバッファの制御関数がロードされた前提で、<code>DRAW-LINE</code>を使って<code>DRAW-RECT</code>(長方形描画)を実装しています。スタックを活用して座標値を受け渡し、基本的な幾何図形を描画しています。 Forthはグラフィックスパイプラインなどの高度な機能を組み込んでいませんが、スタックベースの処理により、低レベルのデバイスアクセスが可能です。組み込みシステムのディスプレイやLED制御など、グラフィックス関連の処理に適しています。 === システムプログラミング === Forthの本質的な特性として、システムプログラミングに適していることがあげられます。小規模でコンパクト、高速動作、低レベルなメモリアクセスが可能というメリットがあります。 OSカーネル、デバイスドライバ、BIOS、ブートローダなどの開発にForthは広く使われてきました。組み込みシステムでは、センサーやI/Oデバイスの制御に最適です。スタック指向のモデルにより、レジスタレベルの処理が直接かけるのも特徴です。 例えば、Forthを使ってブートローダを実装する場合には、次のようなプログラムになります。 :<syntaxhighlight lang=forth> HEX 07C0 INPORT DROP \ DOSデータ領域クリア 0800 0 20 MOVE \ リセットベクタ設定 KERNEL.IMG LOAD \ カーネル読み込み A000 OUTPORT \ VGAモードへ切り替え 1000 JMP \ カーネル実行 ... \ BIOSブート用の簡単なForth読み込みコード :KERNEL.IMG LOAD CORE SWAP CPU KERNEL ; </syntaxhighlight> BIOSなどの低レベル機能を呼び出してブートローダを構築する処理が、Forthの文法でコンパクトに記述できる様子がわかります。 また、Forth自身が小規模で可搬性が高いため、Forth処理系そのものもForthで書かれた簡単なコアを、ホストOSやアーキテクチャに合わせてセルフホスト (移植) する手法が一般的です。これは、アプリケーションと実行環境を一体化して開発できる利点があります。 == 高度なトピック == ここまでForthの基本的な構文と概念、データ構造、アプリケーション開発の実例などを解説してきました。この章では、Forthの高度な利用方法としてパフォーマンス最適化、マルチスレッド・マルチタスク、メタプログラミングについて取り上げます。 === 最適化とパフォーマンス === Forthはコンパクトで高速な言語ですが、さらなる最適化の余地があります。ワードの定義を工夫したり、ネイティブコードコンパイラを使ったりすることで、パフォーマンスを向上できます。 ワード定義の最適化では、冗長な演算を排除したり、インラインコーディングの手法を用いたりします。例えば、次のようなワード定義があるとします。 :<syntaxhighlight lang=forth> : MAX2 ( n1 n2 -- max ) 2DUP > IF SWAP DROP ELSE NIP THEN ; </syntaxhighlight> この<code>MAX2</code>は一時的に2つの値を複製(<code>2DUP</code>)し、<code>IF</code>..<code>ELSE</code>..<code>THEN</code>の条件分岐で最大値を選びます。しかし、この一時複製が無駄な演算となっています。次のように書くとコードがシンプルになります。 :<syntaxhighlight lang=forth> : MAX2 ( n1 n2 -- max ) OVER OVER > IF SWAP THEN ; </syntaxhighlight> ワードの最適化には一般的なテクニックがあり、Forthのコンパイラ作者から提案されているものを参考にするとよいでしょう。 また、Forthにはネイティブコードコンパイラと呼ばれるもので、ワードの実行コードをネイティブマシン語に変換できるものがあります。Forthの対話的な実行環境は便利ですが、ネイティブコードの方が高速に動作します。こうした最適化手法を使い分けることで、Forthのパフォーマンスを飛躍的に向上できます。 === マルチスレッドとマルチタスク === Forthには並列実行の機構が組み込まれていないため、マルチスレッドやマルチタスク処理を実現するにはユーザ定義の実装が必要です。しかし、Forthの言語特性を活かせばきわめてコンパクトな並列処理ができます。 マルチスレッドでは、スタックを分離し、スレッド毎にスタックのコピーを持つ手法が一般的です。スレッドの切り替えはスタックのコンテキストスイッチで実現できます。また、Forthのデータストアクセス方式を応用すれば、IPC(プロセス間通信)の仕組みを作ることもできます。 :<syntaxhighlight lang=forth> : NEW-TASK ( -- ) HERE CURRENT-STACK >R CREATE-STACK SWAP [: DO-SOME-WORK ;] ( compile: word behavior ) R> SET-CURRENT ; </syntaxhighlight> この例では、新しいタスクを作成するワード<code>NEW-TASK</code>を定義しています。<code>CREATE-STACK</code>でスタックを新しく割り当て、<code>DO-SOME-WORK</code>のようなワード定義をタスクとして登録します。実行時にはスケジューラによってこれらのタスクが実行されます。 マルチタスク機構を実装する例は多数あり、スレッド単位でデータを扱う方式、メッセージキューによる方式、それぞれ長所と短所があります。並列処理にはデッドロックなどの問題点もありますが、Forthではコンパクトでシンプルなコード記述が可能です。 === メタプログラミング === Forthにはプログラムを生成・変更するメタプログラミングの機能があり、コードを自動生成したり、プログラムを動的に変更したりできます。この機能は、Forthをドメイン固有言語(DSL)の開発などに適用できることを意味しています。 メタプログラミングには、コンパイル時に評価される構文<code>[...]</code>と実行時構文<code>EVAL</code>があります。どちらもプログラムをデータとして扱えるため、動的にプログラムを生成・変更できます。 :<syntaxhighlight lang=forth> : HILBERT-CURVE ( n -- ) 0 ?DO [: 2DUP RECURSE >R >R 1 HCURVE R> R> RECURSE 3 HCURVE ;] POSTPONE LITERAL POSTPONE HCURVE LOOP ; </syntaxhighlight> この例では、ヒルベルト曲線を描画するコードを動的に生成しています。<code>POSTPONE</code>はワードのコンパイルを遅延させ、<code>[: ... ;]</code>の構文はその間のテキストを実行可能なコードとしてコンパイルします。この手法により、 Hilbertカーブの次元(<code>n</code>)に応じて、その描画コードを生成しています。 Forthのメタプログラミング機能は、高度な用途に役立ちます。例えば、ユーザインターフェースビルダー、コードジェネレーター、プログラムシンセサイザなどでその力を発揮できます。Forthの柔軟性を最大限に活かせる側面といえるでしょう。 == サンプルプログラムとプロジェクト == Forthの理解を深めるには、実際にコードを書いて動作を確認することが大切です。この章では、様々なサンプルコードを紹介するとともに、実践的なForthプロジェクトの例を示します。 === 様々なサンプルコード === 以下はForthの基本的な機能を示すサンプルコード集です。 ; 再帰によるフィボナッチ数列 :<syntaxhighlight lang=forth> : FIB ( n -- fib-n ) DUP 0= IF DROP 1 EXIT THEN DUP 1 = IF DROP 1 EXIT THEN DUP 1- RECURSE SWAP 2 - RECURSE + ; </syntaxhighlight> ; 文字列操作 :<syntaxhighlight lang=forth> : UPPERCASE ( addr n -- addr n ) OVER + SWAP ?DO I C@ [CHAR] a [CHAR] z 1+ WITHIN IF [CHAR] A [CHAR] a - + THEN I C! LOOP ; : REVERSE-WORDS ( addr n -- ) [CHAR] \ SKIP SPACES OVER >R BEGIN OVER C@ [CHAR] \ <> WHILE [CHAR] \ PARSE DUP >R REVERSE R> OVER C! CHAR+ REPEAT R> DROP 2DROP ; </syntaxhighlight> ; ベクトル・行列計算 :<syntaxhighlight lang=forth> REQUIRE DOUBLE \ 倍精度浮動小数点サポート : VZEROS ( n -- addr ) \ n要素のゼロベクトルを生成 CREATE HERE 0 SWAP 8 * DUP ALLOT FILL ; : MZEROS ( rows cols -- addr ) \ rows x cols の零行列を生成 SWAP VZEROS SWAP 0 ?DO OVER VZEROS COLS + LOOP ; </syntaxhighlight> ; 簡易グラフィックス :<syntaxhighlight lang=forth> VARIABLE FRAMEBUF \ フレームバッファアドレス : PIXEL ( x y color -- ) \ 1ピクセル書き込み FRAMEBUF @ >R 2 * R@ + 3 * RP@ C!+ RP@ C!+ RDROP ; : LINE ( x1 y1 x2 y2 c -- ) \ ラインの描画 >R 2SWAP R> 2>R 2R@ PIXEL 2R> PIXELLINE ; </syntaxhighlight> これらの例は、スタックを使った処理の流れ、ユーザ定義ワードの作成、再帰など、Forthのプログラミング手法の基本を示しています。コンパクトながらも表現力の高さがわかるでしょう。 === 実践的なプロジェクト例 === 次に、もう少し大がかりなForthプロジェクトの例を紹介します。 ; Forth Chip-8 エミュレーター Chip-8はレトロなゲームコンソールで、Forthでその命令セットをエミュレートするプロジェクトです。グラフィックス、入力処理、命令デコーダなどを実装します。 ; カーネルとブートローダ ForthでOSカーネルの基本部分を実装し、ブートローダと合わせてシステムを構築するプロジェクト。メモリ管理、タスク管理、ファイルシステム、ドライバなどの機能が実装できます。 ; Webサーバー ForthでHTTPリクエストを処理するWebサーバーを作成。ソケット通信、文字列処理、ファイル入出力などの機能が必要になります。追加してWebアプリケーションフレームワークなども作れます。 ; オープンソースForthプロセッサ Forthを使ってCPU命令セットを記述し、ゲートレベルまでFPGAに実装するプロセッサの設計プロジェクト。ハードウェア記述言語との連携が重要です。 このようなプロジェクトを通して、Forthの実用性とシステムプログラミングでの可能性を体験できます。Forthという言語自体を使って、OSやハードウェアコンポーネントを実装できるのが最大の特徴です。いずれのプロジェクトも一般的な規模になると、モジュール分割やワード管理、ツール活用などの工夫が必要になります。 == 参考資料 == Forthについてより深く学ぶには、書籍や公開されているオンラインリソースを参照するのが有効な方法です。また、活発なForthコミュニティに参加することで、他の開発者からの助言を得られます。 === 関連書籍の紹介 === Forthの入門書から応用、さらには処理系の実装に至るまで、多くの優れた書籍が出版されています。 * 「Forth入門」レオ・ブロディ (ISBN:978-4875930297 工学社) ** Forth言語の基本から、アプリケーション開発までをカバーした長年の定番書。 * 「Thinking Forth」Leo Brodie (Punchy Publishing) / Forth思考 ―問題解決のための言語と哲学― レオ・ブロディー著 ** Forth哲学に重きを置いた名著。Forthの考え方を深く解説。 * 「Forth Programmer's Handbook」(ISBN:978-1419675492 Forth Inc.) ** ANS Forthの規格書で、WordSetの詳細が書かれている。 これらの書籍を手に入れられれば、Forthの理解が格段に進むはずです。電子書籍としても出版されているものがあります。 === オンラインリソース === {{Wikipedia}} インターネット上にも無料で参照できるForth関連の豊富なリソースが存在します。 * Forth Interest Group ( https://www.forth.org/ ) ** Forthに関する書籍、記事、リソースなどが集まるポータル。 * Forth-Standard-Committee 公式サイト( https://forth-standard.org/ ) Webサイト、ソースコード、ニュースレターなど、さまざまな形でリソースが公開されているので、活用していきたいものです。 === Forthコミュニティ === 長年にわたりForth言語を支える活発なコミュニティが存在し、開発者同士が支え合う環境があります。 * Newsgroups: comp.lang.forth ** ディスカッションの場となるForth専用のニュースグループ。 * 地域 Forth グループ ** ヨーロッパ、アメリカ、アジアなどの地域Forthグループ。 オンラインフォーラムやメーリングリスト、対面の勉強会など、様々な形でForth開発者同士が交流を深めています。初心者でもこうしたコミュニティに参加することで、サポートを受けられます。Forthの小さな世界ですが、地域を越えて開発が行われているのが特徴です。 Forthの参考文献やオンラインリソース、そしてコミュニティを上手く活用することで、この独特な言語の理解が一層深まるはずです。 == 脚註 == <references /> [[Category:Forth|*]] [[Category:プログラミング言語]] eodcr9xk2jg86n8sonoqk91yxekmhbw 246674 246673 2024-04-14T01:39:17Z Ef3 694 /*ファイル操作*/ Forthのファイル操作に関連するオプションのワードセットである「File-Access」についての情報を要約します。 wikitext text/x-wiki == はじめに == Forthはスタック指向のプログラミング言語であり、そのシンプルさと柔軟性から広く用いられています。 本書は、プログラマがForthを効果的に使いこなすための手引書として設計されています。例示や実践的なヒントが豊富に盛り込まれており、読者は理論を理解しながら実際のプロジェクトに応用できるでしょう。 本書を通じて、Forthの魅力と実力を十分に体感し、その利用価値を最大限に引き出すことができるでしょう。 本書では、ForthのCore Word Setに準拠した標準的なForthシステムを題材とします。 == Forthプログラミングの基礎 == Forthはスタック指向のプログラミング言語であり、独自の特徴を持っています。以下では、Forthプログラミングの基礎を解説します。 === スタック操作 === [[スタック構造|スタック]]は、Forthにおける中心的なデータ構造です。ほとんどのワードは、スタックから値を取り出したり、スタックに値を代入したりします。スタックは、後入れ先出し(LIFO; Last In First Out)のデータ構造で、Forthの演算はスタック上で行われます。 === 例 === 以下は、Forthでの簡単な計算の例です: :<syntaxhighlight lang=forth> 3 4 + . </syntaxhighlight> : まず<code>3</code>をスタックに置き、<code>4 + .</code> を解釈します。 : 次に、<code>4</code>をスタックに置き、<code>3 4</code> となり、<code>+ .</code> が残ります。 : そして、<code>+</code> はスタックのトップの2つの要素を加算して結果を戻し、スタックには<code>7</code>だけが残ります。 : 最後に、<code>.</code>(ドット)はスタックから<code>7</code>を取り除いてそれを表示します。 :{| |- !コード!!style='width:3em'| 3 !!style='width:3em'| 4 !!style='width:3em'| + !!style='width:3em'| . |- !スタックトップ |style="border:1px solid black; text-align:center"| 3 ||style="border:1px solid black; text-align:center"| 4 ||style="border:1px solid black; text-align:center"| 7 || |- ! | ||style="border:1px solid black; text-align:center"| 3 || || |- !出力 | || || ||style="text-align:center; font-weight: bold"| 7 |} === コメント === Forthでは、コメントは括弧で囲んで表現されます。例えば: :<syntaxhighlight lang=forth> ( これはコメントです ) </syntaxhighlight> <code>/</code> から行末までもコメントです :<syntaxhighlight lang=forth> 3 4 + \ 3 + 4 の結果をスタックトップに残す </syntaxhighlight> コメントは、インタプリタの動作に影響を与えません。 === スタックエフェクト === Forthの各ワードは、スタック上で特定の操作を行います。ワードのドキュメントでは、それがスタックに対してどのような影響を与えるかを示す記述があります。例えば: :<syntaxhighlight lang=forth> + ( a b -- c ) </syntaxhighlight> この記述は、<code>+</code>ワードが2つの引数(<code>a</code>と<code>b</code>)を消費し、1つの結果(<code>c</code>)をスタックに残すことを意味します。 === Forthのワードとは?その定義と使用について === Forthにおける「ワード」とは、基本的には単語や言葉を意味しますが、Forthプログラミングでは、より具体的には次の2つの意味を持ちます。 # 定義済みの単語 #: ワードは、Forthの語彙において定義された単語や操作を指します。Forthでは、これらのワードはスタック操作や制御構造、算術演算などの基本的な機能を表します。例えば、<code>+</code>は2つの数値を取り出して足し合わせ、結果をスタックに戻すワードです。 # 新しい単語の定義 #: ワードは、Forthプログラム内で新しい単語を定義するための仕組みとしても使われます。これは、既存のワードを組み合わせて、新しい機能を持つ単語を定義することを意味します。例えば、<code>DOUBLE</code>というワードを定義して、与えられた数値を2倍にするような操作を定義することができます。 ワードの定義は、通常、次のような形式で行われます: :<syntaxhighlight lang=forth> : ワード名 ( 定義部分 ) ; </syntaxhighlight> ここで、<code>: ワード名</code>は新しいワードの定義を開始し、<code>;</code>は定義の終了を示します。定義部分には、既存のワードや操作を組み合わせて、新しい機能を実現するForthのコードが記述されます。 === ワードの定義と使用例 === Forthにおけるワードの定義と使用についてさらに詳しく説明します。 # ワードの定義 : #: ワードは、<code>:</code> と <code>;</code> の間に記述されたコードブロックで定義されます。 #: 例えば、<code>SQUARE</code>という新しいワードを定義してみましょう。 #:<syntaxhighlight lang=forth> : SQUARE ( n -- n*n ) DUP * ; </syntaxhighlight> #: ここでは、<code>SQUARE</code>というワードが定義されています。このワードは、スタックから1つの数値を取り出し、その数値を自乗して結果をスタックに戻します。 # ワードの使用 : #: 定義したワードは、Forthプログラム内で直接使用することができます。 #:<syntaxhighlight lang=forth> 5 SQUARE . \ スタックから5を取り出して自乗し、結果を表示する </syntaxhighlight> #:上記の例では、<code>5 SQUARE .</code> というForthコードが実行されます。まず、<code>5</code>がスタックに積まれ、次に<code>SQUARE</code>ワードが実行されて、<code>5</code>の自乗である<code>25</code>が計算されます。最後に<code>.</code>はスタックのトップの値を表示しますので、結果として<code>25</code>が表示されます。 # 組み込みワードとカスタムワード : #: Forthには組み込みのワード(<code>+</code>, <code>-</code>, <code>*</code>, <code>/</code>など)がありますが、ユーザーはこれに加えて独自のワードを定義することができます。カスタムワードを使うことで、プログラムをより効率的に構築できます。 # 再帰的なワード : #: Forthでは、ワードは自身の中で再帰的に呼び出すことができます。これにより、複雑な演算や制御構造を簡潔に表現することが可能です。 ワードの定義と使用は、Forthプログラムの中核的な部分を構成します。これにより、プログラムの再利用性、メンテナンス性、可読性が向上し、効率的なコーディングが実現されます。 === 基本的な制御構造 === Forthの制御構造は、他のプログラミング言語とは異なり「制御構造もワードの集合から定義する」という独自の特徴を持っています。Forthでは、基本的な制御構造として条件分岐とループが利用されます。 制御構造に関するワードは、コンパイル時(つまり <code>:</code> から <code>;</code> までの間)でのみ使用でき会話モードでは使用できません。 ==== 条件分岐 ==== Forthでは、条件分岐は主に <code>IF</code>, <code>ELSE</code>, <code>THEN</code> のワードを組み合わせて実現されます。 ; 例: :<syntaxhighlight lang=forth> : ABS ( n -- |n| ) DUP 0< IF NEGATE THEN ; </syntaxhighlight> この例では、<code>ABS</code>というワードを定義しています。このワードは、スタックから数値を取り出し、その絶対値を計算して結果をスタックに戻します。<code>DUP 0<</code> はスタックトップの値が0より小さいかどうかをチェックし、<code>IF</code> から <code>THEN</code> の間に記述されたブロックが条件を満たす場合に実行されます。つまり、もし数値が負の場合は <code>NEGATE</code> が実行されます。 ==== ループ ==== Forthでは、ループは <code>DO</code>, <code>LOOP</code> や <code>BEGIN</code>, <code>WHILE</code>, <code>REPEAT</code> のワードを使って実装されます。 ; 例: :<syntaxhighlight lang=forth> : COUNTDOWN ( n -- ) 0 DO I . LOOP ; </syntaxhighlight> 上記の例では、0から与えられた数値(<code>n</code>)までカウントダウンする<code>COUNTDOWN</code>というワードを定義しています。 ==== その他の制御構造 ==== Forthには他にも、<code>CASE</code>, <code>OF</code>, <code>ENDOF</code>, <code>ENDCASE</code> を使った条件分岐や、<code>IF-ELSE-ENDIF</code> 構造、<code>BEGIN-UNTIL</code>、<code>BEGIN-WHILE-REPEAT</code> など、さまざまな制御構造が存在し、新たな制御構造をユーザーが定義することすら出来ます。 Forthの制御構造は、スタック指向の特性に基づいてシンプルかつ柔軟に設計されており、独自のプログラミングスタイルを持つことが特徴です。 === スタック操作の基本命令 === Forthにはスタック上のデータを操作するための基本的な命令があります。 * <code>DUP</code>: ( n -- n n ) スタックのトップの要素を複製する * <code>DROP</code>: ( n -- ) スタックのトップの要素を削除する * <code>SWAP</code>: ( n1 n2 -- n2 n1 ) スタックのトップとその下の要素を交換する * <code>OVER</code>: (n1 n2 -- n1 n2 n1 ) スタックのトップの2つ下の要素を複製してトップに置く * <code>ROT</code>: ( n1 n2 n3 — n2 n3 n1 ) スタックのトップの3つ下の要素をトップに回転する === 基本的な演算 === Forthには、算術演算(<code>+</code>、<code>-</code>、<code>*</code>、<code>/</code>など)、論理演算(<code>AND</code>、<code>OR</code>、<code>NOT</code>)、比較(<code>=</code>、<code><></code>、<code>></code>、<code><</code>など)の基本ワードが用意されています。これらのワードは、スタック上の値を取り、演算結果をスタックに代入します。 === 再帰的呼び出し === Forthで再帰的呼び出しを行う場合、ワード <code>recurse</code> を使ってワード自身を表します。 再帰的なワードを定義する方法について説明します。 ==== 階乗 ==== 再帰的な階乗(factorial)を定義します。 :<syntaxhighlight lang=forth> : factorial ( n -- result ) dup 0= if \ スタックのトップの値が0かどうかをチェック drop 1 \ もし0ならば、結果は1として処理を終了 else dup 1 - \ スタックのトップの値から1を引いた値をコピー recurse * \ 再帰的に自身を呼び出して、その結果にスタックのトップの値を掛ける then ; </syntaxhighlight> この定義の内容を説明します。 * ワード <code>factorial</code> は、<code>( n -- result )</code> のスタックエフェクトを持ちます。<code>n</code> は階乗を計算する整数です。 * <code>dup 0=</code>: スタックのトップの値が0かどうかをチェックします。 ** もし0ならば、<code>drop 1</code> が実行されて、スタックのトップの値(<code>n</code>)が削除され、結果として <code>1</code> がスタックにプッシュされます。 * <code>else</code>: もしスタックのトップの値が0でない場合は、次の操作が実行されます。 ** <code>dup 1 -</code>: スタックのトップの値から <code>1</code> を引いた値をスタックにプッシュします。これは <code>n - 1</code> の計算です。 ** <code>recurse *</code>: 自身の <code>factorial</code> を再帰的に呼び出して、結果に対してスタックのトップの値(<code>n</code>)を掛けます。これにより、<code>n! = n * (n-1)!</code> の計算が行われます。 * <code>then</code>: <code>if</code> ブロックの終了を示します。 例えば、<code>5 factorial .</code> を実行すると、<code>5</code> の階乗(<code>5!</code>)が計算されます。 :<syntaxhighlight lang=forth> 5 factorial . </syntaxhighlight> この例では、<code>5!</code> の計算手順は以下の通りです: * <code>5</code> がスタックにプッシュされる。 * <code>factorial</code> が呼び出される。 ** <code>dup 0=</code>: スタックのトップの値が0でないので、次の処理が実行される。 ** <code>dup 1 -</code>: <code>5 - 1</code> が計算されて <code>4</code> がスタックにプッシュされる。 ** <code>recurse *</code>: <code>4</code> の階乗 (<code>4!</code>) が再帰的に計算される。 *** <code>dup 0=</code>: スタックのトップの値が0でないので、次の処理が実行される。 *** <code>dup 1 -</code>: <code>4 - 1</code> が計算されて <code>3</code> がスタックにプッシュされる。 *** <code>recurse *</code>: <code>3</code> の階乗 (<code>3!</code>) が再帰的に計算される。 **** ... ***** 最終的に、<code>1</code> の階乗 (<code>1!</code>) が計算されて <code>1</code> がスタックにプッシュされる。 **** <code>5 *</code>: <code>5</code> と <code>4!</code> の結果を掛けて <code>120</code> がスタックにプッシュされる。 *** <code>5 *</code>: <code>5</code> と <code>120</code> の結果を掛けて <code>120</code> がスタックにプッシュされる。 * <code>. (dot)</code> コンパイラワ ==== 最大公約数(GCD) ==== 再帰的にユークリッドのアルゴリズムを使用して最大公約数(Greatest Common Divisor, GCD)を計算します。 :<syntaxhighlight lang=forth> : gcd ( u1 u2 -- gcd ) dup 0= if \ スタックのトップの値が0かどうかをチェック drop \ スタックのトップの値が0ならば削除して終了 else swap over mod recurse \ スタックのトップと2番目の値を入れ替えて、modを計算し再帰的に呼び出す then ; </syntaxhighlight> このプログラムの動作をステップごとに説明します: # <code>dup 0=</code>: スタックのトップの値(<code>u1</code>)が0かどうかをチェックします。 #* もし0ならば、<code>drop</code> が実行されて、スタックのトップの値(<code>u1</code>)が削除されます。この場合は再帰の終了条件となります。 # <code>else</code>: もしスタックのトップの値(<code>u1</code>)が0でない場合は、次の操作が実行されます。 # <code>swap over mod recurse</code>: #* <code>swap</code>: スタックのトップと2番目の値を入れ替えます。これにより、<code>u1</code> と <code>u2</code> の値が入れ替わります。 #* <code>over</code>: スタックの2番目の値(入れ替え前の <code>u1</code>)をスタックのトップにコピーします。 #* <code>mod</code>: スタックのトップの2つの値を取り出して、<code>u1 % u2</code>(<code>u1</code> を <code>u2</code> で割った余り)を計算し、その結果をスタックにプッシュします。 #* <code>recurse</code>: 自身の <code>gcd</code> を再帰的に呼び出します。これにより、新しい <code>u1</code> と <code>u2</code> の値がスタックに積まれ、再帰的に最大公約数が計算されます。 # <code>then</code>: <code>if</code> ブロックの終了を示します。 例えば、<code>12 18 gcd .</code> を実行すると、以下のように動作します: * <code>12</code> と <code>18</code> がスタックにプッシュされます。 * <code>gcd</code> が呼び出されます。 ** <code>dup 0=</code>: <code>18</code> は0ではないので、次の処理に進みます。 ** <code>swap over mod recurse</code>: <code>18</code> と <code>12</code> が入れ替わり、<code>18 % 12</code> が計算されます(余りは <code>6</code>)。 ** <code>gcd</code> が再帰的に呼び出され、新しい値 <code>12</code> と <code>6</code> がスタックにプッシュされます。 *** <code>dup 0=</code>: <code>6</code> は0ではないので、次の処理に進みます。 *** <code>swap over mod recurse</code>: <code>6</code> と <code>12</code> が入れ替わり、<code>6 % 12</code> が計算されます(余りは <code>6</code>)。 *** <code>gcd</code> が再帰的に呼び出され、新しい値 <code>6</code> と <code>6</code> がスタックにプッシュされます。 **** <code>dup 0=</code>: <code>6</code> は0ではないので、次の処理に進みます。 **** <code>swap over mod recurse</code>: <code>6</code> と <code>6</code> が入れ替わり、<code>6 % 6</code> が計算されます(余りは <code>0</code>)。 **** <code>0=</code>: <code>0</code> が0なので、<code>drop</code> が実行されて、スタックのトップの値 <code>0</code> が削除されます。 * 最終的に、スタックのトップには <code>6</code> が残ります。これが <code>12</code> と <code>18</code> の最大公約数です。 したがって、<code>12 18 gcd .</code> を実行すると、<code>6</code> が表示されます。 === 変数の宣言・代入と参照 === Forthにおける <code>VARIABLE</code> は、変数を定義するためのワードです。Forthでは、変数はメモリ内のアドレスに名前を関連付ける方法で定義されます。 以下は、<code>VARIABLE</code> を使用して変数を定義する方法とその使い方の例です。 ==== <code>VARIABLE</code> の使用方法 ==== <code>VARIABLE</code> は以下のように使用します: :<syntaxhighlight lang=forth> VARIABLE my-var \ my-var という名前の変数を定義する </syntaxhighlight> この行は、名前が <code>my-var</code> の変数を定義します。この変数はメモリ内の特定のアドレスに関連付けられます。 ==== 変数の使用方法 ==== 定義された変数を使用するには、<code>@</code>(fetch)や <code>!</code>(store)などのワードを使います。これらのワードを使って変数の値を取得したり設定したりできます。 - <code>@</code> は、変数の値をスタックにプッシュします。 - <code>!</code> は、スタックのトップの値を変数に代入します。 例えば、次のように変数に値を設定して取得します: :<syntaxhighlight lang=forth> 123 my-var ! \ 変数 my-var に値 123 を代入する my-var @ . \ 変数 my-var の値を表示する </syntaxhighlight> この例では、変数 <code>my-var</code> に <code>123</code> を代入し、その後 <code>@</code> を使って変数の値を取得して表示しています。 ==== 実際の例 ==== 以下は、<code>VARIABLE</code> を使って変数を定義し、値を設定して取得する具体的な例です: :<syntaxhighlight lang=forth> VARIABLE my-var \ my-var という名前の変数を定義する 123 my-var ! \ 変数 my-var に値 123 を代入する my-var @ . \ 変数 my-var の値を表示する </syntaxhighlight> この例では、変数 <code>my-var</code> を定義し、<code>123</code> を代入してその値を表示しています。<code>!</code> で変数に値を設定し、<code>@</code> で変数の値を取得しています。 変数はプログラムでデータを保持する際に便利です。Forthでは、変数の値は直接メモリ上に代入されるため、効率的なデータ管理が可能です。 === 定数の定義と参照 === Forthの <code>CONSTANT</code> は、定数を定義するためのワードです。定数は変更されることのない値であり、プログラムの中で何度も使われる値を簡潔に表現するために使用されます。 ==== <code>CONSTANT</code> の使用方法 ==== <code>CONSTANT</code> は以下のように使用します: :<syntaxhighlight lang=forth> 123 CONSTANT my-const \ my-const という名前の定数を定義する </syntaxhighlight> この行は、名前が <code>my-const</code> の定数を定義し、その値を <code>123</code> に設定します。定数はプログラム中で使用される値を一元管理し、可読性を向上させます。 ==== 定数の使用方法 ==== 定義された定数は、その名前を使ってプログラム中で値を参照することができます。 :<syntaxhighlight lang=forth> my-const . \ 定数 my-const の値を表示する </syntaxhighlight> この例では、定数 <code>my-const</code> の値が表示されます。 ==== 実際の例 ==== 以下は、<code>CONSTANT</code> を使って定数を定義し、その定数を使用する具体的な例です: :<syntaxhighlight lang=forth> 123 CONSTANT my-const \ my-const という名前の定数を定義する my-const . \ 定数 my-const の値を表示する </syntaxhighlight> この例では、定数 <code>my-const</code> を <code>123</code> に設定し、その後定数の値を表示しています。 定数はプログラム中で共通の値を使い回す際に便利です。Forthの定数は一度定義されると値が変更されることはなく、プログラム全体で一貫性のある値を提供します。 === 基数 === Forthの <code>BASE</code> は、数値の基数(n進数のn)を設定するための変数です。Forthでは、数値の表現において基数を変更することができます。通常、Forthはデフォルトで10進数を使用しますが、<code>BASE</code> を変更することで他の基数(2進数、16進数など)で数値を表現することが可能です。 ==== <code>BASE</code> の使用方法 ==== <code>BASE</code> は以下のように使用します: :<syntaxhighlight lang=forth> 16 BASE ! \ 基数を16進数に設定する </syntaxhighlight> この行は、<code>BASE</code> の値を <code>16</code> に設定しています。これにより、その後の数値の表示や入力が16進数で行われるようになります。 ==== 基数の変更と数値の表現 ==== <code>BASE</code> を変更することで、その後の数値リテラルの表現が変わります。例えば、<code>BASE</code> を16進数に設定した場合、数値リテラルは16進数として解釈されます。 :<syntaxhighlight lang=forth> 16 BASE ! \ 基数を16進数に設定する FF . \ 16進数の255を表示する </syntaxhighlight> この例では、<code>BASE</code> を16進数に設定してから、<code>FF</code> を表示すると、16進数の <code>FF</code> (10進数の <code>255</code>)が表示されます。 ==== デフォルトの基数と再設定 ==== Forthのデフォルトの基数は10進数です。基数を変更した後は、必要に応じて再度基数を10進数に戻すことができます。 :<syntaxhighlight lang=forth> DECIMAL BASE ! \ 基数を10進数に戻す </syntaxhighlight> この行は、<code>BASE</code> を10進数に再設定しています。これにより、数値リテラルは再び10進数として解釈されるようになります。 よくある間違い: :<syntaxhighlight lang=forth> 10 BASE ! \ 基数を16進数から10進数に戻す??? </syntaxhighlight> : として基数を10に戻そうとするミスがあります。 : コードの 10 は16進数として解釈されるので基数は16のままです。 ==== 注意点 ==== <code>BASE</code> を変更すると、数値の解釈や表示が変わるため、基数の変更後には適切な基数に戻すことが重要です。また、<code>BASE</code> の値は変数として扱われるため、必要に応じて保存や復元することができます。 基数を変更することで、特定の基数で数値を扱うプログラムを簡単に記述することができます。 === イミディエイトワード === イミディエイトワード(immediate word)は、Forthプログラミング言語において特定の動作を持つワードの一種です。イミディエイトワードは、通常のワードとは異なり、コンパイル時ではなく実行時に直ちに処理されます。 以下は、イミディエイトワードの特性について詳しく説明します: # 実行時処理: #* イミディエイトワードは、定義された時点ではコンパイルされず、実行時に直ちに解釈および実行されます。 #* 通常のワード(コンパイルワード)は、単なるコンパイル時にスタックに動作を積むだけであり、後で実行されますが、イミディエイトワードは定義された時点ですぐに実行されます。 # 定義方法: #* イミディエイトワードは、<code>IMMEDIATE</code> を使用して定義されます。 #* これにより、そのワードが定義された直後に実行されるようにマークされます。 # 使用例: #* 例えば、<code>."</code>(ダブルクォートピリオド)はイミディエイトワードです。これは、コンパイル時ではなく実行時に文字列を表示します。 #* <code>: greeting ." Hello, world!" ;</code> という定義では、<code>. "</code>Hello, world!"<code> はコンパイル時に実行されず、</code>greeting` を実行したときに実行されます。 # 動的な挙動: #* イミディエイトワードは、通常のワードとは異なり、実行時の環境やスタックの状態に応じて動的に振る舞います。 #* これにより、実行時に動的なテキストや操作を生成するために使用することができます。 イミディエイトワードは、Forthの柔軟性と強力な動的な特性を提供します。コンパイル時に制御構造や動作を決定するだけでなく、実行時に動的な挙動を持つことができます。 {{コラム|Forthの文法|2=Forthのプログラムは、空白文字で区切られた「ワード」の並びで構成されます。ワードには、数値リテラル、制御構造、演算子、そして他のワードを呼び出す構文などがあります。Forthには高水準の構文がなく、基本的な構文要素は非常にシンプルです。 例えば、<code>2 3 +</code> と入力すると、2と3がスタックにプッシュされ、最後の<code>+</code>がスタック上の2つの数値を加算します。この結果である5がスタックに残ります。つまり、Forthではプログラムの実行とデータ操作が、ワードの解釈とスタック操作によって行われるのです。 Forthは、基本的に行指向の言語です。プログラムは複数行に分割できますが、改行の前後で文が継続する場合は、スペースを入れる必要があります。このため、適切なインデントを使ってプログラムの構造をわかりやすくすることが重要です。 }} == データ型 == Forthには明示的なデータ型宣言がないため、データ型は主に暗黙的に扱われます。Forthでは、データ型はデータの解釈や使用方法に依存します。以下では、Forthでよく使用されるデータ型について説明します。 === セル(Cell) === セルは、通常2バイトまたは4バイトのサイズを持つ整数型です。Forthの基本的なデータ型であり、スタックやメモリ内のデータはセル単位で扱われます。セルのサイズは実装によって異なる場合があります。 === 符号付き整数(Signed Integer)と符号なし整数(Unsigned Integer) === Forthは整数を符号付きとしても、符号なしとしても扱うことができます。通常はセル内のビットパターンに基づいて解釈されます。算術演算や比較演算などが適用されますが、具体的な整数型に明示的に制限はありません。 === 文字(Character) === Forthでは文字は通常、符号なし整数として扱われます。ASCII文字セット内の範囲(通常は0から255)の数値として表現されます。文字に対する演算は、数値としての操作として扱われます。 === 文字列(String) === 文字列はカウント付き文字列(Counted String)やnull終端文字列(Null-terminated String)として表現されることがあります。カウント付き文字列では、最初のバイトが文字列の長さを示し、その後に文字のデータが続きます。文字列は通常、メモリ上の連続した領域に格納されます。文字列の操作には、<code>WORD</code>、<code>FIND</code>、<code>C"</code>などの専用のワードが用意されています。 === アドレス(Address) === Forthではアドレスも整数として扱われます。アドレスはメモリ上の位置を示す整数値であり、アドレス演算は通常の整数演算と同様に行われます。アドレス演算には、<code>CHAR+</code>、<code>CELLS</code>、<code>FLOAT+</code>などの専用のワードが用意されています。 === データ型の制約と振る舞い === Forthでは、データ型に関する制約やチェックはコンパイラやランタイムによっては'''行われません'''。プログラマはデータを正しく扱う責任があります。特にプログラムの移植性を考慮する場合は、適切なデータ型の使用が重要です。 データ型はForthの柔軟性とパフォーマンスの両方をサポートするため、プログラマに柔軟性と責任を与えます。それぞれのアプリケーションや環境に応じて、適切なデータ型を選択することが重要です。 == 浮動小数点数 == Forthの浮動小数点数についての情報は、Forth-2012仕様におけるオプションの浮動小数点数ワードセットに関連しています。以下にその内容の要点をまとめます。 ; 浮動小数点数の基本 :* 浮動小数点数は、<code>DECIMAL</code>の<code>BASE</code>で入力する必要があります。任意の基数での浮動小数点数の入力は許可されていません。 :* 標準システムで解釈されるすべての浮動小数点数には、指数インジケーター "E" を含める必要があります。 :;浮動小数点数の例 ::<syntaxhighlight lang=forth> 1e 3.14e 1.2e3 1e9 </syntaxhighlight> ; 浮動小数点数のフォーマットと範囲 :* 浮動小数点数の有効桁数や指数のフォーマット、範囲は、Forth-2012では実装に依存します。IEEE浮動小数点数フォーマットが一般的に使用されています。 ; 浮動小数点数のワードセット :* Floating-Point Extensionsワードセットには、<code>DF@</code>、<code>SF@</code>、<code>DF!</code>、<code>SF!</code>などのワードが含まれています。これらは、倍精度および単精度のIEEE浮動小数点フォーマットの数値をメモリに格納するためのものです。 ; 浮動小数点数の入力 :* 浮動小数点数をASCII形式で入力するためには、<code>>FLOAT</code>ワードが使用されます。これは、標準Forthシステムや他の広く使用されるプログラミング環境からデータを受け入れるために広範な構文を許容します。 ; 実装の注意点 :* カスタムの浮動小数点数データ構造を定義する際には、アドレスの整列(alignment)に注意する必要があります。<code>CREATE</code>が適切な浮動小数点数の整列を行わない場合は、コンパイル時および実行時に適切な整列を指定する必要があります。 == ローカル変数 == ForthのOPTIONAL Locals word set(ローカルワードセット)は、Forthのプログラミングでローカル変数を定義するための機能を提供します。以下は、このワードセットに関する情報の要約です。 ; ローカル変数の定義方法 :* <code>(LOCAL)</code> ワードや <code>LOCALS|</code> ワードを使用して、ローカル変数を定義します。 :* <code>{ ... }</code> または <code>{: ... :}</code> の表記を使用して、ローカル変数を囲みます。<code>: ... :</code> の形式は、他のシステムとの名前の衝突を避けるための妥協形式です。 ; ローカル変数の種類 :* ローカル変数は、初期化されたものと初期化されていないものに分けられます。初期化されたローカル変数はデータスタックから実行時に初期化されます。 ; 定義の終了 :* ローカル変数の定義は <code>--</code> もしくは <code>:}</code> で終了します。これにより、ローカル変数の定義中に完全なスタックコメントを記述することが可能です。 ; 文法と慣習 :* ローカル変数の引数と値の区切りには <code>|</code> を使用しますが、他のシステムでは <code>{ ... }</code> の表記が競合する場合があります。 :* 実装によっては、別の区切り文字(例: <code>\</code>, <code>¦</code>)を使用する場合がありますが、移植性を確保するためには <code>|</code> の使用が推奨されます。 ; 予約事項 :* ローカル変数の名前には、特定の文字(<code>:</code>、<code>[</code>、<code>^</code>)で終わる名前は予約されています。 Forthのローカル変数機能は、実装によって異なる場合がありますが、一般的な慣習として、<code>(LOCAL)</code> や <code>{: ... :}</code> の表記が広く使用されています。移植可能なプログラムを書く場合は、このような慣習に準拠することが重要です。 == ファイル操作 == Forthのファイル操作に関連するオプションのワードセットである「File-Access」についての情報を要約します。 === ファイル操作の機能 === # '''CREATE-FILE''' (<code>CREATE-FILE</code>) #* ファイルを作成するためのワードです。 #* 例: <code>S" TEST.FTH" R/W CREATE-FILE ABORT" CREATE-FILE FAILED" ;</code> # '''OPEN-FILE''' (<code>OPEN-FILE</code>) #* ファイルをオープンするためのワードです。 #* 例: <code>S" TEST.FTH" R/W OPEN-FILE ABORT" OPEN-FILE FAILED" ... ;</code> # '''READ-FILE''' (<code>READ-FILE</code>) #* ファイルからデータを読み込むためのワードです。 #* 典型的なシーケンシャルなファイル処理アルゴリズム: #:<syntaxhighlight lang=forth> BEGIN ... READ-FILE THROW ?DUP WHILE ... REPEAT </syntaxhighlight> # '''READ-LINE''' (<code>READ-LINE</code>) #* ファイルから行単位でデータを読み込むためのワードです。 #* 典型的な行指向のシーケンシャルなファイル処理アルゴリズム: #:<syntaxhighlight lang=forth> BEGIN ... READ-LINE THROW WHILE ... REPEAT DROP </syntaxhighlight> # '''INCLUDE''' (<code>INCLUDE</code>) #* 指定されたファイルを読み込んで実行するためのワードです。 #* 例: <code>INCLUDE filename</code> # '''REQUIRE''' (<code>REQUIRE</code>) #* 指定されたファイルを読み込んで実行するためのワードです。 #* 例: <code>REQUIRE filename</code> # '''REQUIRED''' (<code>REQUIRED</code>) #* 指定されたファイルを読み込んで実行するためのワードです。 #* 例: <code>S" filename" REQUIRED</code> === ファイル操作の注意事項 === * ファイルを再利用する際は、前のファイルのブロックバッファをフラッシュして、誤った関連付けを避ける必要があります。 * <code>S"</code> や <code>S\"</code> で使用される一時バッファは、2つの連続する文字列を格納できるようにする必要があります。バッファが不足している場合は、最も古いバッファを上書きすることができます。 これらのワードは、Forthのファイル操作を行うための基本的な機能を提供し、ファイルの作成、オープン、読み込み、実行などの操作をサポートします。各ワードの使用方法や典型的なパターンについては、上記の説明を参照してください。 == 実行トークン == Forthにおける実行トークン(Execution Token; xt)は、ワード(Word)や定義体(Definition)の実行を指示するためのデータ構造です。実行トークンは、コードワードを指すための一意の識別子として機能します。以下は、Forthの実行トークンについての詳細です。 ; 実行トークンの定義 : 実行トークンは、通常、ワードや定義体の実行を示すために使用される整数またはポインタです。これは通常、コンパイラやインタプリタ内部で使用され、特定のワードや定義体を表す一意の識別子として機能します。 ; 実行トークンの使用 : Forthのコードは、実行トークンを使用してワードや定義体を実行します。実行トークンは通常、スタックや辞書(Dictionary)に格納され、必要なときに取り出されて使用されます。 ; ' (Tick) 記号 : 一般的なForthのプログラミングスタイルでは、実行トークンを取得するためにシングルクォート(')記号が使用されます。例えば、<code>' DUP</code> は <code>DUP</code> ワードの実行トークンを取得します。 ; 実行トークンと定義体の関連付け : 実行トークンは、定義体やコードワードと関連付けられます。通常、辞書内のワードエントリは、そのワードの実行トークンを参照します。これにより、プログラムは実行トークンを使用して、辞書内のワードを特定して実行することができます。 ; ランタイムスタックとの関係 : Forthのランタイムスタックは、実行トークンを使用してコードを実行します。コンパイルされたForthコードは、ランタイムスタック上で実行トークンを取り出して、対応するワードや定義体を実行します。 ; 実行トークンの特徴 : 実行トークンは、Forthの柔軟性と効率性を向上させるために使用されます。コンパイラやインタプリタは、実行トークンを介してワードを効率的に実行し、辞書の管理を行います。 ; 実行トークンの安全性 : Forthでは、実行トークンは通常、ユーザーからは直接操作されず、コンパイラやランタイムシステム内部で使用されます。これにより、実行トークンを誤って操作することがなく、安全なプログラミング環境が提供されます。 Forthの実行トークンは、言語の内部実装の詳細を隠蔽し、プログラマに柔軟性と効率性を提供する重要な概念です。 == コンパイル時ワード == Forthには、コンパイル時に処理される特殊なワードがあります。これらをコンパイル時ワードと呼びます。 主なコンパイル時ワードには以下のようなものがあります: # コンパイル時の定義操作 #* <code>:</code> (コロン) - 新しい定義を開始する(<code>:</code>自身は通常の逐次ワード) #* <code>;</code> (セミコロン) - 定義を終了しコンパイルモードを抜ける #* <code>CONSTANT</code>、<code>VARIABLE</code>、<code>DEFER</code> - 定数、変数、遅延定義を作成する # コンパイル時の制御 #* <code>IF</code>、<code>ELSE</code>、<code>THEN</code>、<code>BEGIN</code>、<code>UNTIL</code> など - 条件分岐やループなどの制御構造を定義する #* <code>LITERAL</code> - スタックトップの値をコンパイル時に埋め込む # その他のコンパイル時操作 #* <code>IMMEDIATE</code> - 定義をすぐに実行されるように指定する #* <code>[COMPILE]</code> - 次のワードをコンパイル時に実行する #* <code>POSTPONE</code> - 次のワードの実行トークンをコンパイルする これらのコンパイル時ワードは、Forthのプログラムの構造を定義したり、実行時の振る舞いを制御したりするために使われます。 通常のワードとは異なり、これらのコンパイル時ワードはコンパイル時に処理され、実行時には特殊な動作をするようになっています。これにより、Forthのプログラミングモデルを柔軟に拡張することができます。 == データ構造とメモリ管理 == Forthは組み込みシステムなどのリソース制約の厳しい用途を想定して設計されているため、メモリの効率的な利用が重視されています。この章では、Forthにおけるデータ構造とメモリ管理の方法を説明します。 === コントロールフロースタック === コントロールフロースタックとは、Forthのプログラムの制御フローを管理するために使用される仮想的なスタックです。 その主な役割は以下の通りです: # 制御フロー命令の対応関係の管理 #* 制御フロー命令(<code>IF</code>, <code>THEN</code>, <code>ELSE</code>, <code>BEGIN</code>, <code>WHILE</code>, <code>REPEAT</code> など)の対応関係を管理します。 #* 開始と終了の命令が適切に対応していることを確認します。 # 制御フロー中のデータスタック操作の制約 #* 制御フロー中のデータスタックの使用方法に制約を課します。 #* 制御フロー命令の入れ子関係に応じて、適切なデータスタックの状態が維持されるようにします。 コントロールフロースタックは物理的に実装されていなくても良いと仕様で定められています。 代わりに、システムはコンパイル時や実行時にこのスタックの挙動を模倣する方法を採ることができます。 つまり、コントロールフロースタックはForthの制御構造の妥当性を保証する上で重要な概念であり、プログラムの正しい実行を支えているのです。 通常のプログラミングでコントロールフロースタックを強く意識することはありませんが、制御構造を自らワードとして定義しようとする場合、コントロールフロースタックの振る舞いに注意する必要があります。 === リターンスタック === Forthには、データスタックとは別に、リターンスタックと呼ばれる重要なスタックが存在します。リターンスタックの主な役割は以下の通りです: # 関数呼び出しとリターン #* 関数を呼び出すとき、その関数の呼び出し元の命令アドレスがリターンスタックにプッシュされます。 #* 関数から抜け出すときは、リターンスタックからアドレスがポップされ、その場所に制御が戻されます。 #* これによって、関数呼び出しの際の制御の移動を管理することができます。 # 一時的データ保管 #* リターンスタックは、データを一時的に保管する場所としても使えます。 #* データスタックからデータを>Rでリターンスタックにプッシュし、後でR>で取り出すことができます。 #* これにより、データスタックの状態を一時的に変更せずに、値を保持しておくことができます。 リターンスタックの使用には注意点があります: * ワード内やループ内では、<code>>R</code>と <code>R></code>の回数が一致している必要があります。 * リターンスタックの値は、同じブロック内でのみ参照・取り出しできます。 * ループの脱出時やDO-ループ内からは、リターンスタックの値を取り出せません。 つまり、リターンスタックは制御フローの管理と一時的なデータ保管に使われますが、その使い方には一定の制限があるため、注意深く扱う必要があります。 プログラムの複雑さが増すと、リターンスタックの状態を適切に管理することが難しくなるため、できるだけ単純な使い方に留めるのが賢明です。 ; <code>>R ( x -- ) ( R: -- x )</code> : データスタックから値をポップしリターンスタックにプッシュする ; <code>R> ( R: -- x ) ( x -- )</code> : リターンスタックから値をポップしデータスタックにプッシュする ; <code>R@ ( -- x ) ( R: x -- x )</code> : リターンスタックのスタックトップをデータスタックにコピーする ; <code>2>R ( x1 x2 -- ) ( R: -- x1 x2 )</code> ; <code>2R> ( -- x1 x2 ) ( R: x1 x2 -- )</code> ; <code>2R@ ( -- x1 x2 ) ( R: x1 x2 -- x1 x2 )</code> スタックエフェクトに <code>R:</code> という新しい記号が出てきましたが、これはリターンスタックへの操作をしまします。このためリターンスタックはRスタックとも呼ばれています。 === 変数とアドレス指定 === Forthには、グローバル変数やローカル変数の概念がありません。代わりに、値を格納するためのメモリ領域を確保し、そのアドレスを使ってアクセスします。<code>VARIABLE</code>ワードを使うと、新しい変数領域が確保され、その開始アドレスがスタックに置かれます。 :<syntaxhighlight lang=forth> VARIABLE COUNTER \ カウンター変数を定義 COUNTER @ . \ 変数の値を表示(初期値は0) 1 COUNTER +! \ 変数にインクリメント </syntaxhighlight> 変数の値を取り出すには<code>@</code>(フェッチ)、格納するには<code>!</code>(ストア)を使います。<code>+!</code>のように算術演算と<code>!</code>を組み合わせたワードもあります。 Forthではアドレスを直接スタックに置いて操作することもできます。<code>HERE</code>はディクショナリの次の空きアドレスを取得し、<code>ALLOT</code>はディクショナリ領域を確保します。 ==== データスペース(Data Space) ==== Forthのデータスペースとは、メモリ内の連続した領域を指し、データやワードの定義などが格納される場所です。Forthでは、データスペースは主に '''ヒープ(heap)''' と '''ディクショナリ(dictionary)''' の2つの領域に分かれています。 * '''ヒープ''': データスタックやワードの実行時に使用される一時的な領域です。ここでは、動的に割り当てられたデータや一時的な計算に使用されるデータが保持されます。 * '''ディクショナリ''': ワード(ワード)の定義やその実装が格納される領域です。Forthのディクショナリはワードの名前とそれに対応する実行可能なコードへのポインタを保持します。 ==== <code>HERE</code> ワード ==== <code>HERE</code> はForthで使用される特定のワードであり、現在のデータスペース内の「ここ(here)」の位置を示します。具体的には、ディクショナリ内の次の空き領域の先頭アドレスを指します。 <code>HERE</code> を使用すると、新しいワードやデータをデータスペースに格納する際に位置を特定することができます。主にワードの定義やデータの動的な確保に使用されます。 例えば、新しい変数や配列を定義する場合、<code>HERE</code> の値を参照して適切なメモリ領域を割り当て、その後 <code>HERE</code> を更新します。 具体的な使用例を示します: :<syntaxhighlight lang=forth> HERE . \ 現在のHEREの値を表示(ディクショナリ内の次の空き領域のアドレス) 10 ALLOT \ 10バイトの領域を確保 HERE . \ 確保後のHEREの値を表示 </syntaxhighlight> この例では、まず <code>HERE</code> の値が表示され、次に <code>10 ALLOT</code> によって10バイトの領域が確保されます。その後、再度 <code>HERE</code> の値が表示され、確保された領域の終端アドレスが示されます。 <code>HERE</code> を適切に使用することで、動的なメモリ管理やデータスペースの操作が行えます。 ==== HEREを利用したデータスペースの活用例 ==== ; sieve.fr :<syntaxhighlight lang=forth> : prime? ( n -- ? ) here + c@ 0= ; : composite! ( n -- ) here + 1 swap c! ; : sieve ( n -- ) here over erase 2 begin 2dup dup * > while dup prime? if 2dup dup * do i composite! dup +loop then 1+ repeat drop ." Primes: " 2 do i prime? if i . then loop ; 100 sieve / Primes: 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 </syntaxhighlight> このForthのコードは、エラトステネスの篩(Sieve of Eratosthenes)アルゴリズムを実装しています。このアルゴリズムは、与えられた数 <code>n</code> 以下のすべての素数を見つけるために使用されます。以下では、与えられたコードの各部分を詳しく説明します。 ; <code>prime?</code> ワード :<syntaxhighlight lang=forth> : prime? ( n -- ? ) here + c@ 0= ; </syntaxhighlight> :; <code>( n -- ? )</code>: スタックから整数 <code>n</code> を取り出し、その数が素数であるかどうかの真偽値 <code>?</code> をスタックに積む。 :* <code>here + c@</code>: <code>here</code> は現在のデータスペースの末尾を示し、それに <code>+</code> を使ってワードの<code>n</code>番目のアドレスを取得する。そして <code>c@</code> はそのアドレスの内容(1バイトの文字)を取得する。 :* <code>0=</code>: 取得したバイトが0かどうかをチェックし、0ならば真(素数)を返す。 ; <code>composite!</code> ワード :<syntaxhighlight lang=forth> : composite! ( n -- ) here + 1 swap c! ; </syntaxhighlight> :; <code>( n -- )</code>: スタックから整数 <code>n</code> を取り出す。 :* <code>here + 1 swap c!</code>: <code>here</code> から<code>n</code>のアドレスにを1を1バイトで書き込む。 ; <code>sieve</code> ワード :<syntaxhighlight lang=forth> : sieve ( n -- ) here over erase 2 begin 2dup dup * > while dup prime? if 2dup dup * do i composite! dup +loop then 1+ repeat drop ." Primes: " 2 do i prime? if i . then loop ; </syntaxhighlight> :; <code>( n -- )</code>: スタックから整数 <code>n</code> を取り出す。 :* <code>here over erase</code>: 現在のデータスペース(<code>here</code> から先)を <code>n</code> バイト分消去する。 :* <code>2 begin ... repeat</code>: メインのループ。2から始めて、以下の条件に基づいて処理を繰り返す。 :** <code>2dup dup * ></code>: 現在の値を2つコピーし、2つを掛けた値が <code>n</code> を超えるまで続ける。 :** <code>dup prime? if ... then</code>: 現在の値が素数かどうかをチェックし、素数ならば以下を実行。 :*** <code>2dup dup * do ... dup +loop</code>: 素数の場合、その数の倍数を篩い落とす。内側のループで、その数の倍数を全て <code>composite!</code> でマークする。 :** <code>1+</code>: 現在の数値を1増やす。 :* <code>drop</code>: 最後の数値を削除する。 :* <code>." Primes: " 2 do i prime? if i . then loop</code>: 素数を表示するループ。2から始まり、<code>n</code> まで続ける。各数値が素数ならば表示する。 ; 実行 :<syntaxhighlight lang=forth> 100 sieve </syntaxhighlight> :100以下の素数を見つけるために <code>sieve</code> ワードが実行されます。 === CREATEを使った変数と配列の定義 === Forthの <code>CREATE</code> は、新しい変数や配列をディクショナリに定義するためのワードです。<code>CREATE</code> を使うことで、任意の名前で参照可能なデータ領域を確保し、その領域に対する操作を定義することができます。 以下に、<code>CREATE</code> ワードの基本的な構文と使用方法を示します。 ==== 構文 ==== :<syntaxhighlight lang=forth> CREATE name </syntaxhighlight> * <code>name</code>: 定義する変数や配列の名前を指定します。 ==== 使用方法 ==== # 変数の定義 #:<code>CREATE</code> を使って変数を定義する場合、単に変数の初期値を指定します。 #:<syntaxhighlight lang=forth> CREATE my-var 42 , </syntaxhighlight> #:上記の例では、<code>my-var</code> という名前の変数が定義され、初期値として <code>42</code> が設定されています。<code>,</code> はスタックのトップの値を <code>my-var</code> の定義領域に格納するワードです。 # 配列の定義 #: <code>CREATE</code> を使って配列を定義する場合、配列の要素数や初期値を指定します。 #:<syntaxhighlight lang=forth> CREATE my-array 5 ALLOT </syntaxhighlight> #: 上記の例では、<code>my-array</code> という名前の配列が定義され、5つの要素分の領域が確保されます。各要素には初期値が与えられていないため、初期化が必要な場合は別途行います。 ==== 使用例 ==== このForthのコードは、<code>CREATE</code> を使って変数と配列を定義し、それらに値を格納・表示する例です。 ; 変数の定義と使用 :<syntaxhighlight lang=forth> CREATE x \ 変数 x を定義 100 x ! \ x に 100 を代入 x @ . CR \ x の値を表示 </syntaxhighlight> * <code>CREATE x</code>: <code>x</code> という名前の変数を定義します。<code>CREATE</code> はディクショナリに新しいワードを登録しますが、データスペース自体は確保しません。 * <code>100 x !</code>: <code>x</code> のデータフィールドに <code>100</code> を格納します。 * <code>x @ . CR</code>: <code>x</code> のデータフィールドから値を読み取って表示します。<code>CR</code> は改行を出力します。 ; 配列の定義と使用 :<syntaxhighlight lang=forth> CREATE MY-ARY 100 ALLOT \ 100セルの配列を作成 42 MY-ARY 10 + ! \ 11番目の要素に42を代入 MY-ARY 10 + @ . \ 11番目の要素の値を表示 </syntaxhighlight> * <code>CREATE MY-ARY 100 ALLOT</code>: <code>MY-ARY</code> という名前の配列を定義し、100セル分のデータスペースを確保します。 * <code>42 MY-ARY 10 + !</code>: <code>MY-ARY</code> の11番目の要素(0から始まるインデックスなので、10を足します)に <code>42</code> を代入します。 * <code>MY-ARY 10 + @ .</code>: <code>MY-ARY</code> の11番目の要素の値を読み取って表示します。 この例では、<code>CREATE</code> を使って変数 <code>x</code> と配列 <code>MY-ARY</code> を定義し、それぞれに値を設定しています。<code>x</code> は単一の値を格納する変数であり、<code>MY-ARY</code> は複数の要素を持つ配列です。<code>!</code> を使ってデータを代入し、<code>@</code> を使ってデータを取得しています。 Forthの特性として、変数や配列の定義はディクショナリに登録されるため、名前に対して対応するデータ領域へのアクセスが可能となります。これにより、動的なデータ構造を効率的に管理することができます。 === アライメント === Forthの <code>ALIGN</code> ワードは、データ領域のアラインメントを行うためのワードです。アラインメントとは、データがメモリ上で配置される位置を調整することであり、特定のアドレス境界にデータを配置することを指します。 アラインメントの必要性は、プロセッサアーキテクチャに依存しますが、多くのアーキテクチャでは特定のデータ型(例:4バイト整数など)は特定の境界に配置される必要があります。アラインメントが正しく行われないと、メモリアクセスの効率が低下したり、アドレスエラーなどの例外が発生し処理を中断する可能性があります。 ; 構文 :<syntaxhighlight lang=forth> ALIGN </syntaxhighlight> ; 動作 : <code>ALIGN</code> ワードは、データスペースポインタ (<code>HERE</code>) をアラインメント条件に従って調整します。具体的には、通常は2バイトまたは4バイトの境界に <code>HERE</code> を調整します。これにより、次に確保されるデータ領域が適切な境界に配置されます。 ; 使用例 :<syntaxhighlight lang=forth> HERE ALIGN </syntaxhighlight> : 上記の例では、<code>HERE</code> の値をアラインメントされた位置に調整します。これにより、次に確保されるデータ領域が適切な境界に配置されます。 :<syntaxhighlight lang=forth> CREATE my-var ALIGN 2 ALLOT </syntaxhighlight> : この例では、<code>my-var</code> という名前の変数を定義していますが、そのデータ領域が2バイト境界にアラインメントされて確保されます。これにより、<code>my-var</code> のデータ領域は適切な境界に配置され、メモリアクセスの効率が向上します。 <code>ALIGN</code> ワードは、特定のアーキテクチャで必要なメモリアラインメントを確保するために重要な役割を果たします。メモリアクセスの効率を最大化するために、適切なアラインメントが常に考慮されるべきです。 == 入出力と組み込みワード == Forthには標準の入出力ワードがあり、コンソールやファイルからの入出力を行えます。また、様々な組み込みワードが用意されており、これらを活用することでForthの機能を拡張できます。 === 標準入出力 === Forthには、キーボードからの文字入力や、コンソールへの文字出力を行うためのワードが用意されています。 :<syntaxhighlight lang=forth> KEY \ キーボードから1文字読み込む EMIT \ スタック上の値(文字コード)を出力する ." \ 文字列を直接出力する </syntaxhighlight> <code>KEY</code>はキーボード入力を待ち、押された文字のASCIIコードをスタックに置きます。<code>EMIT</code>は逆に、スタック上の値を文字コードとして解釈し、コンソールに出力します。<code>." Hello"</code>のように、<code>."</code> の後に文字列を続けると、その文字列がコンソール出力されます。 数値入出力には、<code>?</code>、<code>U.</code>、<code>U.R</code>などのワードが使えます。<code>?</code>は数値を入力受け付け、<code>U.</code>は符号なし数値を、<code>U.R</code>は数値を指定した基数(2進数、16進数など)で出力します。 === ファイルアクセス === ファイル入出力には、様々なワードが用意されています。<code>OPEN-FILE</code>でファイルを開き、<code>READ-FILE</code>や<code>WRITE-FILE</code>でデータの読み書きができます。 :<syntaxhighlight lang=forth> S" data.txt" R/O OPEN-FILE THROW VALUE HANDLE \ ファイルを読み取りモードで開く HANDLE READ-FILE ABORT" READ ERROR" \ ファイルを読み込む HANDLE CLOSE-FILE THROW \ ファイルを閉じる </syntaxhighlight> ファイル名は、<code>S"</code> で文字列をスタックに置いた後、<code>R/O</code>(読み取り専用)や<code>W/O</code>(書き込み専用)といったモードを指定してファイルを開きます。<code>THROW</code>はエラーがあれば例外を発生させます。 <code>READ-FILE</code>や<code>WRITE-FILE</code>では、バッファ領域のアドレスと読み書きするバイト数をスタックに置く必要があります。 === 組み込みワードの利用 === Forthには、数学関数や論理演算、メモリ操作など、様々な組み込みワードが用意されています。必要に応じてこれらのワードを活用することで、プログラムにさまざまな機能を付加できます。 :<syntaxhighlight lang=forth> 2 3 MAX . \ 最大値(3)を出力 S" HELLO" SWAP DROP \ スタック操作サンプル HEX 1F20 4 DUMP \ メモリダンプ </syntaxhighlight> <code>MAX</code>は2つの数値の最大値を、<code>SWAP</code>は2つの値の順序を入れ替え、<code>DROP</code>は最上位の値を捨てます。<code>DUMP</code>は指定したアドレスからのメモリ内容をダンプ出力します。 組み込みワードには、浮動小数点演算、文字列処理、マルチタスク、IPCなど、様々な分野のものがあります。また、必要に応じてワードを自作したり、外部ライブラリからリンクしたりできます。Forthはコンパクトなシステムながら、組み込みワードの充実により高い機能性を発揮します。 == アプリケーション開発 == Forthは小規模な組み込みシステムから大規模なアプリケーションまで、幅広い用途に使用できる言語です。この章では、Forthにおけるアプリケーション開発の手法と、実例について解説します。 === モジュール化とワード管理 === Forthはワードをベースとしたモジュール性の高いプログラミングができます。大きなアプリケーションを開発する際は、適切にモジュール分割してワードを設計・管理することが重要です。 Forthにはネームスペースの概念がありません。そのため、ワード名の重複を避けるためには、プレフィックスなどの命名規則を定めることが一般的です。たとえば<code>STRING-LENGTH</code>のように、ワードの役割がわかるよう名前を付けます。 また、ワードをまとめてファイルに保存し、必要に応じて読み込む方法があります。Forthの多くの処理系は、ワードの定義をソースファイルに保存したり、メモリイメージを永続化したりできます。 :<syntaxhighlight lang=forth> MARKER MODULE>STRING : STRING-LENGTH \ 文字列の長さを求める ... ; : STRING-REVERSE \ 文字列を反転する ... ; STRING-REVERSESTRING-LENGTH +MODULE </syntaxhighlight> 作成したワードは<code>MODULE>NAME</code>でモジュール名を付け、<code>+MODULE</code>でモジュールを完成させることができます。他のソースから<code>USE MODULE>NAME</code>とすれば、そのモジュールのワードが使用可能になります。 大規模なシステムでは、このようなソースレベルの分割に加え、オーバーレイ、仮想メモリ、マルチタスク機能を活用することで、メモリの効率的な使用が可能です。 === グラフィックス処理 === Forthでもグラフィック処理が可能ですが、組み込みの機能は限られています。ほとんどの処理はユーザ定義ワードとして実装する必要があります。 ビットマップ画像の表示や、ウィンドウ、マウスカーソルなどの基本的なGUIの作成はある程度可能です。高度な3Dグラフィックスなどを実現するには、外部ライブラリを利用する必要があります。 :<syntaxhighlight lang=forth> NEED FRAMEBUFFER \ フレームバッファへのアクセスモジュール : DRAW-LINE ( x1 y1 x2 y2 -- ) \ ブレザンハムのアルゴリズムでライン描画 ... ; : DRAW-RECT ( x y w h -- ) 2SWAP 2>R 2R> \ (x y w h -- x y x+w y+h) DRAW-LINE 2>R 2R> DRAW-LINE 2SWAP DRAW-LINE 2SWAP DRAW-LINE ; FRAMEBUFFER-INIT \ グラフィックスサブシステムの初期化 100 100 300 200 DRAW-RECT \ 長方形を描画 </syntaxhighlight> 上記では、フレームバッファの制御関数がロードされた前提で、<code>DRAW-LINE</code>を使って<code>DRAW-RECT</code>(長方形描画)を実装しています。スタックを活用して座標値を受け渡し、基本的な幾何図形を描画しています。 Forthはグラフィックスパイプラインなどの高度な機能を組み込んでいませんが、スタックベースの処理により、低レベルのデバイスアクセスが可能です。組み込みシステムのディスプレイやLED制御など、グラフィックス関連の処理に適しています。 === システムプログラミング === Forthの本質的な特性として、システムプログラミングに適していることがあげられます。小規模でコンパクト、高速動作、低レベルなメモリアクセスが可能というメリットがあります。 OSカーネル、デバイスドライバ、BIOS、ブートローダなどの開発にForthは広く使われてきました。組み込みシステムでは、センサーやI/Oデバイスの制御に最適です。スタック指向のモデルにより、レジスタレベルの処理が直接かけるのも特徴です。 例えば、Forthを使ってブートローダを実装する場合には、次のようなプログラムになります。 :<syntaxhighlight lang=forth> HEX 07C0 INPORT DROP \ DOSデータ領域クリア 0800 0 20 MOVE \ リセットベクタ設定 KERNEL.IMG LOAD \ カーネル読み込み A000 OUTPORT \ VGAモードへ切り替え 1000 JMP \ カーネル実行 ... \ BIOSブート用の簡単なForth読み込みコード :KERNEL.IMG LOAD CORE SWAP CPU KERNEL ; </syntaxhighlight> BIOSなどの低レベル機能を呼び出してブートローダを構築する処理が、Forthの文法でコンパクトに記述できる様子がわかります。 また、Forth自身が小規模で可搬性が高いため、Forth処理系そのものもForthで書かれた簡単なコアを、ホストOSやアーキテクチャに合わせてセルフホスト (移植) する手法が一般的です。これは、アプリケーションと実行環境を一体化して開発できる利点があります。 == 高度なトピック == ここまでForthの基本的な構文と概念、データ構造、アプリケーション開発の実例などを解説してきました。この章では、Forthの高度な利用方法としてパフォーマンス最適化、マルチスレッド・マルチタスク、メタプログラミングについて取り上げます。 === 最適化とパフォーマンス === Forthはコンパクトで高速な言語ですが、さらなる最適化の余地があります。ワードの定義を工夫したり、ネイティブコードコンパイラを使ったりすることで、パフォーマンスを向上できます。 ワード定義の最適化では、冗長な演算を排除したり、インラインコーディングの手法を用いたりします。例えば、次のようなワード定義があるとします。 :<syntaxhighlight lang=forth> : MAX2 ( n1 n2 -- max ) 2DUP > IF SWAP DROP ELSE NIP THEN ; </syntaxhighlight> この<code>MAX2</code>は一時的に2つの値を複製(<code>2DUP</code>)し、<code>IF</code>..<code>ELSE</code>..<code>THEN</code>の条件分岐で最大値を選びます。しかし、この一時複製が無駄な演算となっています。次のように書くとコードがシンプルになります。 :<syntaxhighlight lang=forth> : MAX2 ( n1 n2 -- max ) OVER OVER > IF SWAP THEN ; </syntaxhighlight> ワードの最適化には一般的なテクニックがあり、Forthのコンパイラ作者から提案されているものを参考にするとよいでしょう。 また、Forthにはネイティブコードコンパイラと呼ばれるもので、ワードの実行コードをネイティブマシン語に変換できるものがあります。Forthの対話的な実行環境は便利ですが、ネイティブコードの方が高速に動作します。こうした最適化手法を使い分けることで、Forthのパフォーマンスを飛躍的に向上できます。 === マルチスレッドとマルチタスク === Forthには並列実行の機構が組み込まれていないため、マルチスレッドやマルチタスク処理を実現するにはユーザ定義の実装が必要です。しかし、Forthの言語特性を活かせばきわめてコンパクトな並列処理ができます。 マルチスレッドでは、スタックを分離し、スレッド毎にスタックのコピーを持つ手法が一般的です。スレッドの切り替えはスタックのコンテキストスイッチで実現できます。また、Forthのデータストアクセス方式を応用すれば、IPC(プロセス間通信)の仕組みを作ることもできます。 :<syntaxhighlight lang=forth> : NEW-TASK ( -- ) HERE CURRENT-STACK >R CREATE-STACK SWAP [: DO-SOME-WORK ;] ( compile: word behavior ) R> SET-CURRENT ; </syntaxhighlight> この例では、新しいタスクを作成するワード<code>NEW-TASK</code>を定義しています。<code>CREATE-STACK</code>でスタックを新しく割り当て、<code>DO-SOME-WORK</code>のようなワード定義をタスクとして登録します。実行時にはスケジューラによってこれらのタスクが実行されます。 マルチタスク機構を実装する例は多数あり、スレッド単位でデータを扱う方式、メッセージキューによる方式、それぞれ長所と短所があります。並列処理にはデッドロックなどの問題点もありますが、Forthではコンパクトでシンプルなコード記述が可能です。 === メタプログラミング === Forthにはプログラムを生成・変更するメタプログラミングの機能があり、コードを自動生成したり、プログラムを動的に変更したりできます。この機能は、Forthをドメイン固有言語(DSL)の開発などに適用できることを意味しています。 メタプログラミングには、コンパイル時に評価される構文<code>[...]</code>と実行時構文<code>EVAL</code>があります。どちらもプログラムをデータとして扱えるため、動的にプログラムを生成・変更できます。 :<syntaxhighlight lang=forth> : HILBERT-CURVE ( n -- ) 0 ?DO [: 2DUP RECURSE >R >R 1 HCURVE R> R> RECURSE 3 HCURVE ;] POSTPONE LITERAL POSTPONE HCURVE LOOP ; </syntaxhighlight> この例では、ヒルベルト曲線を描画するコードを動的に生成しています。<code>POSTPONE</code>はワードのコンパイルを遅延させ、<code>[: ... ;]</code>の構文はその間のテキストを実行可能なコードとしてコンパイルします。この手法により、 Hilbertカーブの次元(<code>n</code>)に応じて、その描画コードを生成しています。 Forthのメタプログラミング機能は、高度な用途に役立ちます。例えば、ユーザインターフェースビルダー、コードジェネレーター、プログラムシンセサイザなどでその力を発揮できます。Forthの柔軟性を最大限に活かせる側面といえるでしょう。 == サンプルプログラムとプロジェクト == Forthの理解を深めるには、実際にコードを書いて動作を確認することが大切です。この章では、様々なサンプルコードを紹介するとともに、実践的なForthプロジェクトの例を示します。 === 様々なサンプルコード === 以下はForthの基本的な機能を示すサンプルコード集です。 ; 再帰によるフィボナッチ数列 :<syntaxhighlight lang=forth> : FIB ( n -- fib-n ) DUP 0= IF DROP 1 EXIT THEN DUP 1 = IF DROP 1 EXIT THEN DUP 1- RECURSE SWAP 2 - RECURSE + ; </syntaxhighlight> ; 文字列操作 :<syntaxhighlight lang=forth> : UPPERCASE ( addr n -- addr n ) OVER + SWAP ?DO I C@ [CHAR] a [CHAR] z 1+ WITHIN IF [CHAR] A [CHAR] a - + THEN I C! LOOP ; : REVERSE-WORDS ( addr n -- ) [CHAR] \ SKIP SPACES OVER >R BEGIN OVER C@ [CHAR] \ <> WHILE [CHAR] \ PARSE DUP >R REVERSE R> OVER C! CHAR+ REPEAT R> DROP 2DROP ; </syntaxhighlight> ; ベクトル・行列計算 :<syntaxhighlight lang=forth> REQUIRE DOUBLE \ 倍精度浮動小数点サポート : VZEROS ( n -- addr ) \ n要素のゼロベクトルを生成 CREATE HERE 0 SWAP 8 * DUP ALLOT FILL ; : MZEROS ( rows cols -- addr ) \ rows x cols の零行列を生成 SWAP VZEROS SWAP 0 ?DO OVER VZEROS COLS + LOOP ; </syntaxhighlight> ; 簡易グラフィックス :<syntaxhighlight lang=forth> VARIABLE FRAMEBUF \ フレームバッファアドレス : PIXEL ( x y color -- ) \ 1ピクセル書き込み FRAMEBUF @ >R 2 * R@ + 3 * RP@ C!+ RP@ C!+ RDROP ; : LINE ( x1 y1 x2 y2 c -- ) \ ラインの描画 >R 2SWAP R> 2>R 2R@ PIXEL 2R> PIXELLINE ; </syntaxhighlight> これらの例は、スタックを使った処理の流れ、ユーザ定義ワードの作成、再帰など、Forthのプログラミング手法の基本を示しています。コンパクトながらも表現力の高さがわかるでしょう。 === 実践的なプロジェクト例 === 次に、もう少し大がかりなForthプロジェクトの例を紹介します。 ; Forth Chip-8 エミュレーター Chip-8はレトロなゲームコンソールで、Forthでその命令セットをエミュレートするプロジェクトです。グラフィックス、入力処理、命令デコーダなどを実装します。 ; カーネルとブートローダ ForthでOSカーネルの基本部分を実装し、ブートローダと合わせてシステムを構築するプロジェクト。メモリ管理、タスク管理、ファイルシステム、ドライバなどの機能が実装できます。 ; Webサーバー ForthでHTTPリクエストを処理するWebサーバーを作成。ソケット通信、文字列処理、ファイル入出力などの機能が必要になります。追加してWebアプリケーションフレームワークなども作れます。 ; オープンソースForthプロセッサ Forthを使ってCPU命令セットを記述し、ゲートレベルまでFPGAに実装するプロセッサの設計プロジェクト。ハードウェア記述言語との連携が重要です。 このようなプロジェクトを通して、Forthの実用性とシステムプログラミングでの可能性を体験できます。Forthという言語自体を使って、OSやハードウェアコンポーネントを実装できるのが最大の特徴です。いずれのプロジェクトも一般的な規模になると、モジュール分割やワード管理、ツール活用などの工夫が必要になります。 == 参考資料 == Forthについてより深く学ぶには、書籍や公開されているオンラインリソースを参照するのが有効な方法です。また、活発なForthコミュニティに参加することで、他の開発者からの助言を得られます。 === 関連書籍の紹介 === Forthの入門書から応用、さらには処理系の実装に至るまで、多くの優れた書籍が出版されています。 * 「Forth入門」レオ・ブロディ (ISBN:978-4875930297 工学社) ** Forth言語の基本から、アプリケーション開発までをカバーした長年の定番書。 * 「Thinking Forth」Leo Brodie (Punchy Publishing) / Forth思考 ―問題解決のための言語と哲学― レオ・ブロディー著 ** Forth哲学に重きを置いた名著。Forthの考え方を深く解説。 * 「Forth Programmer's Handbook」(ISBN:978-1419675492 Forth Inc.) ** ANS Forthの規格書で、WordSetの詳細が書かれている。 これらの書籍を手に入れられれば、Forthの理解が格段に進むはずです。電子書籍としても出版されているものがあります。 === オンラインリソース === {{Wikipedia}} インターネット上にも無料で参照できるForth関連の豊富なリソースが存在します。 * Forth Interest Group ( https://www.forth.org/ ) ** Forthに関する書籍、記事、リソースなどが集まるポータル。 * Forth-Standard-Committee 公式サイト( https://forth-standard.org/ ) Webサイト、ソースコード、ニュースレターなど、さまざまな形でリソースが公開されているので、活用していきたいものです。 === Forthコミュニティ === 長年にわたりForth言語を支える活発なコミュニティが存在し、開発者同士が支え合う環境があります。 * Newsgroups: comp.lang.forth ** ディスカッションの場となるForth専用のニュースグループ。 * 地域 Forth グループ ** ヨーロッパ、アメリカ、アジアなどの地域Forthグループ。 オンラインフォーラムやメーリングリスト、対面の勉強会など、様々な形でForth開発者同士が交流を深めています。初心者でもこうしたコミュニティに参加することで、サポートを受けられます。Forthの小さな世界ですが、地域を越えて開発が行われているのが特徴です。 Forthの参考文献やオンラインリソース、そしてコミュニティを上手く活用することで、この独特な言語の理解が一層深まるはずです。 == 脚註 == <references /> [[Category:Forth|*]] [[Category:プログラミング言語]] 4gzgjlri2i2tp9dycvpuiul03fmbxzo 246675 246674 2024-04-14T01:47:38Z Ef3 694 /*例外処理*/ Forthの例外処理に関する情報を要約します。 Exception word set はオプショナルなので、実装していない処理系もありえます。 wikitext text/x-wiki == はじめに == Forthはスタック指向のプログラミング言語であり、そのシンプルさと柔軟性から広く用いられています。 本書は、プログラマがForthを効果的に使いこなすための手引書として設計されています。例示や実践的なヒントが豊富に盛り込まれており、読者は理論を理解しながら実際のプロジェクトに応用できるでしょう。 本書を通じて、Forthの魅力と実力を十分に体感し、その利用価値を最大限に引き出すことができるでしょう。 本書では、ForthのCore Word Setに準拠した標準的なForthシステムを題材とします。 == Forthプログラミングの基礎 == Forthはスタック指向のプログラミング言語であり、独自の特徴を持っています。以下では、Forthプログラミングの基礎を解説します。 === スタック操作 === [[スタック構造|スタック]]は、Forthにおける中心的なデータ構造です。ほとんどのワードは、スタックから値を取り出したり、スタックに値を代入したりします。スタックは、後入れ先出し(LIFO; Last In First Out)のデータ構造で、Forthの演算はスタック上で行われます。 === 例 === 以下は、Forthでの簡単な計算の例です: :<syntaxhighlight lang=forth> 3 4 + . </syntaxhighlight> : まず<code>3</code>をスタックに置き、<code>4 + .</code> を解釈します。 : 次に、<code>4</code>をスタックに置き、<code>3 4</code> となり、<code>+ .</code> が残ります。 : そして、<code>+</code> はスタックのトップの2つの要素を加算して結果を戻し、スタックには<code>7</code>だけが残ります。 : 最後に、<code>.</code>(ドット)はスタックから<code>7</code>を取り除いてそれを表示します。 :{| |- !コード!!style='width:3em'| 3 !!style='width:3em'| 4 !!style='width:3em'| + !!style='width:3em'| . |- !スタックトップ |style="border:1px solid black; text-align:center"| 3 ||style="border:1px solid black; text-align:center"| 4 ||style="border:1px solid black; text-align:center"| 7 || |- ! | ||style="border:1px solid black; text-align:center"| 3 || || |- !出力 | || || ||style="text-align:center; font-weight: bold"| 7 |} === コメント === Forthでは、コメントは括弧で囲んで表現されます。例えば: :<syntaxhighlight lang=forth> ( これはコメントです ) </syntaxhighlight> <code>/</code> から行末までもコメントです :<syntaxhighlight lang=forth> 3 4 + \ 3 + 4 の結果をスタックトップに残す </syntaxhighlight> コメントは、インタプリタの動作に影響を与えません。 === スタックエフェクト === Forthの各ワードは、スタック上で特定の操作を行います。ワードのドキュメントでは、それがスタックに対してどのような影響を与えるかを示す記述があります。例えば: :<syntaxhighlight lang=forth> + ( a b -- c ) </syntaxhighlight> この記述は、<code>+</code>ワードが2つの引数(<code>a</code>と<code>b</code>)を消費し、1つの結果(<code>c</code>)をスタックに残すことを意味します。 === Forthのワードとは?その定義と使用について === Forthにおける「ワード」とは、基本的には単語や言葉を意味しますが、Forthプログラミングでは、より具体的には次の2つの意味を持ちます。 # 定義済みの単語 #: ワードは、Forthの語彙において定義された単語や操作を指します。Forthでは、これらのワードはスタック操作や制御構造、算術演算などの基本的な機能を表します。例えば、<code>+</code>は2つの数値を取り出して足し合わせ、結果をスタックに戻すワードです。 # 新しい単語の定義 #: ワードは、Forthプログラム内で新しい単語を定義するための仕組みとしても使われます。これは、既存のワードを組み合わせて、新しい機能を持つ単語を定義することを意味します。例えば、<code>DOUBLE</code>というワードを定義して、与えられた数値を2倍にするような操作を定義することができます。 ワードの定義は、通常、次のような形式で行われます: :<syntaxhighlight lang=forth> : ワード名 ( 定義部分 ) ; </syntaxhighlight> ここで、<code>: ワード名</code>は新しいワードの定義を開始し、<code>;</code>は定義の終了を示します。定義部分には、既存のワードや操作を組み合わせて、新しい機能を実現するForthのコードが記述されます。 === ワードの定義と使用例 === Forthにおけるワードの定義と使用についてさらに詳しく説明します。 # ワードの定義 : #: ワードは、<code>:</code> と <code>;</code> の間に記述されたコードブロックで定義されます。 #: 例えば、<code>SQUARE</code>という新しいワードを定義してみましょう。 #:<syntaxhighlight lang=forth> : SQUARE ( n -- n*n ) DUP * ; </syntaxhighlight> #: ここでは、<code>SQUARE</code>というワードが定義されています。このワードは、スタックから1つの数値を取り出し、その数値を自乗して結果をスタックに戻します。 # ワードの使用 : #: 定義したワードは、Forthプログラム内で直接使用することができます。 #:<syntaxhighlight lang=forth> 5 SQUARE . \ スタックから5を取り出して自乗し、結果を表示する </syntaxhighlight> #:上記の例では、<code>5 SQUARE .</code> というForthコードが実行されます。まず、<code>5</code>がスタックに積まれ、次に<code>SQUARE</code>ワードが実行されて、<code>5</code>の自乗である<code>25</code>が計算されます。最後に<code>.</code>はスタックのトップの値を表示しますので、結果として<code>25</code>が表示されます。 # 組み込みワードとカスタムワード : #: Forthには組み込みのワード(<code>+</code>, <code>-</code>, <code>*</code>, <code>/</code>など)がありますが、ユーザーはこれに加えて独自のワードを定義することができます。カスタムワードを使うことで、プログラムをより効率的に構築できます。 # 再帰的なワード : #: Forthでは、ワードは自身の中で再帰的に呼び出すことができます。これにより、複雑な演算や制御構造を簡潔に表現することが可能です。 ワードの定義と使用は、Forthプログラムの中核的な部分を構成します。これにより、プログラムの再利用性、メンテナンス性、可読性が向上し、効率的なコーディングが実現されます。 === 基本的な制御構造 === Forthの制御構造は、他のプログラミング言語とは異なり「制御構造もワードの集合から定義する」という独自の特徴を持っています。Forthでは、基本的な制御構造として条件分岐とループが利用されます。 制御構造に関するワードは、コンパイル時(つまり <code>:</code> から <code>;</code> までの間)でのみ使用でき会話モードでは使用できません。 ==== 条件分岐 ==== Forthでは、条件分岐は主に <code>IF</code>, <code>ELSE</code>, <code>THEN</code> のワードを組み合わせて実現されます。 ; 例: :<syntaxhighlight lang=forth> : ABS ( n -- |n| ) DUP 0< IF NEGATE THEN ; </syntaxhighlight> この例では、<code>ABS</code>というワードを定義しています。このワードは、スタックから数値を取り出し、その絶対値を計算して結果をスタックに戻します。<code>DUP 0<</code> はスタックトップの値が0より小さいかどうかをチェックし、<code>IF</code> から <code>THEN</code> の間に記述されたブロックが条件を満たす場合に実行されます。つまり、もし数値が負の場合は <code>NEGATE</code> が実行されます。 ==== ループ ==== Forthでは、ループは <code>DO</code>, <code>LOOP</code> や <code>BEGIN</code>, <code>WHILE</code>, <code>REPEAT</code> のワードを使って実装されます。 ; 例: :<syntaxhighlight lang=forth> : COUNTDOWN ( n -- ) 0 DO I . LOOP ; </syntaxhighlight> 上記の例では、0から与えられた数値(<code>n</code>)までカウントダウンする<code>COUNTDOWN</code>というワードを定義しています。 ==== その他の制御構造 ==== Forthには他にも、<code>CASE</code>, <code>OF</code>, <code>ENDOF</code>, <code>ENDCASE</code> を使った条件分岐や、<code>IF-ELSE-ENDIF</code> 構造、<code>BEGIN-UNTIL</code>、<code>BEGIN-WHILE-REPEAT</code> など、さまざまな制御構造が存在し、新たな制御構造をユーザーが定義することすら出来ます。 Forthの制御構造は、スタック指向の特性に基づいてシンプルかつ柔軟に設計されており、独自のプログラミングスタイルを持つことが特徴です。 === スタック操作の基本命令 === Forthにはスタック上のデータを操作するための基本的な命令があります。 * <code>DUP</code>: ( n -- n n ) スタックのトップの要素を複製する * <code>DROP</code>: ( n -- ) スタックのトップの要素を削除する * <code>SWAP</code>: ( n1 n2 -- n2 n1 ) スタックのトップとその下の要素を交換する * <code>OVER</code>: (n1 n2 -- n1 n2 n1 ) スタックのトップの2つ下の要素を複製してトップに置く * <code>ROT</code>: ( n1 n2 n3 — n2 n3 n1 ) スタックのトップの3つ下の要素をトップに回転する === 基本的な演算 === Forthには、算術演算(<code>+</code>、<code>-</code>、<code>*</code>、<code>/</code>など)、論理演算(<code>AND</code>、<code>OR</code>、<code>NOT</code>)、比較(<code>=</code>、<code><></code>、<code>></code>、<code><</code>など)の基本ワードが用意されています。これらのワードは、スタック上の値を取り、演算結果をスタックに代入します。 === 再帰的呼び出し === Forthで再帰的呼び出しを行う場合、ワード <code>recurse</code> を使ってワード自身を表します。 再帰的なワードを定義する方法について説明します。 ==== 階乗 ==== 再帰的な階乗(factorial)を定義します。 :<syntaxhighlight lang=forth> : factorial ( n -- result ) dup 0= if \ スタックのトップの値が0かどうかをチェック drop 1 \ もし0ならば、結果は1として処理を終了 else dup 1 - \ スタックのトップの値から1を引いた値をコピー recurse * \ 再帰的に自身を呼び出して、その結果にスタックのトップの値を掛ける then ; </syntaxhighlight> この定義の内容を説明します。 * ワード <code>factorial</code> は、<code>( n -- result )</code> のスタックエフェクトを持ちます。<code>n</code> は階乗を計算する整数です。 * <code>dup 0=</code>: スタックのトップの値が0かどうかをチェックします。 ** もし0ならば、<code>drop 1</code> が実行されて、スタックのトップの値(<code>n</code>)が削除され、結果として <code>1</code> がスタックにプッシュされます。 * <code>else</code>: もしスタックのトップの値が0でない場合は、次の操作が実行されます。 ** <code>dup 1 -</code>: スタックのトップの値から <code>1</code> を引いた値をスタックにプッシュします。これは <code>n - 1</code> の計算です。 ** <code>recurse *</code>: 自身の <code>factorial</code> を再帰的に呼び出して、結果に対してスタックのトップの値(<code>n</code>)を掛けます。これにより、<code>n! = n * (n-1)!</code> の計算が行われます。 * <code>then</code>: <code>if</code> ブロックの終了を示します。 例えば、<code>5 factorial .</code> を実行すると、<code>5</code> の階乗(<code>5!</code>)が計算されます。 :<syntaxhighlight lang=forth> 5 factorial . </syntaxhighlight> この例では、<code>5!</code> の計算手順は以下の通りです: * <code>5</code> がスタックにプッシュされる。 * <code>factorial</code> が呼び出される。 ** <code>dup 0=</code>: スタックのトップの値が0でないので、次の処理が実行される。 ** <code>dup 1 -</code>: <code>5 - 1</code> が計算されて <code>4</code> がスタックにプッシュされる。 ** <code>recurse *</code>: <code>4</code> の階乗 (<code>4!</code>) が再帰的に計算される。 *** <code>dup 0=</code>: スタックのトップの値が0でないので、次の処理が実行される。 *** <code>dup 1 -</code>: <code>4 - 1</code> が計算されて <code>3</code> がスタックにプッシュされる。 *** <code>recurse *</code>: <code>3</code> の階乗 (<code>3!</code>) が再帰的に計算される。 **** ... ***** 最終的に、<code>1</code> の階乗 (<code>1!</code>) が計算されて <code>1</code> がスタックにプッシュされる。 **** <code>5 *</code>: <code>5</code> と <code>4!</code> の結果を掛けて <code>120</code> がスタックにプッシュされる。 *** <code>5 *</code>: <code>5</code> と <code>120</code> の結果を掛けて <code>120</code> がスタックにプッシュされる。 * <code>. (dot)</code> コンパイラワ ==== 最大公約数(GCD) ==== 再帰的にユークリッドのアルゴリズムを使用して最大公約数(Greatest Common Divisor, GCD)を計算します。 :<syntaxhighlight lang=forth> : gcd ( u1 u2 -- gcd ) dup 0= if \ スタックのトップの値が0かどうかをチェック drop \ スタックのトップの値が0ならば削除して終了 else swap over mod recurse \ スタックのトップと2番目の値を入れ替えて、modを計算し再帰的に呼び出す then ; </syntaxhighlight> このプログラムの動作をステップごとに説明します: # <code>dup 0=</code>: スタックのトップの値(<code>u1</code>)が0かどうかをチェックします。 #* もし0ならば、<code>drop</code> が実行されて、スタックのトップの値(<code>u1</code>)が削除されます。この場合は再帰の終了条件となります。 # <code>else</code>: もしスタックのトップの値(<code>u1</code>)が0でない場合は、次の操作が実行されます。 # <code>swap over mod recurse</code>: #* <code>swap</code>: スタックのトップと2番目の値を入れ替えます。これにより、<code>u1</code> と <code>u2</code> の値が入れ替わります。 #* <code>over</code>: スタックの2番目の値(入れ替え前の <code>u1</code>)をスタックのトップにコピーします。 #* <code>mod</code>: スタックのトップの2つの値を取り出して、<code>u1 % u2</code>(<code>u1</code> を <code>u2</code> で割った余り)を計算し、その結果をスタックにプッシュします。 #* <code>recurse</code>: 自身の <code>gcd</code> を再帰的に呼び出します。これにより、新しい <code>u1</code> と <code>u2</code> の値がスタックに積まれ、再帰的に最大公約数が計算されます。 # <code>then</code>: <code>if</code> ブロックの終了を示します。 例えば、<code>12 18 gcd .</code> を実行すると、以下のように動作します: * <code>12</code> と <code>18</code> がスタックにプッシュされます。 * <code>gcd</code> が呼び出されます。 ** <code>dup 0=</code>: <code>18</code> は0ではないので、次の処理に進みます。 ** <code>swap over mod recurse</code>: <code>18</code> と <code>12</code> が入れ替わり、<code>18 % 12</code> が計算されます(余りは <code>6</code>)。 ** <code>gcd</code> が再帰的に呼び出され、新しい値 <code>12</code> と <code>6</code> がスタックにプッシュされます。 *** <code>dup 0=</code>: <code>6</code> は0ではないので、次の処理に進みます。 *** <code>swap over mod recurse</code>: <code>6</code> と <code>12</code> が入れ替わり、<code>6 % 12</code> が計算されます(余りは <code>6</code>)。 *** <code>gcd</code> が再帰的に呼び出され、新しい値 <code>6</code> と <code>6</code> がスタックにプッシュされます。 **** <code>dup 0=</code>: <code>6</code> は0ではないので、次の処理に進みます。 **** <code>swap over mod recurse</code>: <code>6</code> と <code>6</code> が入れ替わり、<code>6 % 6</code> が計算されます(余りは <code>0</code>)。 **** <code>0=</code>: <code>0</code> が0なので、<code>drop</code> が実行されて、スタックのトップの値 <code>0</code> が削除されます。 * 最終的に、スタックのトップには <code>6</code> が残ります。これが <code>12</code> と <code>18</code> の最大公約数です。 したがって、<code>12 18 gcd .</code> を実行すると、<code>6</code> が表示されます。 === 変数の宣言・代入と参照 === Forthにおける <code>VARIABLE</code> は、変数を定義するためのワードです。Forthでは、変数はメモリ内のアドレスに名前を関連付ける方法で定義されます。 以下は、<code>VARIABLE</code> を使用して変数を定義する方法とその使い方の例です。 ==== <code>VARIABLE</code> の使用方法 ==== <code>VARIABLE</code> は以下のように使用します: :<syntaxhighlight lang=forth> VARIABLE my-var \ my-var という名前の変数を定義する </syntaxhighlight> この行は、名前が <code>my-var</code> の変数を定義します。この変数はメモリ内の特定のアドレスに関連付けられます。 ==== 変数の使用方法 ==== 定義された変数を使用するには、<code>@</code>(fetch)や <code>!</code>(store)などのワードを使います。これらのワードを使って変数の値を取得したり設定したりできます。 - <code>@</code> は、変数の値をスタックにプッシュします。 - <code>!</code> は、スタックのトップの値を変数に代入します。 例えば、次のように変数に値を設定して取得します: :<syntaxhighlight lang=forth> 123 my-var ! \ 変数 my-var に値 123 を代入する my-var @ . \ 変数 my-var の値を表示する </syntaxhighlight> この例では、変数 <code>my-var</code> に <code>123</code> を代入し、その後 <code>@</code> を使って変数の値を取得して表示しています。 ==== 実際の例 ==== 以下は、<code>VARIABLE</code> を使って変数を定義し、値を設定して取得する具体的な例です: :<syntaxhighlight lang=forth> VARIABLE my-var \ my-var という名前の変数を定義する 123 my-var ! \ 変数 my-var に値 123 を代入する my-var @ . \ 変数 my-var の値を表示する </syntaxhighlight> この例では、変数 <code>my-var</code> を定義し、<code>123</code> を代入してその値を表示しています。<code>!</code> で変数に値を設定し、<code>@</code> で変数の値を取得しています。 変数はプログラムでデータを保持する際に便利です。Forthでは、変数の値は直接メモリ上に代入されるため、効率的なデータ管理が可能です。 === 定数の定義と参照 === Forthの <code>CONSTANT</code> は、定数を定義するためのワードです。定数は変更されることのない値であり、プログラムの中で何度も使われる値を簡潔に表現するために使用されます。 ==== <code>CONSTANT</code> の使用方法 ==== <code>CONSTANT</code> は以下のように使用します: :<syntaxhighlight lang=forth> 123 CONSTANT my-const \ my-const という名前の定数を定義する </syntaxhighlight> この行は、名前が <code>my-const</code> の定数を定義し、その値を <code>123</code> に設定します。定数はプログラム中で使用される値を一元管理し、可読性を向上させます。 ==== 定数の使用方法 ==== 定義された定数は、その名前を使ってプログラム中で値を参照することができます。 :<syntaxhighlight lang=forth> my-const . \ 定数 my-const の値を表示する </syntaxhighlight> この例では、定数 <code>my-const</code> の値が表示されます。 ==== 実際の例 ==== 以下は、<code>CONSTANT</code> を使って定数を定義し、その定数を使用する具体的な例です: :<syntaxhighlight lang=forth> 123 CONSTANT my-const \ my-const という名前の定数を定義する my-const . \ 定数 my-const の値を表示する </syntaxhighlight> この例では、定数 <code>my-const</code> を <code>123</code> に設定し、その後定数の値を表示しています。 定数はプログラム中で共通の値を使い回す際に便利です。Forthの定数は一度定義されると値が変更されることはなく、プログラム全体で一貫性のある値を提供します。 === 基数 === Forthの <code>BASE</code> は、数値の基数(n進数のn)を設定するための変数です。Forthでは、数値の表現において基数を変更することができます。通常、Forthはデフォルトで10進数を使用しますが、<code>BASE</code> を変更することで他の基数(2進数、16進数など)で数値を表現することが可能です。 ==== <code>BASE</code> の使用方法 ==== <code>BASE</code> は以下のように使用します: :<syntaxhighlight lang=forth> 16 BASE ! \ 基数を16進数に設定する </syntaxhighlight> この行は、<code>BASE</code> の値を <code>16</code> に設定しています。これにより、その後の数値の表示や入力が16進数で行われるようになります。 ==== 基数の変更と数値の表現 ==== <code>BASE</code> を変更することで、その後の数値リテラルの表現が変わります。例えば、<code>BASE</code> を16進数に設定した場合、数値リテラルは16進数として解釈されます。 :<syntaxhighlight lang=forth> 16 BASE ! \ 基数を16進数に設定する FF . \ 16進数の255を表示する </syntaxhighlight> この例では、<code>BASE</code> を16進数に設定してから、<code>FF</code> を表示すると、16進数の <code>FF</code> (10進数の <code>255</code>)が表示されます。 ==== デフォルトの基数と再設定 ==== Forthのデフォルトの基数は10進数です。基数を変更した後は、必要に応じて再度基数を10進数に戻すことができます。 :<syntaxhighlight lang=forth> DECIMAL BASE ! \ 基数を10進数に戻す </syntaxhighlight> この行は、<code>BASE</code> を10進数に再設定しています。これにより、数値リテラルは再び10進数として解釈されるようになります。 よくある間違い: :<syntaxhighlight lang=forth> 10 BASE ! \ 基数を16進数から10進数に戻す??? </syntaxhighlight> : として基数を10に戻そうとするミスがあります。 : コードの 10 は16進数として解釈されるので基数は16のままです。 ==== 注意点 ==== <code>BASE</code> を変更すると、数値の解釈や表示が変わるため、基数の変更後には適切な基数に戻すことが重要です。また、<code>BASE</code> の値は変数として扱われるため、必要に応じて保存や復元することができます。 基数を変更することで、特定の基数で数値を扱うプログラムを簡単に記述することができます。 === イミディエイトワード === イミディエイトワード(immediate word)は、Forthプログラミング言語において特定の動作を持つワードの一種です。イミディエイトワードは、通常のワードとは異なり、コンパイル時ではなく実行時に直ちに処理されます。 以下は、イミディエイトワードの特性について詳しく説明します: # 実行時処理: #* イミディエイトワードは、定義された時点ではコンパイルされず、実行時に直ちに解釈および実行されます。 #* 通常のワード(コンパイルワード)は、単なるコンパイル時にスタックに動作を積むだけであり、後で実行されますが、イミディエイトワードは定義された時点ですぐに実行されます。 # 定義方法: #* イミディエイトワードは、<code>IMMEDIATE</code> を使用して定義されます。 #* これにより、そのワードが定義された直後に実行されるようにマークされます。 # 使用例: #* 例えば、<code>."</code>(ダブルクォートピリオド)はイミディエイトワードです。これは、コンパイル時ではなく実行時に文字列を表示します。 #* <code>: greeting ." Hello, world!" ;</code> という定義では、<code>. "</code>Hello, world!"<code> はコンパイル時に実行されず、</code>greeting` を実行したときに実行されます。 # 動的な挙動: #* イミディエイトワードは、通常のワードとは異なり、実行時の環境やスタックの状態に応じて動的に振る舞います。 #* これにより、実行時に動的なテキストや操作を生成するために使用することができます。 イミディエイトワードは、Forthの柔軟性と強力な動的な特性を提供します。コンパイル時に制御構造や動作を決定するだけでなく、実行時に動的な挙動を持つことができます。 {{コラム|Forthの文法|2=Forthのプログラムは、空白文字で区切られた「ワード」の並びで構成されます。ワードには、数値リテラル、制御構造、演算子、そして他のワードを呼び出す構文などがあります。Forthには高水準の構文がなく、基本的な構文要素は非常にシンプルです。 例えば、<code>2 3 +</code> と入力すると、2と3がスタックにプッシュされ、最後の<code>+</code>がスタック上の2つの数値を加算します。この結果である5がスタックに残ります。つまり、Forthではプログラムの実行とデータ操作が、ワードの解釈とスタック操作によって行われるのです。 Forthは、基本的に行指向の言語です。プログラムは複数行に分割できますが、改行の前後で文が継続する場合は、スペースを入れる必要があります。このため、適切なインデントを使ってプログラムの構造をわかりやすくすることが重要です。 }} == データ型 == Forthには明示的なデータ型宣言がないため、データ型は主に暗黙的に扱われます。Forthでは、データ型はデータの解釈や使用方法に依存します。以下では、Forthでよく使用されるデータ型について説明します。 === セル(Cell) === セルは、通常2バイトまたは4バイトのサイズを持つ整数型です。Forthの基本的なデータ型であり、スタックやメモリ内のデータはセル単位で扱われます。セルのサイズは実装によって異なる場合があります。 === 符号付き整数(Signed Integer)と符号なし整数(Unsigned Integer) === Forthは整数を符号付きとしても、符号なしとしても扱うことができます。通常はセル内のビットパターンに基づいて解釈されます。算術演算や比較演算などが適用されますが、具体的な整数型に明示的に制限はありません。 === 文字(Character) === Forthでは文字は通常、符号なし整数として扱われます。ASCII文字セット内の範囲(通常は0から255)の数値として表現されます。文字に対する演算は、数値としての操作として扱われます。 === 文字列(String) === 文字列はカウント付き文字列(Counted String)やnull終端文字列(Null-terminated String)として表現されることがあります。カウント付き文字列では、最初のバイトが文字列の長さを示し、その後に文字のデータが続きます。文字列は通常、メモリ上の連続した領域に格納されます。文字列の操作には、<code>WORD</code>、<code>FIND</code>、<code>C"</code>などの専用のワードが用意されています。 === アドレス(Address) === Forthではアドレスも整数として扱われます。アドレスはメモリ上の位置を示す整数値であり、アドレス演算は通常の整数演算と同様に行われます。アドレス演算には、<code>CHAR+</code>、<code>CELLS</code>、<code>FLOAT+</code>などの専用のワードが用意されています。 === データ型の制約と振る舞い === Forthでは、データ型に関する制約やチェックはコンパイラやランタイムによっては'''行われません'''。プログラマはデータを正しく扱う責任があります。特にプログラムの移植性を考慮する場合は、適切なデータ型の使用が重要です。 データ型はForthの柔軟性とパフォーマンスの両方をサポートするため、プログラマに柔軟性と責任を与えます。それぞれのアプリケーションや環境に応じて、適切なデータ型を選択することが重要です。 == 浮動小数点数 == Forthの浮動小数点数についての情報は、Forth-2012仕様におけるオプションの浮動小数点数ワードセットに関連しています。以下にその内容の要点をまとめます。 ; 浮動小数点数の基本 :* 浮動小数点数は、<code>DECIMAL</code>の<code>BASE</code>で入力する必要があります。任意の基数での浮動小数点数の入力は許可されていません。 :* 標準システムで解釈されるすべての浮動小数点数には、指数インジケーター "E" を含める必要があります。 :;浮動小数点数の例 ::<syntaxhighlight lang=forth> 1e 3.14e 1.2e3 1e9 </syntaxhighlight> ; 浮動小数点数のフォーマットと範囲 :* 浮動小数点数の有効桁数や指数のフォーマット、範囲は、Forth-2012では実装に依存します。IEEE浮動小数点数フォーマットが一般的に使用されています。 ; 浮動小数点数のワードセット :* Floating-Point Extensionsワードセットには、<code>DF@</code>、<code>SF@</code>、<code>DF!</code>、<code>SF!</code>などのワードが含まれています。これらは、倍精度および単精度のIEEE浮動小数点フォーマットの数値をメモリに格納するためのものです。 ; 浮動小数点数の入力 :* 浮動小数点数をASCII形式で入力するためには、<code>>FLOAT</code>ワードが使用されます。これは、標準Forthシステムや他の広く使用されるプログラミング環境からデータを受け入れるために広範な構文を許容します。 ; 実装の注意点 :* カスタムの浮動小数点数データ構造を定義する際には、アドレスの整列(alignment)に注意する必要があります。<code>CREATE</code>が適切な浮動小数点数の整列を行わない場合は、コンパイル時および実行時に適切な整列を指定する必要があります。 == ローカル変数 == ForthのOPTIONAL Locals word set(ローカルワードセット)は、Forthのプログラミングでローカル変数を定義するための機能を提供します。以下は、このワードセットに関する情報の要約です。 ; ローカル変数の定義方法 :* <code>(LOCAL)</code> ワードや <code>LOCALS|</code> ワードを使用して、ローカル変数を定義します。 :* <code>{ ... }</code> または <code>{: ... :}</code> の表記を使用して、ローカル変数を囲みます。<code>: ... :</code> の形式は、他のシステムとの名前の衝突を避けるための妥協形式です。 ; ローカル変数の種類 :* ローカル変数は、初期化されたものと初期化されていないものに分けられます。初期化されたローカル変数はデータスタックから実行時に初期化されます。 ; 定義の終了 :* ローカル変数の定義は <code>--</code> もしくは <code>:}</code> で終了します。これにより、ローカル変数の定義中に完全なスタックコメントを記述することが可能です。 ; 文法と慣習 :* ローカル変数の引数と値の区切りには <code>|</code> を使用しますが、他のシステムでは <code>{ ... }</code> の表記が競合する場合があります。 :* 実装によっては、別の区切り文字(例: <code>\</code>, <code>¦</code>)を使用する場合がありますが、移植性を確保するためには <code>|</code> の使用が推奨されます。 ; 予約事項 :* ローカル変数の名前には、特定の文字(<code>:</code>、<code>[</code>、<code>^</code>)で終わる名前は予約されています。 Forthのローカル変数機能は、実装によって異なる場合がありますが、一般的な慣習として、<code>(LOCAL)</code> や <code>{: ... :}</code> の表記が広く使用されています。移植可能なプログラムを書く場合は、このような慣習に準拠することが重要です。 == ファイル操作 == Forthのファイル操作に関連するオプションのワードセットである「File-Access」についての情報を要約します。 === ファイル操作の機能 === # '''CREATE-FILE''' (<code>CREATE-FILE</code>) #* ファイルを作成するためのワードです。 #* 例: <code>S" TEST.FTH" R/W CREATE-FILE ABORT" CREATE-FILE FAILED" ;</code> # '''OPEN-FILE''' (<code>OPEN-FILE</code>) #* ファイルをオープンするためのワードです。 #* 例: <code>S" TEST.FTH" R/W OPEN-FILE ABORT" OPEN-FILE FAILED" ... ;</code> # '''READ-FILE''' (<code>READ-FILE</code>) #* ファイルからデータを読み込むためのワードです。 #* 典型的なシーケンシャルなファイル処理アルゴリズム: #:<syntaxhighlight lang=forth> BEGIN ... READ-FILE THROW ?DUP WHILE ... REPEAT </syntaxhighlight> # '''READ-LINE''' (<code>READ-LINE</code>) #* ファイルから行単位でデータを読み込むためのワードです。 #* 典型的な行指向のシーケンシャルなファイル処理アルゴリズム: #:<syntaxhighlight lang=forth> BEGIN ... READ-LINE THROW WHILE ... REPEAT DROP </syntaxhighlight> # '''INCLUDE''' (<code>INCLUDE</code>) #* 指定されたファイルを読み込んで実行するためのワードです。 #* 例: <code>INCLUDE filename</code> # '''REQUIRE''' (<code>REQUIRE</code>) #* 指定されたファイルを読み込んで実行するためのワードです。 #* 例: <code>REQUIRE filename</code> # '''REQUIRED''' (<code>REQUIRED</code>) #* 指定されたファイルを読み込んで実行するためのワードです。 #* 例: <code>S" filename" REQUIRED</code> === ファイル操作の注意事項 === * ファイルを再利用する際は、前のファイルのブロックバッファをフラッシュして、誤った関連付けを避ける必要があります。 * <code>S"</code> や <code>S\"</code> で使用される一時バッファは、2つの連続する文字列を格納できるようにする必要があります。バッファが不足している場合は、最も古いバッファを上書きすることができます。 == 例外処理 == Forthの例外処理に関する情報を要約します。 Exception word set はオプショナルなので、実装していない処理系もありえます。 === CATCH と THROW === * '''CATCH''' (<code>CATCH</code>): 例外ハンドリングの開始をマークします。CATCH ブロック内のコードが例外を THROW すると、CATCH は例外コードをキャッチして対応する処理を行います。 * '''THROW''' (<code>THROW</code>): 例外を発生させ、対応する CATCH ブロックに制御を戻します。例外コードが与えられると、THROW は対応する CATCH のスタック状態を復元し、適切な処理を行います。 === 例外処理の重要性と利用法 === * '''例外処理の重要性''': ABORT などの状況でプログラムの制御を維持するために例外ハンドラを使用します。 * '''例外処理の利用法''': 例外処理は、ファイルのテキスト解釈中に発生した例外をキャッチしてファイルをクローズするなど、プログラムの安全な実行を保証します。 === 具体例 === :<syntaxhighlight lang=forth> : could-fail ( -- char ) KEY DUP [CHAR] Q = IF 1 THROW THEN ; : do-it ( a b -- c) 2DROP could-fail ; : try-it ( --) 1 2 ['] do-it CATCH IF ( x1 x2 ) 2DROP ." There was an exception" CR ELSE ." The character was " EMIT CR THEN ; : retry-it ( -- ) BEGIN 1 2 ['] do-it CATCH WHILE ( x1 x2) 2DROP ." Exception, keep trying" CR REPEAT ( char ) ." The character was " EMIT CR ; </syntaxhighlight> * <code>could-fail</code>: キーボードからキーを読み取り、特定の条件で例外を発生させます。 * <code>do-it</code>: 例外を発生させる可能性のある処理を行います。 * <code>try-it</code>: <code>do-it</code> を実行し、例外が発生した場合は例外メッセージを表示します。 * <code>retry-it</code>: <code>do-it</code> を実行し、例外が発生した場合はリトライし続けます。 == 実行トークン == Forthにおける実行トークン(Execution Token; xt)は、ワード(Word)や定義体(Definition)の実行を指示するためのデータ構造です。実行トークンは、コードワードを指すための一意の識別子として機能します。以下は、Forthの実行トークンについての詳細です。 ; 実行トークンの定義 : 実行トークンは、通常、ワードや定義体の実行を示すために使用される整数またはポインタです。これは通常、コンパイラやインタプリタ内部で使用され、特定のワードや定義体を表す一意の識別子として機能します。 ; 実行トークンの使用 : Forthのコードは、実行トークンを使用してワードや定義体を実行します。実行トークンは通常、スタックや辞書(Dictionary)に格納され、必要なときに取り出されて使用されます。 ; ' (Tick) 記号 : 一般的なForthのプログラミングスタイルでは、実行トークンを取得するためにシングルクォート(')記号が使用されます。例えば、<code>' DUP</code> は <code>DUP</code> ワードの実行トークンを取得します。 ; 実行トークンと定義体の関連付け : 実行トークンは、定義体やコードワードと関連付けられます。通常、辞書内のワードエントリは、そのワードの実行トークンを参照します。これにより、プログラムは実行トークンを使用して、辞書内のワードを特定して実行することができます。 ; ランタイムスタックとの関係 : Forthのランタイムスタックは、実行トークンを使用してコードを実行します。コンパイルされたForthコードは、ランタイムスタック上で実行トークンを取り出して、対応するワードや定義体を実行します。 ; 実行トークンの特徴 : 実行トークンは、Forthの柔軟性と効率性を向上させるために使用されます。コンパイラやインタプリタは、実行トークンを介してワードを効率的に実行し、辞書の管理を行います。 ; 実行トークンの安全性 : Forthでは、実行トークンは通常、ユーザーからは直接操作されず、コンパイラやランタイムシステム内部で使用されます。これにより、実行トークンを誤って操作することがなく、安全なプログラミング環境が提供されます。 Forthの実行トークンは、言語の内部実装の詳細を隠蔽し、プログラマに柔軟性と効率性を提供する重要な概念です。 == コンパイル時ワード == Forthには、コンパイル時に処理される特殊なワードがあります。これらをコンパイル時ワードと呼びます。 主なコンパイル時ワードには以下のようなものがあります: # コンパイル時の定義操作 #* <code>:</code> (コロン) - 新しい定義を開始する(<code>:</code>自身は通常の逐次ワード) #* <code>;</code> (セミコロン) - 定義を終了しコンパイルモードを抜ける #* <code>CONSTANT</code>、<code>VARIABLE</code>、<code>DEFER</code> - 定数、変数、遅延定義を作成する # コンパイル時の制御 #* <code>IF</code>、<code>ELSE</code>、<code>THEN</code>、<code>BEGIN</code>、<code>UNTIL</code> など - 条件分岐やループなどの制御構造を定義する #* <code>LITERAL</code> - スタックトップの値をコンパイル時に埋め込む # その他のコンパイル時操作 #* <code>IMMEDIATE</code> - 定義をすぐに実行されるように指定する #* <code>[COMPILE]</code> - 次のワードをコンパイル時に実行する #* <code>POSTPONE</code> - 次のワードの実行トークンをコンパイルする これらのコンパイル時ワードは、Forthのプログラムの構造を定義したり、実行時の振る舞いを制御したりするために使われます。 通常のワードとは異なり、これらのコンパイル時ワードはコンパイル時に処理され、実行時には特殊な動作をするようになっています。これにより、Forthのプログラミングモデルを柔軟に拡張することができます。 == データ構造とメモリ管理 == Forthは組み込みシステムなどのリソース制約の厳しい用途を想定して設計されているため、メモリの効率的な利用が重視されています。この章では、Forthにおけるデータ構造とメモリ管理の方法を説明します。 === コントロールフロースタック === コントロールフロースタックとは、Forthのプログラムの制御フローを管理するために使用される仮想的なスタックです。 その主な役割は以下の通りです: # 制御フロー命令の対応関係の管理 #* 制御フロー命令(<code>IF</code>, <code>THEN</code>, <code>ELSE</code>, <code>BEGIN</code>, <code>WHILE</code>, <code>REPEAT</code> など)の対応関係を管理します。 #* 開始と終了の命令が適切に対応していることを確認します。 # 制御フロー中のデータスタック操作の制約 #* 制御フロー中のデータスタックの使用方法に制約を課します。 #* 制御フロー命令の入れ子関係に応じて、適切なデータスタックの状態が維持されるようにします。 コントロールフロースタックは物理的に実装されていなくても良いと仕様で定められています。 代わりに、システムはコンパイル時や実行時にこのスタックの挙動を模倣する方法を採ることができます。 つまり、コントロールフロースタックはForthの制御構造の妥当性を保証する上で重要な概念であり、プログラムの正しい実行を支えているのです。 通常のプログラミングでコントロールフロースタックを強く意識することはありませんが、制御構造を自らワードとして定義しようとする場合、コントロールフロースタックの振る舞いに注意する必要があります。 === リターンスタック === Forthには、データスタックとは別に、リターンスタックと呼ばれる重要なスタックが存在します。リターンスタックの主な役割は以下の通りです: # 関数呼び出しとリターン #* 関数を呼び出すとき、その関数の呼び出し元の命令アドレスがリターンスタックにプッシュされます。 #* 関数から抜け出すときは、リターンスタックからアドレスがポップされ、その場所に制御が戻されます。 #* これによって、関数呼び出しの際の制御の移動を管理することができます。 # 一時的データ保管 #* リターンスタックは、データを一時的に保管する場所としても使えます。 #* データスタックからデータを>Rでリターンスタックにプッシュし、後でR>で取り出すことができます。 #* これにより、データスタックの状態を一時的に変更せずに、値を保持しておくことができます。 リターンスタックの使用には注意点があります: * ワード内やループ内では、<code>>R</code>と <code>R></code>の回数が一致している必要があります。 * リターンスタックの値は、同じブロック内でのみ参照・取り出しできます。 * ループの脱出時やDO-ループ内からは、リターンスタックの値を取り出せません。 つまり、リターンスタックは制御フローの管理と一時的なデータ保管に使われますが、その使い方には一定の制限があるため、注意深く扱う必要があります。 プログラムの複雑さが増すと、リターンスタックの状態を適切に管理することが難しくなるため、できるだけ単純な使い方に留めるのが賢明です。 ; <code>>R ( x -- ) ( R: -- x )</code> : データスタックから値をポップしリターンスタックにプッシュする ; <code>R> ( R: -- x ) ( x -- )</code> : リターンスタックから値をポップしデータスタックにプッシュする ; <code>R@ ( -- x ) ( R: x -- x )</code> : リターンスタックのスタックトップをデータスタックにコピーする ; <code>2>R ( x1 x2 -- ) ( R: -- x1 x2 )</code> ; <code>2R> ( -- x1 x2 ) ( R: x1 x2 -- )</code> ; <code>2R@ ( -- x1 x2 ) ( R: x1 x2 -- x1 x2 )</code> スタックエフェクトに <code>R:</code> という新しい記号が出てきましたが、これはリターンスタックへの操作をしまします。このためリターンスタックはRスタックとも呼ばれています。 === 変数とアドレス指定 === Forthには、グローバル変数やローカル変数の概念がありません。代わりに、値を格納するためのメモリ領域を確保し、そのアドレスを使ってアクセスします。<code>VARIABLE</code>ワードを使うと、新しい変数領域が確保され、その開始アドレスがスタックに置かれます。 :<syntaxhighlight lang=forth> VARIABLE COUNTER \ カウンター変数を定義 COUNTER @ . \ 変数の値を表示(初期値は0) 1 COUNTER +! \ 変数にインクリメント </syntaxhighlight> 変数の値を取り出すには<code>@</code>(フェッチ)、格納するには<code>!</code>(ストア)を使います。<code>+!</code>のように算術演算と<code>!</code>を組み合わせたワードもあります。 Forthではアドレスを直接スタックに置いて操作することもできます。<code>HERE</code>はディクショナリの次の空きアドレスを取得し、<code>ALLOT</code>はディクショナリ領域を確保します。 ==== データスペース(Data Space) ==== Forthのデータスペースとは、メモリ内の連続した領域を指し、データやワードの定義などが格納される場所です。Forthでは、データスペースは主に '''ヒープ(heap)''' と '''ディクショナリ(dictionary)''' の2つの領域に分かれています。 * '''ヒープ''': データスタックやワードの実行時に使用される一時的な領域です。ここでは、動的に割り当てられたデータや一時的な計算に使用されるデータが保持されます。 * '''ディクショナリ''': ワード(ワード)の定義やその実装が格納される領域です。Forthのディクショナリはワードの名前とそれに対応する実行可能なコードへのポインタを保持します。 ==== <code>HERE</code> ワード ==== <code>HERE</code> はForthで使用される特定のワードであり、現在のデータスペース内の「ここ(here)」の位置を示します。具体的には、ディクショナリ内の次の空き領域の先頭アドレスを指します。 <code>HERE</code> を使用すると、新しいワードやデータをデータスペースに格納する際に位置を特定することができます。主にワードの定義やデータの動的な確保に使用されます。 例えば、新しい変数や配列を定義する場合、<code>HERE</code> の値を参照して適切なメモリ領域を割り当て、その後 <code>HERE</code> を更新します。 具体的な使用例を示します: :<syntaxhighlight lang=forth> HERE . \ 現在のHEREの値を表示(ディクショナリ内の次の空き領域のアドレス) 10 ALLOT \ 10バイトの領域を確保 HERE . \ 確保後のHEREの値を表示 </syntaxhighlight> この例では、まず <code>HERE</code> の値が表示され、次に <code>10 ALLOT</code> によって10バイトの領域が確保されます。その後、再度 <code>HERE</code> の値が表示され、確保された領域の終端アドレスが示されます。 <code>HERE</code> を適切に使用することで、動的なメモリ管理やデータスペースの操作が行えます。 ==== HEREを利用したデータスペースの活用例 ==== ; sieve.fr :<syntaxhighlight lang=forth> : prime? ( n -- ? ) here + c@ 0= ; : composite! ( n -- ) here + 1 swap c! ; : sieve ( n -- ) here over erase 2 begin 2dup dup * > while dup prime? if 2dup dup * do i composite! dup +loop then 1+ repeat drop ." Primes: " 2 do i prime? if i . then loop ; 100 sieve / Primes: 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 </syntaxhighlight> このForthのコードは、エラトステネスの篩(Sieve of Eratosthenes)アルゴリズムを実装しています。このアルゴリズムは、与えられた数 <code>n</code> 以下のすべての素数を見つけるために使用されます。以下では、与えられたコードの各部分を詳しく説明します。 ; <code>prime?</code> ワード :<syntaxhighlight lang=forth> : prime? ( n -- ? ) here + c@ 0= ; </syntaxhighlight> :; <code>( n -- ? )</code>: スタックから整数 <code>n</code> を取り出し、その数が素数であるかどうかの真偽値 <code>?</code> をスタックに積む。 :* <code>here + c@</code>: <code>here</code> は現在のデータスペースの末尾を示し、それに <code>+</code> を使ってワードの<code>n</code>番目のアドレスを取得する。そして <code>c@</code> はそのアドレスの内容(1バイトの文字)を取得する。 :* <code>0=</code>: 取得したバイトが0かどうかをチェックし、0ならば真(素数)を返す。 ; <code>composite!</code> ワード :<syntaxhighlight lang=forth> : composite! ( n -- ) here + 1 swap c! ; </syntaxhighlight> :; <code>( n -- )</code>: スタックから整数 <code>n</code> を取り出す。 :* <code>here + 1 swap c!</code>: <code>here</code> から<code>n</code>のアドレスにを1を1バイトで書き込む。 ; <code>sieve</code> ワード :<syntaxhighlight lang=forth> : sieve ( n -- ) here over erase 2 begin 2dup dup * > while dup prime? if 2dup dup * do i composite! dup +loop then 1+ repeat drop ." Primes: " 2 do i prime? if i . then loop ; </syntaxhighlight> :; <code>( n -- )</code>: スタックから整数 <code>n</code> を取り出す。 :* <code>here over erase</code>: 現在のデータスペース(<code>here</code> から先)を <code>n</code> バイト分消去する。 :* <code>2 begin ... repeat</code>: メインのループ。2から始めて、以下の条件に基づいて処理を繰り返す。 :** <code>2dup dup * ></code>: 現在の値を2つコピーし、2つを掛けた値が <code>n</code> を超えるまで続ける。 :** <code>dup prime? if ... then</code>: 現在の値が素数かどうかをチェックし、素数ならば以下を実行。 :*** <code>2dup dup * do ... dup +loop</code>: 素数の場合、その数の倍数を篩い落とす。内側のループで、その数の倍数を全て <code>composite!</code> でマークする。 :** <code>1+</code>: 現在の数値を1増やす。 :* <code>drop</code>: 最後の数値を削除する。 :* <code>." Primes: " 2 do i prime? if i . then loop</code>: 素数を表示するループ。2から始まり、<code>n</code> まで続ける。各数値が素数ならば表示する。 ; 実行 :<syntaxhighlight lang=forth> 100 sieve </syntaxhighlight> :100以下の素数を見つけるために <code>sieve</code> ワードが実行されます。 === CREATEを使った変数と配列の定義 === Forthの <code>CREATE</code> は、新しい変数や配列をディクショナリに定義するためのワードです。<code>CREATE</code> を使うことで、任意の名前で参照可能なデータ領域を確保し、その領域に対する操作を定義することができます。 以下に、<code>CREATE</code> ワードの基本的な構文と使用方法を示します。 ==== 構文 ==== :<syntaxhighlight lang=forth> CREATE name </syntaxhighlight> * <code>name</code>: 定義する変数や配列の名前を指定します。 ==== 使用方法 ==== # 変数の定義 #:<code>CREATE</code> を使って変数を定義する場合、単に変数の初期値を指定します。 #:<syntaxhighlight lang=forth> CREATE my-var 42 , </syntaxhighlight> #:上記の例では、<code>my-var</code> という名前の変数が定義され、初期値として <code>42</code> が設定されています。<code>,</code> はスタックのトップの値を <code>my-var</code> の定義領域に格納するワードです。 # 配列の定義 #: <code>CREATE</code> を使って配列を定義する場合、配列の要素数や初期値を指定します。 #:<syntaxhighlight lang=forth> CREATE my-array 5 ALLOT </syntaxhighlight> #: 上記の例では、<code>my-array</code> という名前の配列が定義され、5つの要素分の領域が確保されます。各要素には初期値が与えられていないため、初期化が必要な場合は別途行います。 ==== 使用例 ==== このForthのコードは、<code>CREATE</code> を使って変数と配列を定義し、それらに値を格納・表示する例です。 ; 変数の定義と使用 :<syntaxhighlight lang=forth> CREATE x \ 変数 x を定義 100 x ! \ x に 100 を代入 x @ . CR \ x の値を表示 </syntaxhighlight> * <code>CREATE x</code>: <code>x</code> という名前の変数を定義します。<code>CREATE</code> はディクショナリに新しいワードを登録しますが、データスペース自体は確保しません。 * <code>100 x !</code>: <code>x</code> のデータフィールドに <code>100</code> を格納します。 * <code>x @ . CR</code>: <code>x</code> のデータフィールドから値を読み取って表示します。<code>CR</code> は改行を出力します。 ; 配列の定義と使用 :<syntaxhighlight lang=forth> CREATE MY-ARY 100 ALLOT \ 100セルの配列を作成 42 MY-ARY 10 + ! \ 11番目の要素に42を代入 MY-ARY 10 + @ . \ 11番目の要素の値を表示 </syntaxhighlight> * <code>CREATE MY-ARY 100 ALLOT</code>: <code>MY-ARY</code> という名前の配列を定義し、100セル分のデータスペースを確保します。 * <code>42 MY-ARY 10 + !</code>: <code>MY-ARY</code> の11番目の要素(0から始まるインデックスなので、10を足します)に <code>42</code> を代入します。 * <code>MY-ARY 10 + @ .</code>: <code>MY-ARY</code> の11番目の要素の値を読み取って表示します。 この例では、<code>CREATE</code> を使って変数 <code>x</code> と配列 <code>MY-ARY</code> を定義し、それぞれに値を設定しています。<code>x</code> は単一の値を格納する変数であり、<code>MY-ARY</code> は複数の要素を持つ配列です。<code>!</code> を使ってデータを代入し、<code>@</code> を使ってデータを取得しています。 Forthの特性として、変数や配列の定義はディクショナリに登録されるため、名前に対して対応するデータ領域へのアクセスが可能となります。これにより、動的なデータ構造を効率的に管理することができます。 === アライメント === Forthの <code>ALIGN</code> ワードは、データ領域のアラインメントを行うためのワードです。アラインメントとは、データがメモリ上で配置される位置を調整することであり、特定のアドレス境界にデータを配置することを指します。 アラインメントの必要性は、プロセッサアーキテクチャに依存しますが、多くのアーキテクチャでは特定のデータ型(例:4バイト整数など)は特定の境界に配置される必要があります。アラインメントが正しく行われないと、メモリアクセスの効率が低下したり、アドレスエラーなどの例外が発生し処理を中断する可能性があります。 ; 構文 :<syntaxhighlight lang=forth> ALIGN </syntaxhighlight> ; 動作 : <code>ALIGN</code> ワードは、データスペースポインタ (<code>HERE</code>) をアラインメント条件に従って調整します。具体的には、通常は2バイトまたは4バイトの境界に <code>HERE</code> を調整します。これにより、次に確保されるデータ領域が適切な境界に配置されます。 ; 使用例 :<syntaxhighlight lang=forth> HERE ALIGN </syntaxhighlight> : 上記の例では、<code>HERE</code> の値をアラインメントされた位置に調整します。これにより、次に確保されるデータ領域が適切な境界に配置されます。 :<syntaxhighlight lang=forth> CREATE my-var ALIGN 2 ALLOT </syntaxhighlight> : この例では、<code>my-var</code> という名前の変数を定義していますが、そのデータ領域が2バイト境界にアラインメントされて確保されます。これにより、<code>my-var</code> のデータ領域は適切な境界に配置され、メモリアクセスの効率が向上します。 <code>ALIGN</code> ワードは、特定のアーキテクチャで必要なメモリアラインメントを確保するために重要な役割を果たします。メモリアクセスの効率を最大化するために、適切なアラインメントが常に考慮されるべきです。 == 入出力と組み込みワード == Forthには標準の入出力ワードがあり、コンソールやファイルからの入出力を行えます。また、様々な組み込みワードが用意されており、これらを活用することでForthの機能を拡張できます。 === 標準入出力 === Forthには、キーボードからの文字入力や、コンソールへの文字出力を行うためのワードが用意されています。 :<syntaxhighlight lang=forth> KEY \ キーボードから1文字読み込む EMIT \ スタック上の値(文字コード)を出力する ." \ 文字列を直接出力する </syntaxhighlight> <code>KEY</code>はキーボード入力を待ち、押された文字のASCIIコードをスタックに置きます。<code>EMIT</code>は逆に、スタック上の値を文字コードとして解釈し、コンソールに出力します。<code>." Hello"</code>のように、<code>."</code> の後に文字列を続けると、その文字列がコンソール出力されます。 数値入出力には、<code>?</code>、<code>U.</code>、<code>U.R</code>などのワードが使えます。<code>?</code>は数値を入力受け付け、<code>U.</code>は符号なし数値を、<code>U.R</code>は数値を指定した基数(2進数、16進数など)で出力します。 === ファイルアクセス === ファイル入出力には、様々なワードが用意されています。<code>OPEN-FILE</code>でファイルを開き、<code>READ-FILE</code>や<code>WRITE-FILE</code>でデータの読み書きができます。 :<syntaxhighlight lang=forth> S" data.txt" R/O OPEN-FILE THROW VALUE HANDLE \ ファイルを読み取りモードで開く HANDLE READ-FILE ABORT" READ ERROR" \ ファイルを読み込む HANDLE CLOSE-FILE THROW \ ファイルを閉じる </syntaxhighlight> ファイル名は、<code>S"</code> で文字列をスタックに置いた後、<code>R/O</code>(読み取り専用)や<code>W/O</code>(書き込み専用)といったモードを指定してファイルを開きます。<code>THROW</code>はエラーがあれば例外を発生させます。 <code>READ-FILE</code>や<code>WRITE-FILE</code>では、バッファ領域のアドレスと読み書きするバイト数をスタックに置く必要があります。 === 組み込みワードの利用 === Forthには、数学関数や論理演算、メモリ操作など、様々な組み込みワードが用意されています。必要に応じてこれらのワードを活用することで、プログラムにさまざまな機能を付加できます。 :<syntaxhighlight lang=forth> 2 3 MAX . \ 最大値(3)を出力 S" HELLO" SWAP DROP \ スタック操作サンプル HEX 1F20 4 DUMP \ メモリダンプ </syntaxhighlight> <code>MAX</code>は2つの数値の最大値を、<code>SWAP</code>は2つの値の順序を入れ替え、<code>DROP</code>は最上位の値を捨てます。<code>DUMP</code>は指定したアドレスからのメモリ内容をダンプ出力します。 組み込みワードには、浮動小数点演算、文字列処理、マルチタスク、IPCなど、様々な分野のものがあります。また、必要に応じてワードを自作したり、外部ライブラリからリンクしたりできます。Forthはコンパクトなシステムながら、組み込みワードの充実により高い機能性を発揮します。 == アプリケーション開発 == Forthは小規模な組み込みシステムから大規模なアプリケーションまで、幅広い用途に使用できる言語です。この章では、Forthにおけるアプリケーション開発の手法と、実例について解説します。 === モジュール化とワード管理 === Forthはワードをベースとしたモジュール性の高いプログラミングができます。大きなアプリケーションを開発する際は、適切にモジュール分割してワードを設計・管理することが重要です。 Forthにはネームスペースの概念がありません。そのため、ワード名の重複を避けるためには、プレフィックスなどの命名規則を定めることが一般的です。たとえば<code>STRING-LENGTH</code>のように、ワードの役割がわかるよう名前を付けます。 また、ワードをまとめてファイルに保存し、必要に応じて読み込む方法があります。Forthの多くの処理系は、ワードの定義をソースファイルに保存したり、メモリイメージを永続化したりできます。 :<syntaxhighlight lang=forth> MARKER MODULE>STRING : STRING-LENGTH \ 文字列の長さを求める ... ; : STRING-REVERSE \ 文字列を反転する ... ; STRING-REVERSESTRING-LENGTH +MODULE </syntaxhighlight> 作成したワードは<code>MODULE>NAME</code>でモジュール名を付け、<code>+MODULE</code>でモジュールを完成させることができます。他のソースから<code>USE MODULE>NAME</code>とすれば、そのモジュールのワードが使用可能になります。 大規模なシステムでは、このようなソースレベルの分割に加え、オーバーレイ、仮想メモリ、マルチタスク機能を活用することで、メモリの効率的な使用が可能です。 === グラフィックス処理 === Forthでもグラフィック処理が可能ですが、組み込みの機能は限られています。ほとんどの処理はユーザ定義ワードとして実装する必要があります。 ビットマップ画像の表示や、ウィンドウ、マウスカーソルなどの基本的なGUIの作成はある程度可能です。高度な3Dグラフィックスなどを実現するには、外部ライブラリを利用する必要があります。 :<syntaxhighlight lang=forth> NEED FRAMEBUFFER \ フレームバッファへのアクセスモジュール : DRAW-LINE ( x1 y1 x2 y2 -- ) \ ブレザンハムのアルゴリズムでライン描画 ... ; : DRAW-RECT ( x y w h -- ) 2SWAP 2>R 2R> \ (x y w h -- x y x+w y+h) DRAW-LINE 2>R 2R> DRAW-LINE 2SWAP DRAW-LINE 2SWAP DRAW-LINE ; FRAMEBUFFER-INIT \ グラフィックスサブシステムの初期化 100 100 300 200 DRAW-RECT \ 長方形を描画 </syntaxhighlight> 上記では、フレームバッファの制御関数がロードされた前提で、<code>DRAW-LINE</code>を使って<code>DRAW-RECT</code>(長方形描画)を実装しています。スタックを活用して座標値を受け渡し、基本的な幾何図形を描画しています。 Forthはグラフィックスパイプラインなどの高度な機能を組み込んでいませんが、スタックベースの処理により、低レベルのデバイスアクセスが可能です。組み込みシステムのディスプレイやLED制御など、グラフィックス関連の処理に適しています。 === システムプログラミング === Forthの本質的な特性として、システムプログラミングに適していることがあげられます。小規模でコンパクト、高速動作、低レベルなメモリアクセスが可能というメリットがあります。 OSカーネル、デバイスドライバ、BIOS、ブートローダなどの開発にForthは広く使われてきました。組み込みシステムでは、センサーやI/Oデバイスの制御に最適です。スタック指向のモデルにより、レジスタレベルの処理が直接かけるのも特徴です。 例えば、Forthを使ってブートローダを実装する場合には、次のようなプログラムになります。 :<syntaxhighlight lang=forth> HEX 07C0 INPORT DROP \ DOSデータ領域クリア 0800 0 20 MOVE \ リセットベクタ設定 KERNEL.IMG LOAD \ カーネル読み込み A000 OUTPORT \ VGAモードへ切り替え 1000 JMP \ カーネル実行 ... \ BIOSブート用の簡単なForth読み込みコード :KERNEL.IMG LOAD CORE SWAP CPU KERNEL ; </syntaxhighlight> BIOSなどの低レベル機能を呼び出してブートローダを構築する処理が、Forthの文法でコンパクトに記述できる様子がわかります。 また、Forth自身が小規模で可搬性が高いため、Forth処理系そのものもForthで書かれた簡単なコアを、ホストOSやアーキテクチャに合わせてセルフホスト (移植) する手法が一般的です。これは、アプリケーションと実行環境を一体化して開発できる利点があります。 == 高度なトピック == ここまでForthの基本的な構文と概念、データ構造、アプリケーション開発の実例などを解説してきました。この章では、Forthの高度な利用方法としてパフォーマンス最適化、マルチスレッド・マルチタスク、メタプログラミングについて取り上げます。 === 最適化とパフォーマンス === Forthはコンパクトで高速な言語ですが、さらなる最適化の余地があります。ワードの定義を工夫したり、ネイティブコードコンパイラを使ったりすることで、パフォーマンスを向上できます。 ワード定義の最適化では、冗長な演算を排除したり、インラインコーディングの手法を用いたりします。例えば、次のようなワード定義があるとします。 :<syntaxhighlight lang=forth> : MAX2 ( n1 n2 -- max ) 2DUP > IF SWAP DROP ELSE NIP THEN ; </syntaxhighlight> この<code>MAX2</code>は一時的に2つの値を複製(<code>2DUP</code>)し、<code>IF</code>..<code>ELSE</code>..<code>THEN</code>の条件分岐で最大値を選びます。しかし、この一時複製が無駄な演算となっています。次のように書くとコードがシンプルになります。 :<syntaxhighlight lang=forth> : MAX2 ( n1 n2 -- max ) OVER OVER > IF SWAP THEN ; </syntaxhighlight> ワードの最適化には一般的なテクニックがあり、Forthのコンパイラ作者から提案されているものを参考にするとよいでしょう。 また、Forthにはネイティブコードコンパイラと呼ばれるもので、ワードの実行コードをネイティブマシン語に変換できるものがあります。Forthの対話的な実行環境は便利ですが、ネイティブコードの方が高速に動作します。こうした最適化手法を使い分けることで、Forthのパフォーマンスを飛躍的に向上できます。 === マルチスレッドとマルチタスク === Forthには並列実行の機構が組み込まれていないため、マルチスレッドやマルチタスク処理を実現するにはユーザ定義の実装が必要です。しかし、Forthの言語特性を活かせばきわめてコンパクトな並列処理ができます。 マルチスレッドでは、スタックを分離し、スレッド毎にスタックのコピーを持つ手法が一般的です。スレッドの切り替えはスタックのコンテキストスイッチで実現できます。また、Forthのデータストアクセス方式を応用すれば、IPC(プロセス間通信)の仕組みを作ることもできます。 :<syntaxhighlight lang=forth> : NEW-TASK ( -- ) HERE CURRENT-STACK >R CREATE-STACK SWAP [: DO-SOME-WORK ;] ( compile: word behavior ) R> SET-CURRENT ; </syntaxhighlight> この例では、新しいタスクを作成するワード<code>NEW-TASK</code>を定義しています。<code>CREATE-STACK</code>でスタックを新しく割り当て、<code>DO-SOME-WORK</code>のようなワード定義をタスクとして登録します。実行時にはスケジューラによってこれらのタスクが実行されます。 マルチタスク機構を実装する例は多数あり、スレッド単位でデータを扱う方式、メッセージキューによる方式、それぞれ長所と短所があります。並列処理にはデッドロックなどの問題点もありますが、Forthではコンパクトでシンプルなコード記述が可能です。 === メタプログラミング === Forthにはプログラムを生成・変更するメタプログラミングの機能があり、コードを自動生成したり、プログラムを動的に変更したりできます。この機能は、Forthをドメイン固有言語(DSL)の開発などに適用できることを意味しています。 メタプログラミングには、コンパイル時に評価される構文<code>[...]</code>と実行時構文<code>EVAL</code>があります。どちらもプログラムをデータとして扱えるため、動的にプログラムを生成・変更できます。 :<syntaxhighlight lang=forth> : HILBERT-CURVE ( n -- ) 0 ?DO [: 2DUP RECURSE >R >R 1 HCURVE R> R> RECURSE 3 HCURVE ;] POSTPONE LITERAL POSTPONE HCURVE LOOP ; </syntaxhighlight> この例では、ヒルベルト曲線を描画するコードを動的に生成しています。<code>POSTPONE</code>はワードのコンパイルを遅延させ、<code>[: ... ;]</code>の構文はその間のテキストを実行可能なコードとしてコンパイルします。この手法により、 Hilbertカーブの次元(<code>n</code>)に応じて、その描画コードを生成しています。 Forthのメタプログラミング機能は、高度な用途に役立ちます。例えば、ユーザインターフェースビルダー、コードジェネレーター、プログラムシンセサイザなどでその力を発揮できます。Forthの柔軟性を最大限に活かせる側面といえるでしょう。 == サンプルプログラムとプロジェクト == Forthの理解を深めるには、実際にコードを書いて動作を確認することが大切です。この章では、様々なサンプルコードを紹介するとともに、実践的なForthプロジェクトの例を示します。 === 様々なサンプルコード === 以下はForthの基本的な機能を示すサンプルコード集です。 ; 再帰によるフィボナッチ数列 :<syntaxhighlight lang=forth> : FIB ( n -- fib-n ) DUP 0= IF DROP 1 EXIT THEN DUP 1 = IF DROP 1 EXIT THEN DUP 1- RECURSE SWAP 2 - RECURSE + ; </syntaxhighlight> ; 文字列操作 :<syntaxhighlight lang=forth> : UPPERCASE ( addr n -- addr n ) OVER + SWAP ?DO I C@ [CHAR] a [CHAR] z 1+ WITHIN IF [CHAR] A [CHAR] a - + THEN I C! LOOP ; : REVERSE-WORDS ( addr n -- ) [CHAR] \ SKIP SPACES OVER >R BEGIN OVER C@ [CHAR] \ <> WHILE [CHAR] \ PARSE DUP >R REVERSE R> OVER C! CHAR+ REPEAT R> DROP 2DROP ; </syntaxhighlight> ; ベクトル・行列計算 :<syntaxhighlight lang=forth> REQUIRE DOUBLE \ 倍精度浮動小数点サポート : VZEROS ( n -- addr ) \ n要素のゼロベクトルを生成 CREATE HERE 0 SWAP 8 * DUP ALLOT FILL ; : MZEROS ( rows cols -- addr ) \ rows x cols の零行列を生成 SWAP VZEROS SWAP 0 ?DO OVER VZEROS COLS + LOOP ; </syntaxhighlight> ; 簡易グラフィックス :<syntaxhighlight lang=forth> VARIABLE FRAMEBUF \ フレームバッファアドレス : PIXEL ( x y color -- ) \ 1ピクセル書き込み FRAMEBUF @ >R 2 * R@ + 3 * RP@ C!+ RP@ C!+ RDROP ; : LINE ( x1 y1 x2 y2 c -- ) \ ラインの描画 >R 2SWAP R> 2>R 2R@ PIXEL 2R> PIXELLINE ; </syntaxhighlight> これらの例は、スタックを使った処理の流れ、ユーザ定義ワードの作成、再帰など、Forthのプログラミング手法の基本を示しています。コンパクトながらも表現力の高さがわかるでしょう。 === 実践的なプロジェクト例 === 次に、もう少し大がかりなForthプロジェクトの例を紹介します。 ; Forth Chip-8 エミュレーター Chip-8はレトロなゲームコンソールで、Forthでその命令セットをエミュレートするプロジェクトです。グラフィックス、入力処理、命令デコーダなどを実装します。 ; カーネルとブートローダ ForthでOSカーネルの基本部分を実装し、ブートローダと合わせてシステムを構築するプロジェクト。メモリ管理、タスク管理、ファイルシステム、ドライバなどの機能が実装できます。 ; Webサーバー ForthでHTTPリクエストを処理するWebサーバーを作成。ソケット通信、文字列処理、ファイル入出力などの機能が必要になります。追加してWebアプリケーションフレームワークなども作れます。 ; オープンソースForthプロセッサ Forthを使ってCPU命令セットを記述し、ゲートレベルまでFPGAに実装するプロセッサの設計プロジェクト。ハードウェア記述言語との連携が重要です。 このようなプロジェクトを通して、Forthの実用性とシステムプログラミングでの可能性を体験できます。Forthという言語自体を使って、OSやハードウェアコンポーネントを実装できるのが最大の特徴です。いずれのプロジェクトも一般的な規模になると、モジュール分割やワード管理、ツール活用などの工夫が必要になります。 == 参考資料 == Forthについてより深く学ぶには、書籍や公開されているオンラインリソースを参照するのが有効な方法です。また、活発なForthコミュニティに参加することで、他の開発者からの助言を得られます。 === 関連書籍の紹介 === Forthの入門書から応用、さらには処理系の実装に至るまで、多くの優れた書籍が出版されています。 * 「Forth入門」レオ・ブロディ (ISBN:978-4875930297 工学社) ** Forth言語の基本から、アプリケーション開発までをカバーした長年の定番書。 * 「Thinking Forth」Leo Brodie (Punchy Publishing) / Forth思考 ―問題解決のための言語と哲学― レオ・ブロディー著 ** Forth哲学に重きを置いた名著。Forthの考え方を深く解説。 * 「Forth Programmer's Handbook」(ISBN:978-1419675492 Forth Inc.) ** ANS Forthの規格書で、WordSetの詳細が書かれている。 これらの書籍を手に入れられれば、Forthの理解が格段に進むはずです。電子書籍としても出版されているものがあります。 === オンラインリソース === {{Wikipedia}} インターネット上にも無料で参照できるForth関連の豊富なリソースが存在します。 * Forth Interest Group ( https://www.forth.org/ ) ** Forthに関する書籍、記事、リソースなどが集まるポータル。 * Forth-Standard-Committee 公式サイト( https://forth-standard.org/ ) Webサイト、ソースコード、ニュースレターなど、さまざまな形でリソースが公開されているので、活用していきたいものです。 === Forthコミュニティ === 長年にわたりForth言語を支える活発なコミュニティが存在し、開発者同士が支え合う環境があります。 * Newsgroups: comp.lang.forth ** ディスカッションの場となるForth専用のニュースグループ。 * 地域 Forth グループ ** ヨーロッパ、アメリカ、アジアなどの地域Forthグループ。 オンラインフォーラムやメーリングリスト、対面の勉強会など、様々な形でForth開発者同士が交流を深めています。初心者でもこうしたコミュニティに参加することで、サポートを受けられます。Forthの小さな世界ですが、地域を越えて開発が行われているのが特徴です。 Forthの参考文献やオンラインリソース、そしてコミュニティを上手く活用することで、この独特な言語の理解が一層深まるはずです。 == 脚註 == <references /> [[Category:Forth|*]] [[Category:プログラミング言語]] bya36k7zn9f8u5fj0jur4v5fn3flhmi 246676 246675 2024-04-14T03:06:38Z Ef3 694 /*辞書*/ Forthの辞書に関する情報を要約します。 辞書と名前空間 名前空間: Forthの辞書は名前空間を提供します。標準プログラムは非標準の定義で標準ワードを再定義することができますが、その結果は標準システムではなくなります。 定義名: 標準プログラムが使用する外部要素が標準システムで提供されていない場合、実行環境に依存する可能性があります。 コード空間とデータ空間 データ空間: Forthシステムのデータ空間は不連続な領域に分かれています。複数の領域の配置については標準プログラムは仮定できません。 アドレスの整列: アクセス命令によって使用されるアドレスにはアライメント制約があります。例えば、16ビットのデータは偶数アドレスにのみ保存される必要があるなどの制約があります。 他の情報 一貫したアドレス: データ領域の一貫性は、領域内でのアドレス演算を有効にします。 wikitext text/x-wiki == はじめに == Forthはスタック指向のプログラミング言語であり、そのシンプルさと柔軟性から広く用いられています。 本書は、プログラマがForthを効果的に使いこなすための手引書として設計されています。例示や実践的なヒントが豊富に盛り込まれており、読者は理論を理解しながら実際のプロジェクトに応用できるでしょう。 本書を通じて、Forthの魅力と実力を十分に体感し、その利用価値を最大限に引き出すことができるでしょう。 本書では、ForthのCore Word Setに準拠した標準的なForthシステムを題材とします。 == Forthプログラミングの基礎 == Forthはスタック指向のプログラミング言語であり、独自の特徴を持っています。以下では、Forthプログラミングの基礎を解説します。 === スタック操作 === [[スタック構造|スタック]]は、Forthにおける中心的なデータ構造です。ほとんどのワードは、スタックから値を取り出したり、スタックに値を代入したりします。スタックは、後入れ先出し(LIFO; Last In First Out)のデータ構造で、Forthの演算はスタック上で行われます。 === 例 === 以下は、Forthでの簡単な計算の例です: :<syntaxhighlight lang=forth> 3 4 + . </syntaxhighlight> : まず<code>3</code>をスタックに置き、<code>4 + .</code> を解釈します。 : 次に、<code>4</code>をスタックに置き、<code>3 4</code> となり、<code>+ .</code> が残ります。 : そして、<code>+</code> はスタックのトップの2つの要素を加算して結果を戻し、スタックには<code>7</code>だけが残ります。 : 最後に、<code>.</code>(ドット)はスタックから<code>7</code>を取り除いてそれを表示します。 :{| |- !コード!!style='width:3em'| 3 !!style='width:3em'| 4 !!style='width:3em'| + !!style='width:3em'| . |- !スタックトップ |style="border:1px solid black; text-align:center"| 3 ||style="border:1px solid black; text-align:center"| 4 ||style="border:1px solid black; text-align:center"| 7 || |- ! | ||style="border:1px solid black; text-align:center"| 3 || || |- !出力 | || || ||style="text-align:center; font-weight: bold"| 7 |} === コメント === Forthでは、コメントは括弧で囲んで表現されます。例えば: :<syntaxhighlight lang=forth> ( これはコメントです ) </syntaxhighlight> <code>/</code> から行末までもコメントです :<syntaxhighlight lang=forth> 3 4 + \ 3 + 4 の結果をスタックトップに残す </syntaxhighlight> コメントは、インタプリタの動作に影響を与えません。 === スタックエフェクト === Forthの各ワードは、スタック上で特定の操作を行います。ワードのドキュメントでは、それがスタックに対してどのような影響を与えるかを示す記述があります。例えば: :<syntaxhighlight lang=forth> + ( a b -- c ) </syntaxhighlight> この記述は、<code>+</code>ワードが2つの引数(<code>a</code>と<code>b</code>)を消費し、1つの結果(<code>c</code>)をスタックに残すことを意味します。 === Forthのワードとは?その定義と使用について === Forthにおける「ワード」とは、基本的には単語や言葉を意味しますが、Forthプログラミングでは、より具体的には次の2つの意味を持ちます。 # 定義済みの単語 #: ワードは、Forthの語彙において定義された単語や操作を指します。Forthでは、これらのワードはスタック操作や制御構造、算術演算などの基本的な機能を表します。例えば、<code>+</code>は2つの数値を取り出して足し合わせ、結果をスタックに戻すワードです。 # 新しい単語の定義 #: ワードは、Forthプログラム内で新しい単語を定義するための仕組みとしても使われます。これは、既存のワードを組み合わせて、新しい機能を持つ単語を定義することを意味します。例えば、<code>DOUBLE</code>というワードを定義して、与えられた数値を2倍にするような操作を定義することができます。 ワードの定義は、通常、次のような形式で行われます: :<syntaxhighlight lang=forth> : ワード名 ( 定義部分 ) ; </syntaxhighlight> ここで、<code>: ワード名</code>は新しいワードの定義を開始し、<code>;</code>は定義の終了を示します。定義部分には、既存のワードや操作を組み合わせて、新しい機能を実現するForthのコードが記述されます。 === ワードの定義と使用例 === Forthにおけるワードの定義と使用についてさらに詳しく説明します。 # ワードの定義 : #: ワードは、<code>:</code> と <code>;</code> の間に記述されたコードブロックで定義されます。 #: 例えば、<code>SQUARE</code>という新しいワードを定義してみましょう。 #:<syntaxhighlight lang=forth> : SQUARE ( n -- n*n ) DUP * ; </syntaxhighlight> #: ここでは、<code>SQUARE</code>というワードが定義されています。このワードは、スタックから1つの数値を取り出し、その数値を自乗して結果をスタックに戻します。 # ワードの使用 : #: 定義したワードは、Forthプログラム内で直接使用することができます。 #:<syntaxhighlight lang=forth> 5 SQUARE . \ スタックから5を取り出して自乗し、結果を表示する </syntaxhighlight> #:上記の例では、<code>5 SQUARE .</code> というForthコードが実行されます。まず、<code>5</code>がスタックに積まれ、次に<code>SQUARE</code>ワードが実行されて、<code>5</code>の自乗である<code>25</code>が計算されます。最後に<code>.</code>はスタックのトップの値を表示しますので、結果として<code>25</code>が表示されます。 # 組み込みワードとカスタムワード : #: Forthには組み込みのワード(<code>+</code>, <code>-</code>, <code>*</code>, <code>/</code>など)がありますが、ユーザーはこれに加えて独自のワードを定義することができます。カスタムワードを使うことで、プログラムをより効率的に構築できます。 # 再帰的なワード : #: Forthでは、ワードは自身の中で再帰的に呼び出すことができます。これにより、複雑な演算や制御構造を簡潔に表現することが可能です。 ワードの定義と使用は、Forthプログラムの中核的な部分を構成します。これにより、プログラムの再利用性、メンテナンス性、可読性が向上し、効率的なコーディングが実現されます。 === 基本的な制御構造 === Forthの制御構造は、他のプログラミング言語とは異なり「制御構造もワードの集合から定義する」という独自の特徴を持っています。Forthでは、基本的な制御構造として条件分岐とループが利用されます。 制御構造に関するワードは、コンパイル時(つまり <code>:</code> から <code>;</code> までの間)でのみ使用でき会話モードでは使用できません。 ==== 条件分岐 ==== Forthでは、条件分岐は主に <code>IF</code>, <code>ELSE</code>, <code>THEN</code> のワードを組み合わせて実現されます。 ; 例: :<syntaxhighlight lang=forth> : ABS ( n -- |n| ) DUP 0< IF NEGATE THEN ; </syntaxhighlight> この例では、<code>ABS</code>というワードを定義しています。このワードは、スタックから数値を取り出し、その絶対値を計算して結果をスタックに戻します。<code>DUP 0<</code> はスタックトップの値が0より小さいかどうかをチェックし、<code>IF</code> から <code>THEN</code> の間に記述されたブロックが条件を満たす場合に実行されます。つまり、もし数値が負の場合は <code>NEGATE</code> が実行されます。 ==== ループ ==== Forthでは、ループは <code>DO</code>, <code>LOOP</code> や <code>BEGIN</code>, <code>WHILE</code>, <code>REPEAT</code> のワードを使って実装されます。 ; 例: :<syntaxhighlight lang=forth> : COUNTDOWN ( n -- ) 0 DO I . LOOP ; </syntaxhighlight> 上記の例では、0から与えられた数値(<code>n</code>)までカウントダウンする<code>COUNTDOWN</code>というワードを定義しています。 ==== その他の制御構造 ==== Forthには他にも、<code>CASE</code>, <code>OF</code>, <code>ENDOF</code>, <code>ENDCASE</code> を使った条件分岐や、<code>IF-ELSE-ENDIF</code> 構造、<code>BEGIN-UNTIL</code>、<code>BEGIN-WHILE-REPEAT</code> など、さまざまな制御構造が存在し、新たな制御構造をユーザーが定義することすら出来ます。 Forthの制御構造は、スタック指向の特性に基づいてシンプルかつ柔軟に設計されており、独自のプログラミングスタイルを持つことが特徴です。 === スタック操作の基本命令 === Forthにはスタック上のデータを操作するための基本的な命令があります。 * <code>DUP</code>: ( n -- n n ) スタックのトップの要素を複製する * <code>DROP</code>: ( n -- ) スタックのトップの要素を削除する * <code>SWAP</code>: ( n1 n2 -- n2 n1 ) スタックのトップとその下の要素を交換する * <code>OVER</code>: (n1 n2 -- n1 n2 n1 ) スタックのトップの2つ下の要素を複製してトップに置く * <code>ROT</code>: ( n1 n2 n3 — n2 n3 n1 ) スタックのトップの3つ下の要素をトップに回転する === 基本的な演算 === Forthには、算術演算(<code>+</code>、<code>-</code>、<code>*</code>、<code>/</code>など)、論理演算(<code>AND</code>、<code>OR</code>、<code>NOT</code>)、比較(<code>=</code>、<code><></code>、<code>></code>、<code><</code>など)の基本ワードが用意されています。これらのワードは、スタック上の値を取り、演算結果をスタックに代入します。 === 再帰的呼び出し === Forthで再帰的呼び出しを行う場合、ワード <code>recurse</code> を使ってワード自身を表します。 再帰的なワードを定義する方法について説明します。 ==== 階乗 ==== 再帰的な階乗(factorial)を定義します。 :<syntaxhighlight lang=forth> : factorial ( n -- result ) dup 0= if \ スタックのトップの値が0かどうかをチェック drop 1 \ もし0ならば、結果は1として処理を終了 else dup 1 - \ スタックのトップの値から1を引いた値をコピー recurse * \ 再帰的に自身を呼び出して、その結果にスタックのトップの値を掛ける then ; </syntaxhighlight> この定義の内容を説明します。 * ワード <code>factorial</code> は、<code>( n -- result )</code> のスタックエフェクトを持ちます。<code>n</code> は階乗を計算する整数です。 * <code>dup 0=</code>: スタックのトップの値が0かどうかをチェックします。 ** もし0ならば、<code>drop 1</code> が実行されて、スタックのトップの値(<code>n</code>)が削除され、結果として <code>1</code> がスタックにプッシュされます。 * <code>else</code>: もしスタックのトップの値が0でない場合は、次の操作が実行されます。 ** <code>dup 1 -</code>: スタックのトップの値から <code>1</code> を引いた値をスタックにプッシュします。これは <code>n - 1</code> の計算です。 ** <code>recurse *</code>: 自身の <code>factorial</code> を再帰的に呼び出して、結果に対してスタックのトップの値(<code>n</code>)を掛けます。これにより、<code>n! = n * (n-1)!</code> の計算が行われます。 * <code>then</code>: <code>if</code> ブロックの終了を示します。 例えば、<code>5 factorial .</code> を実行すると、<code>5</code> の階乗(<code>5!</code>)が計算されます。 :<syntaxhighlight lang=forth> 5 factorial . </syntaxhighlight> この例では、<code>5!</code> の計算手順は以下の通りです: * <code>5</code> がスタックにプッシュされる。 * <code>factorial</code> が呼び出される。 ** <code>dup 0=</code>: スタックのトップの値が0でないので、次の処理が実行される。 ** <code>dup 1 -</code>: <code>5 - 1</code> が計算されて <code>4</code> がスタックにプッシュされる。 ** <code>recurse *</code>: <code>4</code> の階乗 (<code>4!</code>) が再帰的に計算される。 *** <code>dup 0=</code>: スタックのトップの値が0でないので、次の処理が実行される。 *** <code>dup 1 -</code>: <code>4 - 1</code> が計算されて <code>3</code> がスタックにプッシュされる。 *** <code>recurse *</code>: <code>3</code> の階乗 (<code>3!</code>) が再帰的に計算される。 **** ... ***** 最終的に、<code>1</code> の階乗 (<code>1!</code>) が計算されて <code>1</code> がスタックにプッシュされる。 **** <code>5 *</code>: <code>5</code> と <code>4!</code> の結果を掛けて <code>120</code> がスタックにプッシュされる。 *** <code>5 *</code>: <code>5</code> と <code>120</code> の結果を掛けて <code>120</code> がスタックにプッシュされる。 * <code>. (dot)</code> コンパイラワ ==== 最大公約数(GCD) ==== 再帰的にユークリッドのアルゴリズムを使用して最大公約数(Greatest Common Divisor, GCD)を計算します。 :<syntaxhighlight lang=forth> : gcd ( u1 u2 -- gcd ) dup 0= if \ スタックのトップの値が0かどうかをチェック drop \ スタックのトップの値が0ならば削除して終了 else swap over mod recurse \ スタックのトップと2番目の値を入れ替えて、modを計算し再帰的に呼び出す then ; </syntaxhighlight> このプログラムの動作をステップごとに説明します: # <code>dup 0=</code>: スタックのトップの値(<code>u1</code>)が0かどうかをチェックします。 #* もし0ならば、<code>drop</code> が実行されて、スタックのトップの値(<code>u1</code>)が削除されます。この場合は再帰の終了条件となります。 # <code>else</code>: もしスタックのトップの値(<code>u1</code>)が0でない場合は、次の操作が実行されます。 # <code>swap over mod recurse</code>: #* <code>swap</code>: スタックのトップと2番目の値を入れ替えます。これにより、<code>u1</code> と <code>u2</code> の値が入れ替わります。 #* <code>over</code>: スタックの2番目の値(入れ替え前の <code>u1</code>)をスタックのトップにコピーします。 #* <code>mod</code>: スタックのトップの2つの値を取り出して、<code>u1 % u2</code>(<code>u1</code> を <code>u2</code> で割った余り)を計算し、その結果をスタックにプッシュします。 #* <code>recurse</code>: 自身の <code>gcd</code> を再帰的に呼び出します。これにより、新しい <code>u1</code> と <code>u2</code> の値がスタックに積まれ、再帰的に最大公約数が計算されます。 # <code>then</code>: <code>if</code> ブロックの終了を示します。 例えば、<code>12 18 gcd .</code> を実行すると、以下のように動作します: * <code>12</code> と <code>18</code> がスタックにプッシュされます。 * <code>gcd</code> が呼び出されます。 ** <code>dup 0=</code>: <code>18</code> は0ではないので、次の処理に進みます。 ** <code>swap over mod recurse</code>: <code>18</code> と <code>12</code> が入れ替わり、<code>18 % 12</code> が計算されます(余りは <code>6</code>)。 ** <code>gcd</code> が再帰的に呼び出され、新しい値 <code>12</code> と <code>6</code> がスタックにプッシュされます。 *** <code>dup 0=</code>: <code>6</code> は0ではないので、次の処理に進みます。 *** <code>swap over mod recurse</code>: <code>6</code> と <code>12</code> が入れ替わり、<code>6 % 12</code> が計算されます(余りは <code>6</code>)。 *** <code>gcd</code> が再帰的に呼び出され、新しい値 <code>6</code> と <code>6</code> がスタックにプッシュされます。 **** <code>dup 0=</code>: <code>6</code> は0ではないので、次の処理に進みます。 **** <code>swap over mod recurse</code>: <code>6</code> と <code>6</code> が入れ替わり、<code>6 % 6</code> が計算されます(余りは <code>0</code>)。 **** <code>0=</code>: <code>0</code> が0なので、<code>drop</code> が実行されて、スタックのトップの値 <code>0</code> が削除されます。 * 最終的に、スタックのトップには <code>6</code> が残ります。これが <code>12</code> と <code>18</code> の最大公約数です。 したがって、<code>12 18 gcd .</code> を実行すると、<code>6</code> が表示されます。 === 変数の宣言・代入と参照 === Forthにおける <code>VARIABLE</code> は、変数を定義するためのワードです。Forthでは、変数はメモリ内のアドレスに名前を関連付ける方法で定義されます。 以下は、<code>VARIABLE</code> を使用して変数を定義する方法とその使い方の例です。 ==== <code>VARIABLE</code> の使用方法 ==== <code>VARIABLE</code> は以下のように使用します: :<syntaxhighlight lang=forth> VARIABLE my-var \ my-var という名前の変数を定義する </syntaxhighlight> この行は、名前が <code>my-var</code> の変数を定義します。この変数はメモリ内の特定のアドレスに関連付けられます。 ==== 変数の使用方法 ==== 定義された変数を使用するには、<code>@</code>(fetch)や <code>!</code>(store)などのワードを使います。これらのワードを使って変数の値を取得したり設定したりできます。 - <code>@</code> は、変数の値をスタックにプッシュします。 - <code>!</code> は、スタックのトップの値を変数に代入します。 例えば、次のように変数に値を設定して取得します: :<syntaxhighlight lang=forth> 123 my-var ! \ 変数 my-var に値 123 を代入する my-var @ . \ 変数 my-var の値を表示する </syntaxhighlight> この例では、変数 <code>my-var</code> に <code>123</code> を代入し、その後 <code>@</code> を使って変数の値を取得して表示しています。 ==== 実際の例 ==== 以下は、<code>VARIABLE</code> を使って変数を定義し、値を設定して取得する具体的な例です: :<syntaxhighlight lang=forth> VARIABLE my-var \ my-var という名前の変数を定義する 123 my-var ! \ 変数 my-var に値 123 を代入する my-var @ . \ 変数 my-var の値を表示する </syntaxhighlight> この例では、変数 <code>my-var</code> を定義し、<code>123</code> を代入してその値を表示しています。<code>!</code> で変数に値を設定し、<code>@</code> で変数の値を取得しています。 変数はプログラムでデータを保持する際に便利です。Forthでは、変数の値は直接メモリ上に代入されるため、効率的なデータ管理が可能です。 === 定数の定義と参照 === Forthの <code>CONSTANT</code> は、定数を定義するためのワードです。定数は変更されることのない値であり、プログラムの中で何度も使われる値を簡潔に表現するために使用されます。 ==== <code>CONSTANT</code> の使用方法 ==== <code>CONSTANT</code> は以下のように使用します: :<syntaxhighlight lang=forth> 123 CONSTANT my-const \ my-const という名前の定数を定義する </syntaxhighlight> この行は、名前が <code>my-const</code> の定数を定義し、その値を <code>123</code> に設定します。定数はプログラム中で使用される値を一元管理し、可読性を向上させます。 ==== 定数の使用方法 ==== 定義された定数は、その名前を使ってプログラム中で値を参照することができます。 :<syntaxhighlight lang=forth> my-const . \ 定数 my-const の値を表示する </syntaxhighlight> この例では、定数 <code>my-const</code> の値が表示されます。 ==== 実際の例 ==== 以下は、<code>CONSTANT</code> を使って定数を定義し、その定数を使用する具体的な例です: :<syntaxhighlight lang=forth> 123 CONSTANT my-const \ my-const という名前の定数を定義する my-const . \ 定数 my-const の値を表示する </syntaxhighlight> この例では、定数 <code>my-const</code> を <code>123</code> に設定し、その後定数の値を表示しています。 定数はプログラム中で共通の値を使い回す際に便利です。Forthの定数は一度定義されると値が変更されることはなく、プログラム全体で一貫性のある値を提供します。 === 基数 === Forthの <code>BASE</code> は、数値の基数(n進数のn)を設定するための変数です。Forthでは、数値の表現において基数を変更することができます。通常、Forthはデフォルトで10進数を使用しますが、<code>BASE</code> を変更することで他の基数(2進数、16進数など)で数値を表現することが可能です。 ==== <code>BASE</code> の使用方法 ==== <code>BASE</code> は以下のように使用します: :<syntaxhighlight lang=forth> 16 BASE ! \ 基数を16進数に設定する </syntaxhighlight> この行は、<code>BASE</code> の値を <code>16</code> に設定しています。これにより、その後の数値の表示や入力が16進数で行われるようになります。 ==== 基数の変更と数値の表現 ==== <code>BASE</code> を変更することで、その後の数値リテラルの表現が変わります。例えば、<code>BASE</code> を16進数に設定した場合、数値リテラルは16進数として解釈されます。 :<syntaxhighlight lang=forth> 16 BASE ! \ 基数を16進数に設定する FF . \ 16進数の255を表示する </syntaxhighlight> この例では、<code>BASE</code> を16進数に設定してから、<code>FF</code> を表示すると、16進数の <code>FF</code> (10進数の <code>255</code>)が表示されます。 ==== デフォルトの基数と再設定 ==== Forthのデフォルトの基数は10進数です。基数を変更した後は、必要に応じて再度基数を10進数に戻すことができます。 :<syntaxhighlight lang=forth> DECIMAL BASE ! \ 基数を10進数に戻す </syntaxhighlight> この行は、<code>BASE</code> を10進数に再設定しています。これにより、数値リテラルは再び10進数として解釈されるようになります。 よくある間違い: :<syntaxhighlight lang=forth> 10 BASE ! \ 基数を16進数から10進数に戻す??? </syntaxhighlight> : として基数を10に戻そうとするミスがあります。 : コードの 10 は16進数として解釈されるので基数は16のままです。 ==== 注意点 ==== <code>BASE</code> を変更すると、数値の解釈や表示が変わるため、基数の変更後には適切な基数に戻すことが重要です。また、<code>BASE</code> の値は変数として扱われるため、必要に応じて保存や復元することができます。 基数を変更することで、特定の基数で数値を扱うプログラムを簡単に記述することができます。 === イミディエイトワード === イミディエイトワード(immediate word)は、Forthプログラミング言語において特定の動作を持つワードの一種です。イミディエイトワードは、通常のワードとは異なり、コンパイル時ではなく実行時に直ちに処理されます。 以下は、イミディエイトワードの特性について詳しく説明します: # 実行時処理: #* イミディエイトワードは、定義された時点ではコンパイルされず、実行時に直ちに解釈および実行されます。 #* 通常のワード(コンパイルワード)は、単なるコンパイル時にスタックに動作を積むだけであり、後で実行されますが、イミディエイトワードは定義された時点ですぐに実行されます。 # 定義方法: #* イミディエイトワードは、<code>IMMEDIATE</code> を使用して定義されます。 #* これにより、そのワードが定義された直後に実行されるようにマークされます。 # 使用例: #* 例えば、<code>."</code>(ダブルクォートピリオド)はイミディエイトワードです。これは、コンパイル時ではなく実行時に文字列を表示します。 #* <code>: greeting ." Hello, world!" ;</code> という定義では、<code>. "</code>Hello, world!"<code> はコンパイル時に実行されず、</code>greeting` を実行したときに実行されます。 # 動的な挙動: #* イミディエイトワードは、通常のワードとは異なり、実行時の環境やスタックの状態に応じて動的に振る舞います。 #* これにより、実行時に動的なテキストや操作を生成するために使用することができます。 イミディエイトワードは、Forthの柔軟性と強力な動的な特性を提供します。コンパイル時に制御構造や動作を決定するだけでなく、実行時に動的な挙動を持つことができます。 {{コラム|Forthの文法|2=Forthのプログラムは、空白文字で区切られた「ワード」の並びで構成されます。ワードには、数値リテラル、制御構造、演算子、そして他のワードを呼び出す構文などがあります。Forthには高水準の構文がなく、基本的な構文要素は非常にシンプルです。 例えば、<code>2 3 +</code> と入力すると、2と3がスタックにプッシュされ、最後の<code>+</code>がスタック上の2つの数値を加算します。この結果である5がスタックに残ります。つまり、Forthではプログラムの実行とデータ操作が、ワードの解釈とスタック操作によって行われるのです。 Forthは、基本的に行指向の言語です。プログラムは複数行に分割できますが、改行の前後で文が継続する場合は、スペースを入れる必要があります。このため、適切なインデントを使ってプログラムの構造をわかりやすくすることが重要です。 }} == データ型 == Forthには明示的なデータ型宣言がないため、データ型は主に暗黙的に扱われます。Forthでは、データ型はデータの解釈や使用方法に依存します。以下では、Forthでよく使用されるデータ型について説明します。 === セル(Cell) === セルは、通常2バイトまたは4バイトのサイズを持つ整数型です。Forthの基本的なデータ型であり、スタックやメモリ内のデータはセル単位で扱われます。セルのサイズは実装によって異なる場合があります。 === 符号付き整数(Signed Integer)と符号なし整数(Unsigned Integer) === Forthは整数を符号付きとしても、符号なしとしても扱うことができます。通常はセル内のビットパターンに基づいて解釈されます。算術演算や比較演算などが適用されますが、具体的な整数型に明示的に制限はありません。 === 文字(Character) === Forthでは文字は通常、符号なし整数として扱われます。ASCII文字セット内の範囲(通常は0から255)の数値として表現されます。文字に対する演算は、数値としての操作として扱われます。 === 文字列(String) === 文字列はカウント付き文字列(Counted String)やnull終端文字列(Null-terminated String)として表現されることがあります。カウント付き文字列では、最初のバイトが文字列の長さを示し、その後に文字のデータが続きます。文字列は通常、メモリ上の連続した領域に格納されます。文字列の操作には、<code>WORD</code>、<code>FIND</code>、<code>C"</code>などの専用のワードが用意されています。 === アドレス(Address) === Forthではアドレスも整数として扱われます。アドレスはメモリ上の位置を示す整数値であり、アドレス演算は通常の整数演算と同様に行われます。アドレス演算には、<code>CHAR+</code>、<code>CELLS</code>、<code>FLOAT+</code>などの専用のワードが用意されています。 === データ型の制約と振る舞い === Forthでは、データ型に関する制約やチェックはコンパイラやランタイムによっては'''行われません'''。プログラマはデータを正しく扱う責任があります。特にプログラムの移植性を考慮する場合は、適切なデータ型の使用が重要です。 データ型はForthの柔軟性とパフォーマンスの両方をサポートするため、プログラマに柔軟性と責任を与えます。それぞれのアプリケーションや環境に応じて、適切なデータ型を選択することが重要です。 == 浮動小数点数 == Forthの浮動小数点数についての情報は、Forth-2012仕様におけるオプションの浮動小数点数ワードセットに関連しています。以下にその内容の要点をまとめます。 ; 浮動小数点数の基本 :* 浮動小数点数は、<code>DECIMAL</code>の<code>BASE</code>で入力する必要があります。任意の基数での浮動小数点数の入力は許可されていません。 :* 標準システムで解釈されるすべての浮動小数点数には、指数インジケーター "E" を含める必要があります。 :;浮動小数点数の例 ::<syntaxhighlight lang=forth> 1e 3.14e 1.2e3 1e9 </syntaxhighlight> ; 浮動小数点数のフォーマットと範囲 :* 浮動小数点数の有効桁数や指数のフォーマット、範囲は、Forth-2012では実装に依存します。IEEE浮動小数点数フォーマットが一般的に使用されています。 ; 浮動小数点数のワードセット :* Floating-Point Extensionsワードセットには、<code>DF@</code>、<code>SF@</code>、<code>DF!</code>、<code>SF!</code>などのワードが含まれています。これらは、倍精度および単精度のIEEE浮動小数点フォーマットの数値をメモリに格納するためのものです。 ; 浮動小数点数の入力 :* 浮動小数点数をASCII形式で入力するためには、<code>>FLOAT</code>ワードが使用されます。これは、標準Forthシステムや他の広く使用されるプログラミング環境からデータを受け入れるために広範な構文を許容します。 ; 実装の注意点 :* カスタムの浮動小数点数データ構造を定義する際には、アドレスの整列(alignment)に注意する必要があります。<code>CREATE</code>が適切な浮動小数点数の整列を行わない場合は、コンパイル時および実行時に適切な整列を指定する必要があります。 == ローカル変数 == ForthのOPTIONAL Locals word set(ローカルワードセット)は、Forthのプログラミングでローカル変数を定義するための機能を提供します。以下は、このワードセットに関する情報の要約です。 ; ローカル変数の定義方法 :* <code>(LOCAL)</code> ワードや <code>LOCALS|</code> ワードを使用して、ローカル変数を定義します。 :* <code>{ ... }</code> または <code>{: ... :}</code> の表記を使用して、ローカル変数を囲みます。<code>: ... :</code> の形式は、他のシステムとの名前の衝突を避けるための妥協形式です。 ; ローカル変数の種類 :* ローカル変数は、初期化されたものと初期化されていないものに分けられます。初期化されたローカル変数はデータスタックから実行時に初期化されます。 ; 定義の終了 :* ローカル変数の定義は <code>--</code> もしくは <code>:}</code> で終了します。これにより、ローカル変数の定義中に完全なスタックコメントを記述することが可能です。 ; 文法と慣習 :* ローカル変数の引数と値の区切りには <code>|</code> を使用しますが、他のシステムでは <code>{ ... }</code> の表記が競合する場合があります。 :* 実装によっては、別の区切り文字(例: <code>\</code>, <code>¦</code>)を使用する場合がありますが、移植性を確保するためには <code>|</code> の使用が推奨されます。 ; 予約事項 :* ローカル変数の名前には、特定の文字(<code>:</code>、<code>[</code>、<code>^</code>)で終わる名前は予約されています。 Forthのローカル変数機能は、実装によって異なる場合がありますが、一般的な慣習として、<code>(LOCAL)</code> や <code>{: ... :}</code> の表記が広く使用されています。移植可能なプログラムを書く場合は、このような慣習に準拠することが重要です。 == ファイル操作 == Forthのファイル操作に関連するオプションのワードセットである「File-Access」についての情報を要約します。 === ファイル操作の機能 === # '''CREATE-FILE''' (<code>CREATE-FILE</code>) #* ファイルを作成するためのワードです。 #* 例: <code>S" TEST.FTH" R/W CREATE-FILE ABORT" CREATE-FILE FAILED" ;</code> # '''OPEN-FILE''' (<code>OPEN-FILE</code>) #* ファイルをオープンするためのワードです。 #* 例: <code>S" TEST.FTH" R/W OPEN-FILE ABORT" OPEN-FILE FAILED" ... ;</code> # '''READ-FILE''' (<code>READ-FILE</code>) #* ファイルからデータを読み込むためのワードです。 #* 典型的なシーケンシャルなファイル処理アルゴリズム: #:<syntaxhighlight lang=forth> BEGIN ... READ-FILE THROW ?DUP WHILE ... REPEAT </syntaxhighlight> # '''READ-LINE''' (<code>READ-LINE</code>) #* ファイルから行単位でデータを読み込むためのワードです。 #* 典型的な行指向のシーケンシャルなファイル処理アルゴリズム: #:<syntaxhighlight lang=forth> BEGIN ... READ-LINE THROW WHILE ... REPEAT DROP </syntaxhighlight> # '''INCLUDE''' (<code>INCLUDE</code>) #* 指定されたファイルを読み込んで実行するためのワードです。 #* 例: <code>INCLUDE filename</code> # '''REQUIRE''' (<code>REQUIRE</code>) #* 指定されたファイルを読み込んで実行するためのワードです。 #* 例: <code>REQUIRE filename</code> # '''REQUIRED''' (<code>REQUIRED</code>) #* 指定されたファイルを読み込んで実行するためのワードです。 #* 例: <code>S" filename" REQUIRED</code> === ファイル操作の注意事項 === * ファイルを再利用する際は、前のファイルのブロックバッファをフラッシュして、誤った関連付けを避ける必要があります。 * <code>S"</code> や <code>S\"</code> で使用される一時バッファは、2つの連続する文字列を格納できるようにする必要があります。バッファが不足している場合は、最も古いバッファを上書きすることができます。 == 例外処理 == Forthの例外処理に関する情報を要約します。 Exception word set はオプショナルなので、実装していない処理系もありえます。 === CATCH と THROW === * '''CATCH''' (<code>CATCH</code>): 例外ハンドリングの開始をマークします。CATCH ブロック内のコードが例外を THROW すると、CATCH は例外コードをキャッチして対応する処理を行います。 * '''THROW''' (<code>THROW</code>): 例外を発生させ、対応する CATCH ブロックに制御を戻します。例外コードが与えられると、THROW は対応する CATCH のスタック状態を復元し、適切な処理を行います。 === 例外処理の重要性と利用法 === * '''例外処理の重要性''': ABORT などの状況でプログラムの制御を維持するために例外ハンドラを使用します。 * '''例外処理の利用法''': 例外処理は、ファイルのテキスト解釈中に発生した例外をキャッチしてファイルをクローズするなど、プログラムの安全な実行を保証します。 === 具体例 === :<syntaxhighlight lang=forth> : could-fail ( -- char ) KEY DUP [CHAR] Q = IF 1 THROW THEN ; : do-it ( a b -- c) 2DROP could-fail ; : try-it ( --) 1 2 ['] do-it CATCH IF ( x1 x2 ) 2DROP ." There was an exception" CR ELSE ." The character was " EMIT CR THEN ; : retry-it ( -- ) BEGIN 1 2 ['] do-it CATCH WHILE ( x1 x2) 2DROP ." Exception, keep trying" CR REPEAT ( char ) ." The character was " EMIT CR ; </syntaxhighlight> * <code>could-fail</code>: キーボードからキーを読み取り、特定の条件で例外を発生させます。 * <code>do-it</code>: 例外を発生させる可能性のある処理を行います。 * <code>try-it</code>: <code>do-it</code> を実行し、例外が発生した場合は例外メッセージを表示します。 * <code>retry-it</code>: <code>do-it</code> を実行し、例外が発生した場合はリトライし続けます。 == 実行トークン == Forthにおける実行トークン(Execution Token; xt)は、ワード(Word)や定義体(Definition)の実行を指示するためのデータ構造です。実行トークンは、コードワードを指すための一意の識別子として機能します。以下は、Forthの実行トークンについての詳細です。 ; 実行トークンの定義 : 実行トークンは、通常、ワードや定義体の実行を示すために使用される整数またはポインタです。これは通常、コンパイラやインタプリタ内部で使用され、特定のワードや定義体を表す一意の識別子として機能します。 ; 実行トークンの使用 : Forthのコードは、実行トークンを使用してワードや定義体を実行します。実行トークンは通常、スタックや辞書(Dictionary)に格納され、必要なときに取り出されて使用されます。 ; ' (Tick) 記号 : 一般的なForthのプログラミングスタイルでは、実行トークンを取得するためにシングルクォート(')記号が使用されます。例えば、<code>' DUP</code> は <code>DUP</code> ワードの実行トークンを取得します。 ; 実行トークンと定義体の関連付け : 実行トークンは、定義体やコードワードと関連付けられます。通常、辞書内のワードエントリは、そのワードの実行トークンを参照します。これにより、プログラムは実行トークンを使用して、辞書内のワードを特定して実行することができます。 ; ランタイムスタックとの関係 : Forthのランタイムスタックは、実行トークンを使用してコードを実行します。コンパイルされたForthコードは、ランタイムスタック上で実行トークンを取り出して、対応するワードや定義体を実行します。 ; 実行トークンの特徴 : 実行トークンは、Forthの柔軟性と効率性を向上させるために使用されます。コンパイラやインタプリタは、実行トークンを介してワードを効率的に実行し、辞書の管理を行います。 ; 実行トークンの安全性 : Forthでは、実行トークンは通常、ユーザーからは直接操作されず、コンパイラやランタイムシステム内部で使用されます。これにより、実行トークンを誤って操作することがなく、安全なプログラミング環境が提供されます。 Forthの実行トークンは、言語の内部実装の詳細を隠蔽し、プログラマに柔軟性と効率性を提供する重要な概念です。 == コンパイル時ワード == Forthには、コンパイル時に処理される特殊なワードがあります。これらをコンパイル時ワードと呼びます。 主なコンパイル時ワードには以下のようなものがあります: # コンパイル時の定義操作 #* <code>:</code> (コロン) - 新しい定義を開始する(<code>:</code>自身は通常の逐次ワード) #* <code>;</code> (セミコロン) - 定義を終了しコンパイルモードを抜ける #* <code>CONSTANT</code>、<code>VARIABLE</code>、<code>DEFER</code> - 定数、変数、遅延定義を作成する # コンパイル時の制御 #* <code>IF</code>、<code>ELSE</code>、<code>THEN</code>、<code>BEGIN</code>、<code>UNTIL</code> など - 条件分岐やループなどの制御構造を定義する #* <code>LITERAL</code> - スタックトップの値をコンパイル時に埋め込む # その他のコンパイル時操作 #* <code>IMMEDIATE</code> - 定義をすぐに実行されるように指定する #* <code>[COMPILE]</code> - 次のワードをコンパイル時に実行する #* <code>POSTPONE</code> - 次のワードの実行トークンをコンパイルする これらのコンパイル時ワードは、Forthのプログラムの構造を定義したり、実行時の振る舞いを制御したりするために使われます。 通常のワードとは異なり、これらのコンパイル時ワードはコンパイル時に処理され、実行時には特殊な動作をするようになっています。これにより、Forthのプログラミングモデルを柔軟に拡張することができます。 == 辞書 == Forthの辞書に関する情報を要約します。 ; 辞書と名前空間 :* '''名前空間''': Forthの辞書は名前空間を提供します。標準プログラムは非標準の定義で標準ワードを再定義することができますが、その結果は標準システムではなくなります。 :* '''定義名''': 標準プログラムが使用する外部要素が標準システムで提供されていない場合、実行環境に依存する可能性があります。 ; コード空間とデータ空間 :* '''データ空間''': Forthシステムのデータ空間は不連続な領域に分かれています。複数の領域の配置については標準プログラムは仮定できません。 :* '''アドレスの整列''': アクセス命令によって使用されるアドレスにはアライメント制約があります。例えば、16ビットのデータは偶数アドレスにのみ保存される必要があるなどの制約があります。 ; 他の情報 :* '''一貫したアドレス''': データ領域の一貫性は、領域内でのアドレス演算を有効にします。 ; Contiguous regions(連続領域) Forthではデータ空間が連続しているという考え方があります。つまり、データ領域は一つの連続したブロックとして扱われますが、実際にはそのデータ空間は複数の部分から構成されていることがあります。 一般的なForthシステムでは、データ空間は複数の領域に分かれており、これらの領域は連続性を持ちますが、その間に他の種類の領域が存在する場合もあります。このような設計は、Forthシステムのメモリ管理において重要な役割を果たします。 例えば、以下のようなForthのコードで連続領域を確保することができます: :<syntaxhighlight lang=forth> CREATE MY-ARRAY 100 CELLS ALLOT </syntaxhighlight> この例では、100つのセル(通常はセルは1つのワードに対応します)を連続して確保しています。これにより、MY-ARRAYは連続した100個のセルを格納する領域を持つことになります。このようにして連続領域を確保することで、アドレス算術を利用してデータにアクセスすることができます。 Forthの連続領域の管理は、<code>CREATE</code>や<code>ALLOT</code>、<code>DOES></code>などの単語を使用して行われます。これらの単語を組み合わせてデータ構造を定義し、連続領域を動的に割り当てることができます。 これらの情報は、標準プログラムのポータビリティと安全性を確保するために重要です。具体的な実装や制約については、詳細なFor仕様書を参照してください。 == データ構造とメモリ管理 == Forthは組み込みシステムなどのリソース制約の厳しい用途を想定して設計されているため、メモリの効率的な利用が重視されています。この章では、Forthにおけるデータ構造とメモリ管理の方法を説明します。 === コントロールフロースタック === コントロールフロースタックとは、Forthのプログラムの制御フローを管理するために使用される仮想的なスタックです。 その主な役割は以下の通りです: # 制御フロー命令の対応関係の管理 #* 制御フロー命令(<code>IF</code>, <code>THEN</code>, <code>ELSE</code>, <code>BEGIN</code>, <code>WHILE</code>, <code>REPEAT</code> など)の対応関係を管理します。 #* 開始と終了の命令が適切に対応していることを確認します。 # 制御フロー中のデータスタック操作の制約 #* 制御フロー中のデータスタックの使用方法に制約を課します。 #* 制御フロー命令の入れ子関係に応じて、適切なデータスタックの状態が維持されるようにします。 コントロールフロースタックは物理的に実装されていなくても良いと仕様で定められています。 代わりに、システムはコンパイル時や実行時にこのスタックの挙動を模倣する方法を採ることができます。 つまり、コントロールフロースタックはForthの制御構造の妥当性を保証する上で重要な概念であり、プログラムの正しい実行を支えているのです。 通常のプログラミングでコントロールフロースタックを強く意識することはありませんが、制御構造を自らワードとして定義しようとする場合、コントロールフロースタックの振る舞いに注意する必要があります。 === リターンスタック === Forthには、データスタックとは別に、リターンスタックと呼ばれる重要なスタックが存在します。リターンスタックの主な役割は以下の通りです: # 関数呼び出しとリターン #* 関数を呼び出すとき、その関数の呼び出し元の命令アドレスがリターンスタックにプッシュされます。 #* 関数から抜け出すときは、リターンスタックからアドレスがポップされ、その場所に制御が戻されます。 #* これによって、関数呼び出しの際の制御の移動を管理することができます。 # 一時的データ保管 #* リターンスタックは、データを一時的に保管する場所としても使えます。 #* データスタックからデータを>Rでリターンスタックにプッシュし、後でR>で取り出すことができます。 #* これにより、データスタックの状態を一時的に変更せずに、値を保持しておくことができます。 リターンスタックの使用には注意点があります: * ワード内やループ内では、<code>>R</code>と <code>R></code>の回数が一致している必要があります。 * リターンスタックの値は、同じブロック内でのみ参照・取り出しできます。 * ループの脱出時やDO-ループ内からは、リターンスタックの値を取り出せません。 つまり、リターンスタックは制御フローの管理と一時的なデータ保管に使われますが、その使い方には一定の制限があるため、注意深く扱う必要があります。 プログラムの複雑さが増すと、リターンスタックの状態を適切に管理することが難しくなるため、できるだけ単純な使い方に留めるのが賢明です。 ; <code>>R ( x -- ) ( R: -- x )</code> : データスタックから値をポップしリターンスタックにプッシュする ; <code>R> ( R: -- x ) ( x -- )</code> : リターンスタックから値をポップしデータスタックにプッシュする ; <code>R@ ( -- x ) ( R: x -- x )</code> : リターンスタックのスタックトップをデータスタックにコピーする ; <code>2>R ( x1 x2 -- ) ( R: -- x1 x2 )</code> ; <code>2R> ( -- x1 x2 ) ( R: x1 x2 -- )</code> ; <code>2R@ ( -- x1 x2 ) ( R: x1 x2 -- x1 x2 )</code> スタックエフェクトに <code>R:</code> という新しい記号が出てきましたが、これはリターンスタックへの操作をしまします。このためリターンスタックはRスタックとも呼ばれています。 === 変数とアドレス指定 === Forthには、グローバル変数やローカル変数の概念がありません。代わりに、値を格納するためのメモリ領域を確保し、そのアドレスを使ってアクセスします。<code>VARIABLE</code>ワードを使うと、新しい変数領域が確保され、その開始アドレスがスタックに置かれます。 :<syntaxhighlight lang=forth> VARIABLE COUNTER \ カウンター変数を定義 COUNTER @ . \ 変数の値を表示(初期値は0) 1 COUNTER +! \ 変数にインクリメント </syntaxhighlight> 変数の値を取り出すには<code>@</code>(フェッチ)、格納するには<code>!</code>(ストア)を使います。<code>+!</code>のように算術演算と<code>!</code>を組み合わせたワードもあります。 Forthではアドレスを直接スタックに置いて操作することもできます。<code>HERE</code>はディクショナリの次の空きアドレスを取得し、<code>ALLOT</code>はディクショナリ領域を確保します。 ==== データスペース(Data Space) ==== Forthのデータスペースとは、メモリ内の連続した領域を指し、データやワードの定義などが格納される場所です。Forthでは、データスペースは主に '''ヒープ(heap)''' と '''ディクショナリ(dictionary)''' の2つの領域に分かれています。 * '''ヒープ''': データスタックやワードの実行時に使用される一時的な領域です。ここでは、動的に割り当てられたデータや一時的な計算に使用されるデータが保持されます。 * '''ディクショナリ''': ワード(ワード)の定義やその実装が格納される領域です。Forthのディクショナリはワードの名前とそれに対応する実行可能なコードへのポインタを保持します。 ==== <code>HERE</code> ワード ==== <code>HERE</code> はForthで使用される特定のワードであり、現在のデータスペース内の「ここ(here)」の位置を示します。具体的には、ディクショナリ内の次の空き領域の先頭アドレスを指します。 <code>HERE</code> を使用すると、新しいワードやデータをデータスペースに格納する際に位置を特定することができます。主にワードの定義やデータの動的な確保に使用されます。 例えば、新しい変数や配列を定義する場合、<code>HERE</code> の値を参照して適切なメモリ領域を割り当て、その後 <code>HERE</code> を更新します。 具体的な使用例を示します: :<syntaxhighlight lang=forth> HERE . \ 現在のHEREの値を表示(ディクショナリ内の次の空き領域のアドレス) 10 ALLOT \ 10バイトの領域を確保 HERE . \ 確保後のHEREの値を表示 </syntaxhighlight> この例では、まず <code>HERE</code> の値が表示され、次に <code>10 ALLOT</code> によって10バイトの領域が確保されます。その後、再度 <code>HERE</code> の値が表示され、確保された領域の終端アドレスが示されます。 <code>HERE</code> を適切に使用することで、動的なメモリ管理やデータスペースの操作が行えます。 ==== HEREを利用したデータスペースの活用例 ==== ; sieve.fr :<syntaxhighlight lang=forth> : prime? ( n -- ? ) here + c@ 0= ; : composite! ( n -- ) here + 1 swap c! ; : sieve ( n -- ) here over erase 2 begin 2dup dup * > while dup prime? if 2dup dup * do i composite! dup +loop then 1+ repeat drop ." Primes: " 2 do i prime? if i . then loop ; 100 sieve / Primes: 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 </syntaxhighlight> このForthのコードは、エラトステネスの篩(Sieve of Eratosthenes)アルゴリズムを実装しています。このアルゴリズムは、与えられた数 <code>n</code> 以下のすべての素数を見つけるために使用されます。以下では、与えられたコードの各部分を詳しく説明します。 ; <code>prime?</code> ワード :<syntaxhighlight lang=forth> : prime? ( n -- ? ) here + c@ 0= ; </syntaxhighlight> :; <code>( n -- ? )</code>: スタックから整数 <code>n</code> を取り出し、その数が素数であるかどうかの真偽値 <code>?</code> をスタックに積む。 :* <code>here + c@</code>: <code>here</code> は現在のデータスペースの末尾を示し、それに <code>+</code> を使ってワードの<code>n</code>番目のアドレスを取得する。そして <code>c@</code> はそのアドレスの内容(1バイトの文字)を取得する。 :* <code>0=</code>: 取得したバイトが0かどうかをチェックし、0ならば真(素数)を返す。 ; <code>composite!</code> ワード :<syntaxhighlight lang=forth> : composite! ( n -- ) here + 1 swap c! ; </syntaxhighlight> :; <code>( n -- )</code>: スタックから整数 <code>n</code> を取り出す。 :* <code>here + 1 swap c!</code>: <code>here</code> から<code>n</code>のアドレスにを1を1バイトで書き込む。 ; <code>sieve</code> ワード :<syntaxhighlight lang=forth> : sieve ( n -- ) here over erase 2 begin 2dup dup * > while dup prime? if 2dup dup * do i composite! dup +loop then 1+ repeat drop ." Primes: " 2 do i prime? if i . then loop ; </syntaxhighlight> :; <code>( n -- )</code>: スタックから整数 <code>n</code> を取り出す。 :* <code>here over erase</code>: 現在のデータスペース(<code>here</code> から先)を <code>n</code> バイト分消去する。 :* <code>2 begin ... repeat</code>: メインのループ。2から始めて、以下の条件に基づいて処理を繰り返す。 :** <code>2dup dup * ></code>: 現在の値を2つコピーし、2つを掛けた値が <code>n</code> を超えるまで続ける。 :** <code>dup prime? if ... then</code>: 現在の値が素数かどうかをチェックし、素数ならば以下を実行。 :*** <code>2dup dup * do ... dup +loop</code>: 素数の場合、その数の倍数を篩い落とす。内側のループで、その数の倍数を全て <code>composite!</code> でマークする。 :** <code>1+</code>: 現在の数値を1増やす。 :* <code>drop</code>: 最後の数値を削除する。 :* <code>." Primes: " 2 do i prime? if i . then loop</code>: 素数を表示するループ。2から始まり、<code>n</code> まで続ける。各数値が素数ならば表示する。 ; 実行 :<syntaxhighlight lang=forth> 100 sieve </syntaxhighlight> :100以下の素数を見つけるために <code>sieve</code> ワードが実行されます。 === CREATEを使った変数と配列の定義 === Forthの <code>CREATE</code> は、新しい変数や配列をディクショナリに定義するためのワードです。<code>CREATE</code> を使うことで、任意の名前で参照可能なデータ領域を確保し、その領域に対する操作を定義することができます。 以下に、<code>CREATE</code> ワードの基本的な構文と使用方法を示します。 ==== 構文 ==== :<syntaxhighlight lang=forth> CREATE name </syntaxhighlight> * <code>name</code>: 定義する変数や配列の名前を指定します。 ==== 使用方法 ==== # 変数の定義 #:<code>CREATE</code> を使って変数を定義する場合、単に変数の初期値を指定します。 #:<syntaxhighlight lang=forth> CREATE my-var 42 , </syntaxhighlight> #:上記の例では、<code>my-var</code> という名前の変数が定義され、初期値として <code>42</code> が設定されています。<code>,</code> はスタックのトップの値を <code>my-var</code> の定義領域に格納するワードです。 # 配列の定義 #: <code>CREATE</code> を使って配列を定義する場合、配列の要素数や初期値を指定します。 #:<syntaxhighlight lang=forth> CREATE my-array 5 ALLOT </syntaxhighlight> #: 上記の例では、<code>my-array</code> という名前の配列が定義され、5つの要素分の領域が確保されます。各要素には初期値が与えられていないため、初期化が必要な場合は別途行います。 ==== 使用例 ==== このForthのコードは、<code>CREATE</code> を使って変数と配列を定義し、それらに値を格納・表示する例です。 ; 変数の定義と使用 :<syntaxhighlight lang=forth> CREATE x \ 変数 x を定義 100 x ! \ x に 100 を代入 x @ . CR \ x の値を表示 </syntaxhighlight> * <code>CREATE x</code>: <code>x</code> という名前の変数を定義します。<code>CREATE</code> はディクショナリに新しいワードを登録しますが、データスペース自体は確保しません。 * <code>100 x !</code>: <code>x</code> のデータフィールドに <code>100</code> を格納します。 * <code>x @ . CR</code>: <code>x</code> のデータフィールドから値を読み取って表示します。<code>CR</code> は改行を出力します。 ; 配列の定義と使用 :<syntaxhighlight lang=forth> CREATE MY-ARY 100 ALLOT \ 100セルの配列を作成 42 MY-ARY 10 + ! \ 11番目の要素に42を代入 MY-ARY 10 + @ . \ 11番目の要素の値を表示 </syntaxhighlight> * <code>CREATE MY-ARY 100 ALLOT</code>: <code>MY-ARY</code> という名前の配列を定義し、100セル分のデータスペースを確保します。 * <code>42 MY-ARY 10 + !</code>: <code>MY-ARY</code> の11番目の要素(0から始まるインデックスなので、10を足します)に <code>42</code> を代入します。 * <code>MY-ARY 10 + @ .</code>: <code>MY-ARY</code> の11番目の要素の値を読み取って表示します。 この例では、<code>CREATE</code> を使って変数 <code>x</code> と配列 <code>MY-ARY</code> を定義し、それぞれに値を設定しています。<code>x</code> は単一の値を格納する変数であり、<code>MY-ARY</code> は複数の要素を持つ配列です。<code>!</code> を使ってデータを代入し、<code>@</code> を使ってデータを取得しています。 Forthの特性として、変数や配列の定義はディクショナリに登録されるため、名前に対して対応するデータ領域へのアクセスが可能となります。これにより、動的なデータ構造を効率的に管理することができます。 === アライメント === Forthの <code>ALIGN</code> ワードは、データ領域のアラインメントを行うためのワードです。アラインメントとは、データがメモリ上で配置される位置を調整することであり、特定のアドレス境界にデータを配置することを指します。 アラインメントの必要性は、プロセッサアーキテクチャに依存しますが、多くのアーキテクチャでは特定のデータ型(例:4バイト整数など)は特定の境界に配置される必要があります。アラインメントが正しく行われないと、メモリアクセスの効率が低下したり、アドレスエラーなどの例外が発生し処理を中断する可能性があります。 ; 構文 :<syntaxhighlight lang=forth> ALIGN </syntaxhighlight> ; 動作 : <code>ALIGN</code> ワードは、データスペースポインタ (<code>HERE</code>) をアラインメント条件に従って調整します。具体的には、通常は2バイトまたは4バイトの境界に <code>HERE</code> を調整します。これにより、次に確保されるデータ領域が適切な境界に配置されます。 ; 使用例 :<syntaxhighlight lang=forth> HERE ALIGN </syntaxhighlight> : 上記の例では、<code>HERE</code> の値をアラインメントされた位置に調整します。これにより、次に確保されるデータ領域が適切な境界に配置されます。 :<syntaxhighlight lang=forth> CREATE my-var ALIGN 2 ALLOT </syntaxhighlight> : この例では、<code>my-var</code> という名前の変数を定義していますが、そのデータ領域が2バイト境界にアラインメントされて確保されます。これにより、<code>my-var</code> のデータ領域は適切な境界に配置され、メモリアクセスの効率が向上します。 <code>ALIGN</code> ワードは、特定のアーキテクチャで必要なメモリアラインメントを確保するために重要な役割を果たします。メモリアクセスの効率を最大化するために、適切なアラインメントが常に考慮されるべきです。 == 入出力と組み込みワード == Forthには標準の入出力ワードがあり、コンソールやファイルからの入出力を行えます。また、様々な組み込みワードが用意されており、これらを活用することでForthの機能を拡張できます。 === 標準入出力 === Forthには、キーボードからの文字入力や、コンソールへの文字出力を行うためのワードが用意されています。 :<syntaxhighlight lang=forth> KEY \ キーボードから1文字読み込む EMIT \ スタック上の値(文字コード)を出力する ." \ 文字列を直接出力する </syntaxhighlight> <code>KEY</code>はキーボード入力を待ち、押された文字のASCIIコードをスタックに置きます。<code>EMIT</code>は逆に、スタック上の値を文字コードとして解釈し、コンソールに出力します。<code>." Hello"</code>のように、<code>."</code> の後に文字列を続けると、その文字列がコンソール出力されます。 数値入出力には、<code>?</code>、<code>U.</code>、<code>U.R</code>などのワードが使えます。<code>?</code>は数値を入力受け付け、<code>U.</code>は符号なし数値を、<code>U.R</code>は数値を指定した基数(2進数、16進数など)で出力します。 === ファイルアクセス === ファイル入出力には、様々なワードが用意されています。<code>OPEN-FILE</code>でファイルを開き、<code>READ-FILE</code>や<code>WRITE-FILE</code>でデータの読み書きができます。 :<syntaxhighlight lang=forth> S" data.txt" R/O OPEN-FILE THROW VALUE HANDLE \ ファイルを読み取りモードで開く HANDLE READ-FILE ABORT" READ ERROR" \ ファイルを読み込む HANDLE CLOSE-FILE THROW \ ファイルを閉じる </syntaxhighlight> ファイル名は、<code>S"</code> で文字列をスタックに置いた後、<code>R/O</code>(読み取り専用)や<code>W/O</code>(書き込み専用)といったモードを指定してファイルを開きます。<code>THROW</code>はエラーがあれば例外を発生させます。 <code>READ-FILE</code>や<code>WRITE-FILE</code>では、バッファ領域のアドレスと読み書きするバイト数をスタックに置く必要があります。 === 組み込みワードの利用 === Forthには、数学関数や論理演算、メモリ操作など、様々な組み込みワードが用意されています。必要に応じてこれらのワードを活用することで、プログラムにさまざまな機能を付加できます。 :<syntaxhighlight lang=forth> 2 3 MAX . \ 最大値(3)を出力 S" HELLO" SWAP DROP \ スタック操作サンプル HEX 1F20 4 DUMP \ メモリダンプ </syntaxhighlight> <code>MAX</code>は2つの数値の最大値を、<code>SWAP</code>は2つの値の順序を入れ替え、<code>DROP</code>は最上位の値を捨てます。<code>DUMP</code>は指定したアドレスからのメモリ内容をダンプ出力します。 組み込みワードには、浮動小数点演算、文字列処理、マルチタスク、IPCなど、様々な分野のものがあります。また、必要に応じてワードを自作したり、外部ライブラリからリンクしたりできます。Forthはコンパクトなシステムながら、組み込みワードの充実により高い機能性を発揮します。 == アプリケーション開発 == Forthは小規模な組み込みシステムから大規模なアプリケーションまで、幅広い用途に使用できる言語です。この章では、Forthにおけるアプリケーション開発の手法と、実例について解説します。 === モジュール化とワード管理 === Forthはワードをベースとしたモジュール性の高いプログラミングができます。大きなアプリケーションを開発する際は、適切にモジュール分割してワードを設計・管理することが重要です。 Forthにはネームスペースの概念がありません。そのため、ワード名の重複を避けるためには、プレフィックスなどの命名規則を定めることが一般的です。たとえば<code>STRING-LENGTH</code>のように、ワードの役割がわかるよう名前を付けます。 また、ワードをまとめてファイルに保存し、必要に応じて読み込む方法があります。Forthの多くの処理系は、ワードの定義をソースファイルに保存したり、メモリイメージを永続化したりできます。 :<syntaxhighlight lang=forth> MARKER MODULE>STRING : STRING-LENGTH \ 文字列の長さを求める ... ; : STRING-REVERSE \ 文字列を反転する ... ; STRING-REVERSESTRING-LENGTH +MODULE </syntaxhighlight> 作成したワードは<code>MODULE>NAME</code>でモジュール名を付け、<code>+MODULE</code>でモジュールを完成させることができます。他のソースから<code>USE MODULE>NAME</code>とすれば、そのモジュールのワードが使用可能になります。 大規模なシステムでは、このようなソースレベルの分割に加え、オーバーレイ、仮想メモリ、マルチタスク機能を活用することで、メモリの効率的な使用が可能です。 === グラフィックス処理 === Forthでもグラフィック処理が可能ですが、組み込みの機能は限られています。ほとんどの処理はユーザ定義ワードとして実装する必要があります。 ビットマップ画像の表示や、ウィンドウ、マウスカーソルなどの基本的なGUIの作成はある程度可能です。高度な3Dグラフィックスなどを実現するには、外部ライブラリを利用する必要があります。 :<syntaxhighlight lang=forth> NEED FRAMEBUFFER \ フレームバッファへのアクセスモジュール : DRAW-LINE ( x1 y1 x2 y2 -- ) \ ブレザンハムのアルゴリズムでライン描画 ... ; : DRAW-RECT ( x y w h -- ) 2SWAP 2>R 2R> \ (x y w h -- x y x+w y+h) DRAW-LINE 2>R 2R> DRAW-LINE 2SWAP DRAW-LINE 2SWAP DRAW-LINE ; FRAMEBUFFER-INIT \ グラフィックスサブシステムの初期化 100 100 300 200 DRAW-RECT \ 長方形を描画 </syntaxhighlight> 上記では、フレームバッファの制御関数がロードされた前提で、<code>DRAW-LINE</code>を使って<code>DRAW-RECT</code>(長方形描画)を実装しています。スタックを活用して座標値を受け渡し、基本的な幾何図形を描画しています。 Forthはグラフィックスパイプラインなどの高度な機能を組み込んでいませんが、スタックベースの処理により、低レベルのデバイスアクセスが可能です。組み込みシステムのディスプレイやLED制御など、グラフィックス関連の処理に適しています。 === システムプログラミング === Forthの本質的な特性として、システムプログラミングに適していることがあげられます。小規模でコンパクト、高速動作、低レベルなメモリアクセスが可能というメリットがあります。 OSカーネル、デバイスドライバ、BIOS、ブートローダなどの開発にForthは広く使われてきました。組み込みシステムでは、センサーやI/Oデバイスの制御に最適です。スタック指向のモデルにより、レジスタレベルの処理が直接かけるのも特徴です。 例えば、Forthを使ってブートローダを実装する場合には、次のようなプログラムになります。 :<syntaxhighlight lang=forth> HEX 07C0 INPORT DROP \ DOSデータ領域クリア 0800 0 20 MOVE \ リセットベクタ設定 KERNEL.IMG LOAD \ カーネル読み込み A000 OUTPORT \ VGAモードへ切り替え 1000 JMP \ カーネル実行 ... \ BIOSブート用の簡単なForth読み込みコード :KERNEL.IMG LOAD CORE SWAP CPU KERNEL ; </syntaxhighlight> BIOSなどの低レベル機能を呼び出してブートローダを構築する処理が、Forthの文法でコンパクトに記述できる様子がわかります。 また、Forth自身が小規模で可搬性が高いため、Forth処理系そのものもForthで書かれた簡単なコアを、ホストOSやアーキテクチャに合わせてセルフホスト (移植) する手法が一般的です。これは、アプリケーションと実行環境を一体化して開発できる利点があります。 == 高度なトピック == ここまでForthの基本的な構文と概念、データ構造、アプリケーション開発の実例などを解説してきました。この章では、Forthの高度な利用方法としてパフォーマンス最適化、マルチスレッド・マルチタスク、メタプログラミングについて取り上げます。 === 最適化とパフォーマンス === Forthはコンパクトで高速な言語ですが、さらなる最適化の余地があります。ワードの定義を工夫したり、ネイティブコードコンパイラを使ったりすることで、パフォーマンスを向上できます。 ワード定義の最適化では、冗長な演算を排除したり、インラインコーディングの手法を用いたりします。例えば、次のようなワード定義があるとします。 :<syntaxhighlight lang=forth> : MAX2 ( n1 n2 -- max ) 2DUP > IF SWAP DROP ELSE NIP THEN ; </syntaxhighlight> この<code>MAX2</code>は一時的に2つの値を複製(<code>2DUP</code>)し、<code>IF</code>..<code>ELSE</code>..<code>THEN</code>の条件分岐で最大値を選びます。しかし、この一時複製が無駄な演算となっています。次のように書くとコードがシンプルになります。 :<syntaxhighlight lang=forth> : MAX2 ( n1 n2 -- max ) OVER OVER > IF SWAP THEN ; </syntaxhighlight> ワードの最適化には一般的なテクニックがあり、Forthのコンパイラ作者から提案されているものを参考にするとよいでしょう。 また、Forthにはネイティブコードコンパイラと呼ばれるもので、ワードの実行コードをネイティブマシン語に変換できるものがあります。Forthの対話的な実行環境は便利ですが、ネイティブコードの方が高速に動作します。こうした最適化手法を使い分けることで、Forthのパフォーマンスを飛躍的に向上できます。 === マルチスレッドとマルチタスク === Forthには並列実行の機構が組み込まれていないため、マルチスレッドやマルチタスク処理を実現するにはユーザ定義の実装が必要です。しかし、Forthの言語特性を活かせばきわめてコンパクトな並列処理ができます。 マルチスレッドでは、スタックを分離し、スレッド毎にスタックのコピーを持つ手法が一般的です。スレッドの切り替えはスタックのコンテキストスイッチで実現できます。また、Forthのデータストアクセス方式を応用すれば、IPC(プロセス間通信)の仕組みを作ることもできます。 :<syntaxhighlight lang=forth> : NEW-TASK ( -- ) HERE CURRENT-STACK >R CREATE-STACK SWAP [: DO-SOME-WORK ;] ( compile: word behavior ) R> SET-CURRENT ; </syntaxhighlight> この例では、新しいタスクを作成するワード<code>NEW-TASK</code>を定義しています。<code>CREATE-STACK</code>でスタックを新しく割り当て、<code>DO-SOME-WORK</code>のようなワード定義をタスクとして登録します。実行時にはスケジューラによってこれらのタスクが実行されます。 マルチタスク機構を実装する例は多数あり、スレッド単位でデータを扱う方式、メッセージキューによる方式、それぞれ長所と短所があります。並列処理にはデッドロックなどの問題点もありますが、Forthではコンパクトでシンプルなコード記述が可能です。 === メタプログラミング === Forthにはプログラムを生成・変更するメタプログラミングの機能があり、コードを自動生成したり、プログラムを動的に変更したりできます。この機能は、Forthをドメイン固有言語(DSL)の開発などに適用できることを意味しています。 メタプログラミングには、コンパイル時に評価される構文<code>[...]</code>と実行時構文<code>EVAL</code>があります。どちらもプログラムをデータとして扱えるため、動的にプログラムを生成・変更できます。 :<syntaxhighlight lang=forth> : HILBERT-CURVE ( n -- ) 0 ?DO [: 2DUP RECURSE >R >R 1 HCURVE R> R> RECURSE 3 HCURVE ;] POSTPONE LITERAL POSTPONE HCURVE LOOP ; </syntaxhighlight> この例では、ヒルベルト曲線を描画するコードを動的に生成しています。<code>POSTPONE</code>はワードのコンパイルを遅延させ、<code>[: ... ;]</code>の構文はその間のテキストを実行可能なコードとしてコンパイルします。この手法により、 Hilbertカーブの次元(<code>n</code>)に応じて、その描画コードを生成しています。 Forthのメタプログラミング機能は、高度な用途に役立ちます。例えば、ユーザインターフェースビルダー、コードジェネレーター、プログラムシンセサイザなどでその力を発揮できます。Forthの柔軟性を最大限に活かせる側面といえるでしょう。 == サンプルプログラムとプロジェクト == Forthの理解を深めるには、実際にコードを書いて動作を確認することが大切です。この章では、様々なサンプルコードを紹介するとともに、実践的なForthプロジェクトの例を示します。 === 様々なサンプルコード === 以下はForthの基本的な機能を示すサンプルコード集です。 ; 再帰によるフィボナッチ数列 :<syntaxhighlight lang=forth> : FIB ( n -- fib-n ) DUP 0= IF DROP 1 EXIT THEN DUP 1 = IF DROP 1 EXIT THEN DUP 1- RECURSE SWAP 2 - RECURSE + ; </syntaxhighlight> ; 文字列操作 :<syntaxhighlight lang=forth> : UPPERCASE ( addr n -- addr n ) OVER + SWAP ?DO I C@ [CHAR] a [CHAR] z 1+ WITHIN IF [CHAR] A [CHAR] a - + THEN I C! LOOP ; : REVERSE-WORDS ( addr n -- ) [CHAR] \ SKIP SPACES OVER >R BEGIN OVER C@ [CHAR] \ <> WHILE [CHAR] \ PARSE DUP >R REVERSE R> OVER C! CHAR+ REPEAT R> DROP 2DROP ; </syntaxhighlight> ; ベクトル・行列計算 :<syntaxhighlight lang=forth> REQUIRE DOUBLE \ 倍精度浮動小数点サポート : VZEROS ( n -- addr ) \ n要素のゼロベクトルを生成 CREATE HERE 0 SWAP 8 * DUP ALLOT FILL ; : MZEROS ( rows cols -- addr ) \ rows x cols の零行列を生成 SWAP VZEROS SWAP 0 ?DO OVER VZEROS COLS + LOOP ; </syntaxhighlight> ; 簡易グラフィックス :<syntaxhighlight lang=forth> VARIABLE FRAMEBUF \ フレームバッファアドレス : PIXEL ( x y color -- ) \ 1ピクセル書き込み FRAMEBUF @ >R 2 * R@ + 3 * RP@ C!+ RP@ C!+ RDROP ; : LINE ( x1 y1 x2 y2 c -- ) \ ラインの描画 >R 2SWAP R> 2>R 2R@ PIXEL 2R> PIXELLINE ; </syntaxhighlight> これらの例は、スタックを使った処理の流れ、ユーザ定義ワードの作成、再帰など、Forthのプログラミング手法の基本を示しています。コンパクトながらも表現力の高さがわかるでしょう。 === 実践的なプロジェクト例 === 次に、もう少し大がかりなForthプロジェクトの例を紹介します。 ; Forth Chip-8 エミュレーター Chip-8はレトロなゲームコンソールで、Forthでその命令セットをエミュレートするプロジェクトです。グラフィックス、入力処理、命令デコーダなどを実装します。 ; カーネルとブートローダ ForthでOSカーネルの基本部分を実装し、ブートローダと合わせてシステムを構築するプロジェクト。メモリ管理、タスク管理、ファイルシステム、ドライバなどの機能が実装できます。 ; Webサーバー ForthでHTTPリクエストを処理するWebサーバーを作成。ソケット通信、文字列処理、ファイル入出力などの機能が必要になります。追加してWebアプリケーションフレームワークなども作れます。 ; オープンソースForthプロセッサ Forthを使ってCPU命令セットを記述し、ゲートレベルまでFPGAに実装するプロセッサの設計プロジェクト。ハードウェア記述言語との連携が重要です。 このようなプロジェクトを通して、Forthの実用性とシステムプログラミングでの可能性を体験できます。Forthという言語自体を使って、OSやハードウェアコンポーネントを実装できるのが最大の特徴です。いずれのプロジェクトも一般的な規模になると、モジュール分割やワード管理、ツール活用などの工夫が必要になります。 == 参考資料 == Forthについてより深く学ぶには、書籍や公開されているオンラインリソースを参照するのが有効な方法です。また、活発なForthコミュニティに参加することで、他の開発者からの助言を得られます。 === 関連書籍の紹介 === Forthの入門書から応用、さらには処理系の実装に至るまで、多くの優れた書籍が出版されています。 * 「Forth入門」レオ・ブロディ (ISBN:978-4875930297 工学社) ** Forth言語の基本から、アプリケーション開発までをカバーした長年の定番書。 * 「Thinking Forth」Leo Brodie (Punchy Publishing) / Forth思考 ―問題解決のための言語と哲学― レオ・ブロディー著 ** Forth哲学に重きを置いた名著。Forthの考え方を深く解説。 * 「Forth Programmer's Handbook」(ISBN:978-1419675492 Forth Inc.) ** ANS Forthの規格書で、WordSetの詳細が書かれている。 これらの書籍を手に入れられれば、Forthの理解が格段に進むはずです。電子書籍としても出版されているものがあります。 === オンラインリソース === {{Wikipedia}} インターネット上にも無料で参照できるForth関連の豊富なリソースが存在します。 * Forth Interest Group ( https://www.forth.org/ ) ** Forthに関する書籍、記事、リソースなどが集まるポータル。 * Forth-Standard-Committee 公式サイト( https://forth-standard.org/ ) Webサイト、ソースコード、ニュースレターなど、さまざまな形でリソースが公開されているので、活用していきたいものです。 === Forthコミュニティ === 長年にわたりForth言語を支える活発なコミュニティが存在し、開発者同士が支え合う環境があります。 * Newsgroups: comp.lang.forth ** ディスカッションの場となるForth専用のニュースグループ。 * 地域 Forth グループ ** ヨーロッパ、アメリカ、アジアなどの地域Forthグループ。 オンラインフォーラムやメーリングリスト、対面の勉強会など、様々な形でForth開発者同士が交流を深めています。初心者でもこうしたコミュニティに参加することで、サポートを受けられます。Forthの小さな世界ですが、地域を越えて開発が行われているのが特徴です。 Forthの参考文献やオンラインリソース、そしてコミュニティを上手く活用することで、この独特な言語の理解が一層深まるはずです。 == 脚註 == <references /> [[Category:Forth|*]] [[Category:プログラミング言語]] 8p64x6grd82pfx38ydh37mt2xxqkmwz 246677 246676 2024-04-14T03:19:40Z Ef3 694 /*制御フロースタック*/制御フロースタックは、Forthの制御構造の実装に使用されるメカニズムです。具体的には以下のような役割を果たします: 分岐命令の始点(origin)を記録する IF、AHEAD などの前方ジャンプ命令の始点を記録 分岐命令の終点(destination)を記録する BEGIN、AGAIN などの後方ジャンプ命令の終点を記録 分岐命令の始点と終点を解決する THEN でIF や AHEAD の始点を解決 AGAIN で BEGIN の終点を解決 制御フロースタックは、Forthの制御構造を実現するための中間表現として機能しています。プログラマはこの制御フロースタックの管理を意識することなく、高レベルな制御構造を記述できます。 実装方法は任意ですが、たとえばデータスタック、連結リスト、特殊な配列など、必要な操作ができる形で実現されます。重要なのは、制御構造の始点と終点が適切に記録・解決されることです。 この制御フロースタックを基に、IF-THEN、BEGIN-UNTIL、BEGIN-WHILE-REPEAT などの基本的な制御構造が構築されます。 wikitext text/x-wiki == はじめに == Forthはスタック指向のプログラミング言語であり、そのシンプルさと柔軟性から広く用いられています。 本書は、プログラマがForthを効果的に使いこなすための手引書として設計されています。例示や実践的なヒントが豊富に盛り込まれており、読者は理論を理解しながら実際のプロジェクトに応用できるでしょう。 本書を通じて、Forthの魅力と実力を十分に体感し、その利用価値を最大限に引き出すことができるでしょう。 本書では、ForthのCore Word Setに準拠した標準的なForthシステムを題材とします。 == Forthプログラミングの基礎 == Forthはスタック指向のプログラミング言語であり、独自の特徴を持っています。以下では、Forthプログラミングの基礎を解説します。 === スタック操作 === [[スタック構造|スタック]]は、Forthにおける中心的なデータ構造です。ほとんどのワードは、スタックから値を取り出したり、スタックに値を代入したりします。スタックは、後入れ先出し(LIFO; Last In First Out)のデータ構造で、Forthの演算はスタック上で行われます。 === 例 === 以下は、Forthでの簡単な計算の例です: :<syntaxhighlight lang=forth> 3 4 + . </syntaxhighlight> : まず<code>3</code>をスタックに置き、<code>4 + .</code> を解釈します。 : 次に、<code>4</code>をスタックに置き、<code>3 4</code> となり、<code>+ .</code> が残ります。 : そして、<code>+</code> はスタックのトップの2つの要素を加算して結果を戻し、スタックには<code>7</code>だけが残ります。 : 最後に、<code>.</code>(ドット)はスタックから<code>7</code>を取り除いてそれを表示します。 :{| |- !コード!!style='width:3em'| 3 !!style='width:3em'| 4 !!style='width:3em'| + !!style='width:3em'| . |- !スタックトップ |style="border:1px solid black; text-align:center"| 3 ||style="border:1px solid black; text-align:center"| 4 ||style="border:1px solid black; text-align:center"| 7 || |- ! | ||style="border:1px solid black; text-align:center"| 3 || || |- !出力 | || || ||style="text-align:center; font-weight: bold"| 7 |} === コメント === Forthでは、コメントは括弧で囲んで表現されます。例えば: :<syntaxhighlight lang=forth> ( これはコメントです ) </syntaxhighlight> <code>/</code> から行末までもコメントです :<syntaxhighlight lang=forth> 3 4 + \ 3 + 4 の結果をスタックトップに残す </syntaxhighlight> コメントは、インタプリタの動作に影響を与えません。 === スタックエフェクト === Forthの各ワードは、スタック上で特定の操作を行います。ワードのドキュメントでは、それがスタックに対してどのような影響を与えるかを示す記述があります。例えば: :<syntaxhighlight lang=forth> + ( a b -- c ) </syntaxhighlight> この記述は、<code>+</code>ワードが2つの引数(<code>a</code>と<code>b</code>)を消費し、1つの結果(<code>c</code>)をスタックに残すことを意味します。 === Forthのワードとは?その定義と使用について === Forthにおける「ワード」とは、基本的には単語や言葉を意味しますが、Forthプログラミングでは、より具体的には次の2つの意味を持ちます。 # 定義済みの単語 #: ワードは、Forthの語彙において定義された単語や操作を指します。Forthでは、これらのワードはスタック操作や制御構造、算術演算などの基本的な機能を表します。例えば、<code>+</code>は2つの数値を取り出して足し合わせ、結果をスタックに戻すワードです。 # 新しい単語の定義 #: ワードは、Forthプログラム内で新しい単語を定義するための仕組みとしても使われます。これは、既存のワードを組み合わせて、新しい機能を持つ単語を定義することを意味します。例えば、<code>DOUBLE</code>というワードを定義して、与えられた数値を2倍にするような操作を定義することができます。 ワードの定義は、通常、次のような形式で行われます: :<syntaxhighlight lang=forth> : ワード名 ( 定義部分 ) ; </syntaxhighlight> ここで、<code>: ワード名</code>は新しいワードの定義を開始し、<code>;</code>は定義の終了を示します。定義部分には、既存のワードや操作を組み合わせて、新しい機能を実現するForthのコードが記述されます。 === ワードの定義と使用例 === Forthにおけるワードの定義と使用についてさらに詳しく説明します。 # ワードの定義 : #: ワードは、<code>:</code> と <code>;</code> の間に記述されたコードブロックで定義されます。 #: 例えば、<code>SQUARE</code>という新しいワードを定義してみましょう。 #:<syntaxhighlight lang=forth> : SQUARE ( n -- n*n ) DUP * ; </syntaxhighlight> #: ここでは、<code>SQUARE</code>というワードが定義されています。このワードは、スタックから1つの数値を取り出し、その数値を自乗して結果をスタックに戻します。 # ワードの使用 : #: 定義したワードは、Forthプログラム内で直接使用することができます。 #:<syntaxhighlight lang=forth> 5 SQUARE . \ スタックから5を取り出して自乗し、結果を表示する </syntaxhighlight> #:上記の例では、<code>5 SQUARE .</code> というForthコードが実行されます。まず、<code>5</code>がスタックに積まれ、次に<code>SQUARE</code>ワードが実行されて、<code>5</code>の自乗である<code>25</code>が計算されます。最後に<code>.</code>はスタックのトップの値を表示しますので、結果として<code>25</code>が表示されます。 # 組み込みワードとカスタムワード : #: Forthには組み込みのワード(<code>+</code>, <code>-</code>, <code>*</code>, <code>/</code>など)がありますが、ユーザーはこれに加えて独自のワードを定義することができます。カスタムワードを使うことで、プログラムをより効率的に構築できます。 # 再帰的なワード : #: Forthでは、ワードは自身の中で再帰的に呼び出すことができます。これにより、複雑な演算や制御構造を簡潔に表現することが可能です。 ワードの定義と使用は、Forthプログラムの中核的な部分を構成します。これにより、プログラムの再利用性、メンテナンス性、可読性が向上し、効率的なコーディングが実現されます。 === 基本的な制御構造 === Forthの制御構造は、他のプログラミング言語とは異なり「制御構造もワードの集合から定義する」という独自の特徴を持っています。Forthでは、基本的な制御構造として条件分岐とループが利用されます。 制御構造に関するワードは、コンパイル時(つまり <code>:</code> から <code>;</code> までの間)でのみ使用でき会話モードでは使用できません。 ==== 条件分岐 ==== Forthでは、条件分岐は主に <code>IF</code>, <code>ELSE</code>, <code>THEN</code> のワードを組み合わせて実現されます。 ; 例: :<syntaxhighlight lang=forth> : ABS ( n -- |n| ) DUP 0< IF NEGATE THEN ; </syntaxhighlight> この例では、<code>ABS</code>というワードを定義しています。このワードは、スタックから数値を取り出し、その絶対値を計算して結果をスタックに戻します。<code>DUP 0<</code> はスタックトップの値が0より小さいかどうかをチェックし、<code>IF</code> から <code>THEN</code> の間に記述されたブロックが条件を満たす場合に実行されます。つまり、もし数値が負の場合は <code>NEGATE</code> が実行されます。 ==== ループ ==== Forthでは、ループは <code>DO</code>, <code>LOOP</code> や <code>BEGIN</code>, <code>WHILE</code>, <code>REPEAT</code> のワードを使って実装されます。 ; 例: :<syntaxhighlight lang=forth> : COUNTDOWN ( n -- ) 0 DO I . LOOP ; </syntaxhighlight> 上記の例では、0から与えられた数値(<code>n</code>)までカウントダウンする<code>COUNTDOWN</code>というワードを定義しています。 ==== その他の制御構造 ==== Forthには他にも、<code>CASE</code>, <code>OF</code>, <code>ENDOF</code>, <code>ENDCASE</code> を使った条件分岐や、<code>IF-ELSE-ENDIF</code> 構造、<code>BEGIN-UNTIL</code>、<code>BEGIN-WHILE-REPEAT</code> など、さまざまな制御構造が存在し、新たな制御構造をユーザーが定義することすら出来ます。 Forthの制御構造は、スタック指向の特性に基づいてシンプルかつ柔軟に設計されており、独自のプログラミングスタイルを持つことが特徴です。 === スタック操作の基本命令 === Forthにはスタック上のデータを操作するための基本的な命令があります。 * <code>DUP</code>: ( n -- n n ) スタックのトップの要素を複製する * <code>DROP</code>: ( n -- ) スタックのトップの要素を削除する * <code>SWAP</code>: ( n1 n2 -- n2 n1 ) スタックのトップとその下の要素を交換する * <code>OVER</code>: (n1 n2 -- n1 n2 n1 ) スタックのトップの2つ下の要素を複製してトップに置く * <code>ROT</code>: ( n1 n2 n3 — n2 n3 n1 ) スタックのトップの3つ下の要素をトップに回転する === 基本的な演算 === Forthには、算術演算(<code>+</code>、<code>-</code>、<code>*</code>、<code>/</code>など)、論理演算(<code>AND</code>、<code>OR</code>、<code>NOT</code>)、比較(<code>=</code>、<code><></code>、<code>></code>、<code><</code>など)の基本ワードが用意されています。これらのワードは、スタック上の値を取り、演算結果をスタックに代入します。 === 再帰的呼び出し === Forthで再帰的呼び出しを行う場合、ワード <code>recurse</code> を使ってワード自身を表します。 再帰的なワードを定義する方法について説明します。 ==== 階乗 ==== 再帰的な階乗(factorial)を定義します。 :<syntaxhighlight lang=forth> : factorial ( n -- result ) dup 0= if \ スタックのトップの値が0かどうかをチェック drop 1 \ もし0ならば、結果は1として処理を終了 else dup 1 - \ スタックのトップの値から1を引いた値をコピー recurse * \ 再帰的に自身を呼び出して、その結果にスタックのトップの値を掛ける then ; </syntaxhighlight> この定義の内容を説明します。 * ワード <code>factorial</code> は、<code>( n -- result )</code> のスタックエフェクトを持ちます。<code>n</code> は階乗を計算する整数です。 * <code>dup 0=</code>: スタックのトップの値が0かどうかをチェックします。 ** もし0ならば、<code>drop 1</code> が実行されて、スタックのトップの値(<code>n</code>)が削除され、結果として <code>1</code> がスタックにプッシュされます。 * <code>else</code>: もしスタックのトップの値が0でない場合は、次の操作が実行されます。 ** <code>dup 1 -</code>: スタックのトップの値から <code>1</code> を引いた値をスタックにプッシュします。これは <code>n - 1</code> の計算です。 ** <code>recurse *</code>: 自身の <code>factorial</code> を再帰的に呼び出して、結果に対してスタックのトップの値(<code>n</code>)を掛けます。これにより、<code>n! = n * (n-1)!</code> の計算が行われます。 * <code>then</code>: <code>if</code> ブロックの終了を示します。 例えば、<code>5 factorial .</code> を実行すると、<code>5</code> の階乗(<code>5!</code>)が計算されます。 :<syntaxhighlight lang=forth> 5 factorial . </syntaxhighlight> この例では、<code>5!</code> の計算手順は以下の通りです: * <code>5</code> がスタックにプッシュされる。 * <code>factorial</code> が呼び出される。 ** <code>dup 0=</code>: スタックのトップの値が0でないので、次の処理が実行される。 ** <code>dup 1 -</code>: <code>5 - 1</code> が計算されて <code>4</code> がスタックにプッシュされる。 ** <code>recurse *</code>: <code>4</code> の階乗 (<code>4!</code>) が再帰的に計算される。 *** <code>dup 0=</code>: スタックのトップの値が0でないので、次の処理が実行される。 *** <code>dup 1 -</code>: <code>4 - 1</code> が計算されて <code>3</code> がスタックにプッシュされる。 *** <code>recurse *</code>: <code>3</code> の階乗 (<code>3!</code>) が再帰的に計算される。 **** ... ***** 最終的に、<code>1</code> の階乗 (<code>1!</code>) が計算されて <code>1</code> がスタックにプッシュされる。 **** <code>5 *</code>: <code>5</code> と <code>4!</code> の結果を掛けて <code>120</code> がスタックにプッシュされる。 *** <code>5 *</code>: <code>5</code> と <code>120</code> の結果を掛けて <code>120</code> がスタックにプッシュされる。 * <code>. (dot)</code> コンパイラワ ==== 最大公約数(GCD) ==== 再帰的にユークリッドのアルゴリズムを使用して最大公約数(Greatest Common Divisor, GCD)を計算します。 :<syntaxhighlight lang=forth> : gcd ( u1 u2 -- gcd ) dup 0= if \ スタックのトップの値が0かどうかをチェック drop \ スタックのトップの値が0ならば削除して終了 else swap over mod recurse \ スタックのトップと2番目の値を入れ替えて、modを計算し再帰的に呼び出す then ; </syntaxhighlight> このプログラムの動作をステップごとに説明します: # <code>dup 0=</code>: スタックのトップの値(<code>u1</code>)が0かどうかをチェックします。 #* もし0ならば、<code>drop</code> が実行されて、スタックのトップの値(<code>u1</code>)が削除されます。この場合は再帰の終了条件となります。 # <code>else</code>: もしスタックのトップの値(<code>u1</code>)が0でない場合は、次の操作が実行されます。 # <code>swap over mod recurse</code>: #* <code>swap</code>: スタックのトップと2番目の値を入れ替えます。これにより、<code>u1</code> と <code>u2</code> の値が入れ替わります。 #* <code>over</code>: スタックの2番目の値(入れ替え前の <code>u1</code>)をスタックのトップにコピーします。 #* <code>mod</code>: スタックのトップの2つの値を取り出して、<code>u1 % u2</code>(<code>u1</code> を <code>u2</code> で割った余り)を計算し、その結果をスタックにプッシュします。 #* <code>recurse</code>: 自身の <code>gcd</code> を再帰的に呼び出します。これにより、新しい <code>u1</code> と <code>u2</code> の値がスタックに積まれ、再帰的に最大公約数が計算されます。 # <code>then</code>: <code>if</code> ブロックの終了を示します。 例えば、<code>12 18 gcd .</code> を実行すると、以下のように動作します: * <code>12</code> と <code>18</code> がスタックにプッシュされます。 * <code>gcd</code> が呼び出されます。 ** <code>dup 0=</code>: <code>18</code> は0ではないので、次の処理に進みます。 ** <code>swap over mod recurse</code>: <code>18</code> と <code>12</code> が入れ替わり、<code>18 % 12</code> が計算されます(余りは <code>6</code>)。 ** <code>gcd</code> が再帰的に呼び出され、新しい値 <code>12</code> と <code>6</code> がスタックにプッシュされます。 *** <code>dup 0=</code>: <code>6</code> は0ではないので、次の処理に進みます。 *** <code>swap over mod recurse</code>: <code>6</code> と <code>12</code> が入れ替わり、<code>6 % 12</code> が計算されます(余りは <code>6</code>)。 *** <code>gcd</code> が再帰的に呼び出され、新しい値 <code>6</code> と <code>6</code> がスタックにプッシュされます。 **** <code>dup 0=</code>: <code>6</code> は0ではないので、次の処理に進みます。 **** <code>swap over mod recurse</code>: <code>6</code> と <code>6</code> が入れ替わり、<code>6 % 6</code> が計算されます(余りは <code>0</code>)。 **** <code>0=</code>: <code>0</code> が0なので、<code>drop</code> が実行されて、スタックのトップの値 <code>0</code> が削除されます。 * 最終的に、スタックのトップには <code>6</code> が残ります。これが <code>12</code> と <code>18</code> の最大公約数です。 したがって、<code>12 18 gcd .</code> を実行すると、<code>6</code> が表示されます。 === 変数の宣言・代入と参照 === Forthにおける <code>VARIABLE</code> は、変数を定義するためのワードです。Forthでは、変数はメモリ内のアドレスに名前を関連付ける方法で定義されます。 以下は、<code>VARIABLE</code> を使用して変数を定義する方法とその使い方の例です。 ==== <code>VARIABLE</code> の使用方法 ==== <code>VARIABLE</code> は以下のように使用します: :<syntaxhighlight lang=forth> VARIABLE my-var \ my-var という名前の変数を定義する </syntaxhighlight> この行は、名前が <code>my-var</code> の変数を定義します。この変数はメモリ内の特定のアドレスに関連付けられます。 ==== 変数の使用方法 ==== 定義された変数を使用するには、<code>@</code>(fetch)や <code>!</code>(store)などのワードを使います。これらのワードを使って変数の値を取得したり設定したりできます。 - <code>@</code> は、変数の値をスタックにプッシュします。 - <code>!</code> は、スタックのトップの値を変数に代入します。 例えば、次のように変数に値を設定して取得します: :<syntaxhighlight lang=forth> 123 my-var ! \ 変数 my-var に値 123 を代入する my-var @ . \ 変数 my-var の値を表示する </syntaxhighlight> この例では、変数 <code>my-var</code> に <code>123</code> を代入し、その後 <code>@</code> を使って変数の値を取得して表示しています。 ==== 実際の例 ==== 以下は、<code>VARIABLE</code> を使って変数を定義し、値を設定して取得する具体的な例です: :<syntaxhighlight lang=forth> VARIABLE my-var \ my-var という名前の変数を定義する 123 my-var ! \ 変数 my-var に値 123 を代入する my-var @ . \ 変数 my-var の値を表示する </syntaxhighlight> この例では、変数 <code>my-var</code> を定義し、<code>123</code> を代入してその値を表示しています。<code>!</code> で変数に値を設定し、<code>@</code> で変数の値を取得しています。 変数はプログラムでデータを保持する際に便利です。Forthでは、変数の値は直接メモリ上に代入されるため、効率的なデータ管理が可能です。 === 定数の定義と参照 === Forthの <code>CONSTANT</code> は、定数を定義するためのワードです。定数は変更されることのない値であり、プログラムの中で何度も使われる値を簡潔に表現するために使用されます。 ==== <code>CONSTANT</code> の使用方法 ==== <code>CONSTANT</code> は以下のように使用します: :<syntaxhighlight lang=forth> 123 CONSTANT my-const \ my-const という名前の定数を定義する </syntaxhighlight> この行は、名前が <code>my-const</code> の定数を定義し、その値を <code>123</code> に設定します。定数はプログラム中で使用される値を一元管理し、可読性を向上させます。 ==== 定数の使用方法 ==== 定義された定数は、その名前を使ってプログラム中で値を参照することができます。 :<syntaxhighlight lang=forth> my-const . \ 定数 my-const の値を表示する </syntaxhighlight> この例では、定数 <code>my-const</code> の値が表示されます。 ==== 実際の例 ==== 以下は、<code>CONSTANT</code> を使って定数を定義し、その定数を使用する具体的な例です: :<syntaxhighlight lang=forth> 123 CONSTANT my-const \ my-const という名前の定数を定義する my-const . \ 定数 my-const の値を表示する </syntaxhighlight> この例では、定数 <code>my-const</code> を <code>123</code> に設定し、その後定数の値を表示しています。 定数はプログラム中で共通の値を使い回す際に便利です。Forthの定数は一度定義されると値が変更されることはなく、プログラム全体で一貫性のある値を提供します。 === 基数 === Forthの <code>BASE</code> は、数値の基数(n進数のn)を設定するための変数です。Forthでは、数値の表現において基数を変更することができます。通常、Forthはデフォルトで10進数を使用しますが、<code>BASE</code> を変更することで他の基数(2進数、16進数など)で数値を表現することが可能です。 ==== <code>BASE</code> の使用方法 ==== <code>BASE</code> は以下のように使用します: :<syntaxhighlight lang=forth> 16 BASE ! \ 基数を16進数に設定する </syntaxhighlight> この行は、<code>BASE</code> の値を <code>16</code> に設定しています。これにより、その後の数値の表示や入力が16進数で行われるようになります。 ==== 基数の変更と数値の表現 ==== <code>BASE</code> を変更することで、その後の数値リテラルの表現が変わります。例えば、<code>BASE</code> を16進数に設定した場合、数値リテラルは16進数として解釈されます。 :<syntaxhighlight lang=forth> 16 BASE ! \ 基数を16進数に設定する FF . \ 16進数の255を表示する </syntaxhighlight> この例では、<code>BASE</code> を16進数に設定してから、<code>FF</code> を表示すると、16進数の <code>FF</code> (10進数の <code>255</code>)が表示されます。 ==== デフォルトの基数と再設定 ==== Forthのデフォルトの基数は10進数です。基数を変更した後は、必要に応じて再度基数を10進数に戻すことができます。 :<syntaxhighlight lang=forth> DECIMAL BASE ! \ 基数を10進数に戻す </syntaxhighlight> この行は、<code>BASE</code> を10進数に再設定しています。これにより、数値リテラルは再び10進数として解釈されるようになります。 よくある間違い: :<syntaxhighlight lang=forth> 10 BASE ! \ 基数を16進数から10進数に戻す??? </syntaxhighlight> : として基数を10に戻そうとするミスがあります。 : コードの 10 は16進数として解釈されるので基数は16のままです。 ==== 注意点 ==== <code>BASE</code> を変更すると、数値の解釈や表示が変わるため、基数の変更後には適切な基数に戻すことが重要です。また、<code>BASE</code> の値は変数として扱われるため、必要に応じて保存や復元することができます。 基数を変更することで、特定の基数で数値を扱うプログラムを簡単に記述することができます。 === イミディエイトワード === イミディエイトワード(immediate word)は、Forthプログラミング言語において特定の動作を持つワードの一種です。イミディエイトワードは、通常のワードとは異なり、コンパイル時ではなく実行時に直ちに処理されます。 以下は、イミディエイトワードの特性について詳しく説明します: # 実行時処理: #* イミディエイトワードは、定義された時点ではコンパイルされず、実行時に直ちに解釈および実行されます。 #* 通常のワード(コンパイルワード)は、単なるコンパイル時にスタックに動作を積むだけであり、後で実行されますが、イミディエイトワードは定義された時点ですぐに実行されます。 # 定義方法: #* イミディエイトワードは、<code>IMMEDIATE</code> を使用して定義されます。 #* これにより、そのワードが定義された直後に実行されるようにマークされます。 # 使用例: #* 例えば、<code>."</code>(ダブルクォートピリオド)はイミディエイトワードです。これは、コンパイル時ではなく実行時に文字列を表示します。 #* <code>: greeting ." Hello, world!" ;</code> という定義では、<code>. "</code>Hello, world!"<code> はコンパイル時に実行されず、</code>greeting` を実行したときに実行されます。 # 動的な挙動: #* イミディエイトワードは、通常のワードとは異なり、実行時の環境やスタックの状態に応じて動的に振る舞います。 #* これにより、実行時に動的なテキストや操作を生成するために使用することができます。 イミディエイトワードは、Forthの柔軟性と強力な動的な特性を提供します。コンパイル時に制御構造や動作を決定するだけでなく、実行時に動的な挙動を持つことができます。 {{コラム|Forthの文法|2=Forthのプログラムは、空白文字で区切られた「ワード」の並びで構成されます。ワードには、数値リテラル、制御構造、演算子、そして他のワードを呼び出す構文などがあります。Forthには高水準の構文がなく、基本的な構文要素は非常にシンプルです。 例えば、<code>2 3 +</code> と入力すると、2と3がスタックにプッシュされ、最後の<code>+</code>がスタック上の2つの数値を加算します。この結果である5がスタックに残ります。つまり、Forthではプログラムの実行とデータ操作が、ワードの解釈とスタック操作によって行われるのです。 Forthは、基本的に行指向の言語です。プログラムは複数行に分割できますが、改行の前後で文が継続する場合は、スペースを入れる必要があります。このため、適切なインデントを使ってプログラムの構造をわかりやすくすることが重要です。 }} == データ型 == Forthには明示的なデータ型宣言がないため、データ型は主に暗黙的に扱われます。Forthでは、データ型はデータの解釈や使用方法に依存します。以下では、Forthでよく使用されるデータ型について説明します。 === セル(Cell) === セルは、通常2バイトまたは4バイトのサイズを持つ整数型です。Forthの基本的なデータ型であり、スタックやメモリ内のデータはセル単位で扱われます。セルのサイズは実装によって異なる場合があります。 === 符号付き整数(Signed Integer)と符号なし整数(Unsigned Integer) === Forthは整数を符号付きとしても、符号なしとしても扱うことができます。通常はセル内のビットパターンに基づいて解釈されます。算術演算や比較演算などが適用されますが、具体的な整数型に明示的に制限はありません。 === 文字(Character) === Forthでは文字は通常、符号なし整数として扱われます。ASCII文字セット内の範囲(通常は0から255)の数値として表現されます。文字に対する演算は、数値としての操作として扱われます。 === 文字列(String) === 文字列はカウント付き文字列(Counted String)やnull終端文字列(Null-terminated String)として表現されることがあります。カウント付き文字列では、最初のバイトが文字列の長さを示し、その後に文字のデータが続きます。文字列は通常、メモリ上の連続した領域に格納されます。文字列の操作には、<code>WORD</code>、<code>FIND</code>、<code>C"</code>などの専用のワードが用意されています。 === アドレス(Address) === Forthではアドレスも整数として扱われます。アドレスはメモリ上の位置を示す整数値であり、アドレス演算は通常の整数演算と同様に行われます。アドレス演算には、<code>CHAR+</code>、<code>CELLS</code>、<code>FLOAT+</code>などの専用のワードが用意されています。 === データ型の制約と振る舞い === Forthでは、データ型に関する制約やチェックはコンパイラやランタイムによっては'''行われません'''。プログラマはデータを正しく扱う責任があります。特にプログラムの移植性を考慮する場合は、適切なデータ型の使用が重要です。 データ型はForthの柔軟性とパフォーマンスの両方をサポートするため、プログラマに柔軟性と責任を与えます。それぞれのアプリケーションや環境に応じて、適切なデータ型を選択することが重要です。 == 浮動小数点数 == Forthの浮動小数点数についての情報は、Forth-2012仕様におけるオプションの浮動小数点数ワードセットに関連しています。以下にその内容の要点をまとめます。 ; 浮動小数点数の基本 :* 浮動小数点数は、<code>DECIMAL</code>の<code>BASE</code>で入力する必要があります。任意の基数での浮動小数点数の入力は許可されていません。 :* 標準システムで解釈されるすべての浮動小数点数には、指数インジケーター "E" を含める必要があります。 :;浮動小数点数の例 ::<syntaxhighlight lang=forth> 1e 3.14e 1.2e3 1e9 </syntaxhighlight> ; 浮動小数点数のフォーマットと範囲 :* 浮動小数点数の有効桁数や指数のフォーマット、範囲は、Forth-2012では実装に依存します。IEEE浮動小数点数フォーマットが一般的に使用されています。 ; 浮動小数点数のワードセット :* Floating-Point Extensionsワードセットには、<code>DF@</code>、<code>SF@</code>、<code>DF!</code>、<code>SF!</code>などのワードが含まれています。これらは、倍精度および単精度のIEEE浮動小数点フォーマットの数値をメモリに格納するためのものです。 ; 浮動小数点数の入力 :* 浮動小数点数をASCII形式で入力するためには、<code>>FLOAT</code>ワードが使用されます。これは、標準Forthシステムや他の広く使用されるプログラミング環境からデータを受け入れるために広範な構文を許容します。 ; 実装の注意点 :* カスタムの浮動小数点数データ構造を定義する際には、アドレスの整列(alignment)に注意する必要があります。<code>CREATE</code>が適切な浮動小数点数の整列を行わない場合は、コンパイル時および実行時に適切な整列を指定する必要があります。 == ローカル変数 == ForthのOPTIONAL Locals word set(ローカルワードセット)は、Forthのプログラミングでローカル変数を定義するための機能を提供します。以下は、このワードセットに関する情報の要約です。 ; ローカル変数の定義方法 :* <code>(LOCAL)</code> ワードや <code>LOCALS|</code> ワードを使用して、ローカル変数を定義します。 :* <code>{ ... }</code> または <code>{: ... :}</code> の表記を使用して、ローカル変数を囲みます。<code>: ... :</code> の形式は、他のシステムとの名前の衝突を避けるための妥協形式です。 ; ローカル変数の種類 :* ローカル変数は、初期化されたものと初期化されていないものに分けられます。初期化されたローカル変数はデータスタックから実行時に初期化されます。 ; 定義の終了 :* ローカル変数の定義は <code>--</code> もしくは <code>:}</code> で終了します。これにより、ローカル変数の定義中に完全なスタックコメントを記述することが可能です。 ; 文法と慣習 :* ローカル変数の引数と値の区切りには <code>|</code> を使用しますが、他のシステムでは <code>{ ... }</code> の表記が競合する場合があります。 :* 実装によっては、別の区切り文字(例: <code>\</code>, <code>¦</code>)を使用する場合がありますが、移植性を確保するためには <code>|</code> の使用が推奨されます。 ; 予約事項 :* ローカル変数の名前には、特定の文字(<code>:</code>、<code>[</code>、<code>^</code>)で終わる名前は予約されています。 Forthのローカル変数機能は、実装によって異なる場合がありますが、一般的な慣習として、<code>(LOCAL)</code> や <code>{: ... :}</code> の表記が広く使用されています。移植可能なプログラムを書く場合は、このような慣習に準拠することが重要です。 == ファイル操作 == Forthのファイル操作に関連するオプションのワードセットである「File-Access」についての情報を要約します。 === ファイル操作の機能 === # '''CREATE-FILE''' (<code>CREATE-FILE</code>) #* ファイルを作成するためのワードです。 #* 例: <code>S" TEST.FTH" R/W CREATE-FILE ABORT" CREATE-FILE FAILED" ;</code> # '''OPEN-FILE''' (<code>OPEN-FILE</code>) #* ファイルをオープンするためのワードです。 #* 例: <code>S" TEST.FTH" R/W OPEN-FILE ABORT" OPEN-FILE FAILED" ... ;</code> # '''READ-FILE''' (<code>READ-FILE</code>) #* ファイルからデータを読み込むためのワードです。 #* 典型的なシーケンシャルなファイル処理アルゴリズム: #:<syntaxhighlight lang=forth> BEGIN ... READ-FILE THROW ?DUP WHILE ... REPEAT </syntaxhighlight> # '''READ-LINE''' (<code>READ-LINE</code>) #* ファイルから行単位でデータを読み込むためのワードです。 #* 典型的な行指向のシーケンシャルなファイル処理アルゴリズム: #:<syntaxhighlight lang=forth> BEGIN ... READ-LINE THROW WHILE ... REPEAT DROP </syntaxhighlight> # '''INCLUDE''' (<code>INCLUDE</code>) #* 指定されたファイルを読み込んで実行するためのワードです。 #* 例: <code>INCLUDE filename</code> # '''REQUIRE''' (<code>REQUIRE</code>) #* 指定されたファイルを読み込んで実行するためのワードです。 #* 例: <code>REQUIRE filename</code> # '''REQUIRED''' (<code>REQUIRED</code>) #* 指定されたファイルを読み込んで実行するためのワードです。 #* 例: <code>S" filename" REQUIRED</code> === ファイル操作の注意事項 === * ファイルを再利用する際は、前のファイルのブロックバッファをフラッシュして、誤った関連付けを避ける必要があります。 * <code>S"</code> や <code>S\"</code> で使用される一時バッファは、2つの連続する文字列を格納できるようにする必要があります。バッファが不足している場合は、最も古いバッファを上書きすることができます。 == 例外処理 == Forthの例外処理に関する情報を要約します。 Exception word set はオプショナルなので、実装していない処理系もありえます。 === CATCH と THROW === * '''CATCH''' (<code>CATCH</code>): 例外ハンドリングの開始をマークします。CATCH ブロック内のコードが例外を THROW すると、CATCH は例外コードをキャッチして対応する処理を行います。 * '''THROW''' (<code>THROW</code>): 例外を発生させ、対応する CATCH ブロックに制御を戻します。例外コードが与えられると、THROW は対応する CATCH のスタック状態を復元し、適切な処理を行います。 === 例外処理の重要性と利用法 === * '''例外処理の重要性''': ABORT などの状況でプログラムの制御を維持するために例外ハンドラを使用します。 * '''例外処理の利用法''': 例外処理は、ファイルのテキスト解釈中に発生した例外をキャッチしてファイルをクローズするなど、プログラムの安全な実行を保証します。 === 具体例 === :<syntaxhighlight lang=forth> : could-fail ( -- char ) KEY DUP [CHAR] Q = IF 1 THROW THEN ; : do-it ( a b -- c) 2DROP could-fail ; : try-it ( --) 1 2 ['] do-it CATCH IF ( x1 x2 ) 2DROP ." There was an exception" CR ELSE ." The character was " EMIT CR THEN ; : retry-it ( -- ) BEGIN 1 2 ['] do-it CATCH WHILE ( x1 x2) 2DROP ." Exception, keep trying" CR REPEAT ( char ) ." The character was " EMIT CR ; </syntaxhighlight> * <code>could-fail</code>: キーボードからキーを読み取り、特定の条件で例外を発生させます。 * <code>do-it</code>: 例外を発生させる可能性のある処理を行います。 * <code>try-it</code>: <code>do-it</code> を実行し、例外が発生した場合は例外メッセージを表示します。 * <code>retry-it</code>: <code>do-it</code> を実行し、例外が発生した場合はリトライし続けます。 == 実行トークン == Forthにおける実行トークン(Execution Token; xt)は、ワード(Word)や定義体(Definition)の実行を指示するためのデータ構造です。実行トークンは、コードワードを指すための一意の識別子として機能します。以下は、Forthの実行トークンについての詳細です。 ; 実行トークンの定義 : 実行トークンは、通常、ワードや定義体の実行を示すために使用される整数またはポインタです。これは通常、コンパイラやインタプリタ内部で使用され、特定のワードや定義体を表す一意の識別子として機能します。 ; 実行トークンの使用 : Forthのコードは、実行トークンを使用してワードや定義体を実行します。実行トークンは通常、スタックや辞書(Dictionary)に格納され、必要なときに取り出されて使用されます。 ; ' (Tick) 記号 : 一般的なForthのプログラミングスタイルでは、実行トークンを取得するためにシングルクォート(')記号が使用されます。例えば、<code>' DUP</code> は <code>DUP</code> ワードの実行トークンを取得します。 ; 実行トークンと定義体の関連付け : 実行トークンは、定義体やコードワードと関連付けられます。通常、辞書内のワードエントリは、そのワードの実行トークンを参照します。これにより、プログラムは実行トークンを使用して、辞書内のワードを特定して実行することができます。 ; ランタイムスタックとの関係 : Forthのランタイムスタックは、実行トークンを使用してコードを実行します。コンパイルされたForthコードは、ランタイムスタック上で実行トークンを取り出して、対応するワードや定義体を実行します。 ; 実行トークンの特徴 : 実行トークンは、Forthの柔軟性と効率性を向上させるために使用されます。コンパイラやインタプリタは、実行トークンを介してワードを効率的に実行し、辞書の管理を行います。 ; 実行トークンの安全性 : Forthでは、実行トークンは通常、ユーザーからは直接操作されず、コンパイラやランタイムシステム内部で使用されます。これにより、実行トークンを誤って操作することがなく、安全なプログラミング環境が提供されます。 Forthの実行トークンは、言語の内部実装の詳細を隠蔽し、プログラマに柔軟性と効率性を提供する重要な概念です。 == 制御フロースタック == 制御フロースタックは、Forthの制御構造の実装に使用されるメカニズムです。具体的には以下のような役割を果たします: # 分岐命令の始点(origin)を記録する #* <code>IF</code>、<code>AHEAD</code> などの前方ジャンプ命令の始点を記録 # 分岐命令の終点(destination)を記録する #* <code>BEGIN</code>、<code>AGAIN</code> などの後方ジャンプ命令の終点を記録 # 分岐命令の始点と終点を解決する #* <code>THEN</code> で<code>IF</code> や <code>AHEAD</code> の始点を解決 #* <code>AGAIN</code> で <code>BEGIN</code> の終点を解決 制御フロースタックは、Forthの制御構造を実現するための中間表現として機能しています。プログラマはこの制御フロースタックの管理を意識することなく、高レベルな制御構造を記述できます。 実装方法は任意ですが、たとえばデータスタック、連結リスト、特殊な配列など、必要な操作ができる形で実現されます。重要なのは、制御構造の始点と終点が適切に記録・解決されることです。 この制御フロースタックを基に、<code>IF-THEN</code>、<code>BEGIN-UNTIL</code>、<code>BEGIN-WHILE-REPEAT</code> などの基本的な制御構造が構築されます。さらに、<code>CASE</code>、<code>WHILE</code>、<code>REPEAT</code>、<code>ELSE</code> などの拡張構造も、制御フロースタックの操作によって定義できます。 つまり、Forthの制御フロースタックは、高度な制御構造を柔軟に構築するための基盤となる重要な概念なのです。 == コンパイル時ワード == Forthには、コンパイル時に処理される特殊なワードがあります。これらをコンパイル時ワードと呼びます。 主なコンパイル時ワードには以下のようなものがあります: # コンパイル時の定義操作 #* <code>:</code> (コロン) - 新しい定義を開始する(<code>:</code>自身は通常の逐次ワード) #* <code>;</code> (セミコロン) - 定義を終了しコンパイルモードを抜ける #* <code>CONSTANT</code>、<code>VARIABLE</code>、<code>DEFER</code> - 定数、変数、遅延定義を作成する # コンパイル時の制御 #* <code>IF</code>、<code>ELSE</code>、<code>THEN</code>、<code>BEGIN</code>、<code>UNTIL</code> など - 条件分岐やループなどの制御構造を定義する #* <code>LITERAL</code> - スタックトップの値をコンパイル時に埋め込む # その他のコンパイル時操作 #* <code>IMMEDIATE</code> - 定義をすぐに実行されるように指定する #* <code>[COMPILE]</code> - 次のワードをコンパイル時に実行する #* <code>POSTPONE</code> - 次のワードの実行トークンをコンパイルする これらのコンパイル時ワードは、Forthのプログラムの構造を定義したり、実行時の振る舞いを制御したりするために使われます。 通常のワードとは異なり、これらのコンパイル時ワードはコンパイル時に処理され、実行時には特殊な動作をするようになっています。これにより、Forthのプログラミングモデルを柔軟に拡張することができます。 == 辞書 == Forthの辞書に関する情報を要約します。 ; 辞書と名前空間 :* '''名前空間''': Forthの辞書は名前空間を提供します。標準プログラムは非標準の定義で標準ワードを再定義することができますが、その結果は標準システムではなくなります。 :* '''定義名''': 標準プログラムが使用する外部要素が標準システムで提供されていない場合、実行環境に依存する可能性があります。 ; コード空間とデータ空間 :* '''データ空間''': Forthシステムのデータ空間は不連続な領域に分かれています。複数の領域の配置については標準プログラムは仮定できません。 :* '''アドレスの整列''': アクセス命令によって使用されるアドレスにはアライメント制約があります。例えば、16ビットのデータは偶数アドレスにのみ保存される必要があるなどの制約があります。 ; 他の情報 :* '''一貫したアドレス''': データ領域の一貫性は、領域内でのアドレス演算を有効にします。 ; Contiguous regions(連続領域) Forthではデータ空間が連続しているという考え方があります。つまり、データ領域は一つの連続したブロックとして扱われますが、実際にはそのデータ空間は複数の部分から構成されていることがあります。 一般的なForthシステムでは、データ空間は複数の領域に分かれており、これらの領域は連続性を持ちますが、その間に他の種類の領域が存在する場合もあります。このような設計は、Forthシステムのメモリ管理において重要な役割を果たします。 例えば、以下のようなForthのコードで連続領域を確保することができます: :<syntaxhighlight lang=forth> CREATE MY-ARRAY 100 CELLS ALLOT </syntaxhighlight> この例では、100つのセル(通常はセルは1つのワードに対応します)を連続して確保しています。これにより、MY-ARRAYは連続した100個のセルを格納する領域を持つことになります。このようにして連続領域を確保することで、アドレス算術を利用してデータにアクセスすることができます。 Forthの連続領域の管理は、<code>CREATE</code>や<code>ALLOT</code>、<code>DOES></code>などの単語を使用して行われます。これらの単語を組み合わせてデータ構造を定義し、連続領域を動的に割り当てることができます。 これらの情報は、標準プログラムのポータビリティと安全性を確保するために重要です。具体的な実装や制約については、詳細なFor仕様書を参照してください。 == データ構造とメモリ管理 == Forthは組み込みシステムなどのリソース制約の厳しい用途を想定して設計されているため、メモリの効率的な利用が重視されています。この章では、Forthにおけるデータ構造とメモリ管理の方法を説明します。 === コントロールフロースタック === コントロールフロースタックとは、Forthのプログラムの制御フローを管理するために使用される仮想的なスタックです。 その主な役割は以下の通りです: # 制御フロー命令の対応関係の管理 #* 制御フロー命令(<code>IF</code>, <code>THEN</code>, <code>ELSE</code>, <code>BEGIN</code>, <code>WHILE</code>, <code>REPEAT</code> など)の対応関係を管理します。 #* 開始と終了の命令が適切に対応していることを確認します。 # 制御フロー中のデータスタック操作の制約 #* 制御フロー中のデータスタックの使用方法に制約を課します。 #* 制御フロー命令の入れ子関係に応じて、適切なデータスタックの状態が維持されるようにします。 コントロールフロースタックは物理的に実装されていなくても良いと仕様で定められています。 代わりに、システムはコンパイル時や実行時にこのスタックの挙動を模倣する方法を採ることができます。 つまり、コントロールフロースタックはForthの制御構造の妥当性を保証する上で重要な概念であり、プログラムの正しい実行を支えているのです。 通常のプログラミングでコントロールフロースタックを強く意識することはありませんが、制御構造を自らワードとして定義しようとする場合、コントロールフロースタックの振る舞いに注意する必要があります。 === リターンスタック === Forthには、データスタックとは別に、リターンスタックと呼ばれる重要なスタックが存在します。リターンスタックの主な役割は以下の通りです: # 関数呼び出しとリターン #* 関数を呼び出すとき、その関数の呼び出し元の命令アドレスがリターンスタックにプッシュされます。 #* 関数から抜け出すときは、リターンスタックからアドレスがポップされ、その場所に制御が戻されます。 #* これによって、関数呼び出しの際の制御の移動を管理することができます。 # 一時的データ保管 #* リターンスタックは、データを一時的に保管する場所としても使えます。 #* データスタックからデータを>Rでリターンスタックにプッシュし、後でR>で取り出すことができます。 #* これにより、データスタックの状態を一時的に変更せずに、値を保持しておくことができます。 リターンスタックの使用には注意点があります: * ワード内やループ内では、<code>>R</code>と <code>R></code>の回数が一致している必要があります。 * リターンスタックの値は、同じブロック内でのみ参照・取り出しできます。 * ループの脱出時やDO-ループ内からは、リターンスタックの値を取り出せません。 つまり、リターンスタックは制御フローの管理と一時的なデータ保管に使われますが、その使い方には一定の制限があるため、注意深く扱う必要があります。 プログラムの複雑さが増すと、リターンスタックの状態を適切に管理することが難しくなるため、できるだけ単純な使い方に留めるのが賢明です。 ; <code>>R ( x -- ) ( R: -- x )</code> : データスタックから値をポップしリターンスタックにプッシュする ; <code>R> ( R: -- x ) ( x -- )</code> : リターンスタックから値をポップしデータスタックにプッシュする ; <code>R@ ( -- x ) ( R: x -- x )</code> : リターンスタックのスタックトップをデータスタックにコピーする ; <code>2>R ( x1 x2 -- ) ( R: -- x1 x2 )</code> ; <code>2R> ( -- x1 x2 ) ( R: x1 x2 -- )</code> ; <code>2R@ ( -- x1 x2 ) ( R: x1 x2 -- x1 x2 )</code> スタックエフェクトに <code>R:</code> という新しい記号が出てきましたが、これはリターンスタックへの操作をしまします。このためリターンスタックはRスタックとも呼ばれています。 === 変数とアドレス指定 === Forthには、グローバル変数やローカル変数の概念がありません。代わりに、値を格納するためのメモリ領域を確保し、そのアドレスを使ってアクセスします。<code>VARIABLE</code>ワードを使うと、新しい変数領域が確保され、その開始アドレスがスタックに置かれます。 :<syntaxhighlight lang=forth> VARIABLE COUNTER \ カウンター変数を定義 COUNTER @ . \ 変数の値を表示(初期値は0) 1 COUNTER +! \ 変数にインクリメント </syntaxhighlight> 変数の値を取り出すには<code>@</code>(フェッチ)、格納するには<code>!</code>(ストア)を使います。<code>+!</code>のように算術演算と<code>!</code>を組み合わせたワードもあります。 Forthではアドレスを直接スタックに置いて操作することもできます。<code>HERE</code>はディクショナリの次の空きアドレスを取得し、<code>ALLOT</code>はディクショナリ領域を確保します。 ==== データスペース(Data Space) ==== Forthのデータスペースとは、メモリ内の連続した領域を指し、データやワードの定義などが格納される場所です。Forthでは、データスペースは主に '''ヒープ(heap)''' と '''ディクショナリ(dictionary)''' の2つの領域に分かれています。 * '''ヒープ''': データスタックやワードの実行時に使用される一時的な領域です。ここでは、動的に割り当てられたデータや一時的な計算に使用されるデータが保持されます。 * '''ディクショナリ''': ワード(ワード)の定義やその実装が格納される領域です。Forthのディクショナリはワードの名前とそれに対応する実行可能なコードへのポインタを保持します。 ==== <code>HERE</code> ワード ==== <code>HERE</code> はForthで使用される特定のワードであり、現在のデータスペース内の「ここ(here)」の位置を示します。具体的には、ディクショナリ内の次の空き領域の先頭アドレスを指します。 <code>HERE</code> を使用すると、新しいワードやデータをデータスペースに格納する際に位置を特定することができます。主にワードの定義やデータの動的な確保に使用されます。 例えば、新しい変数や配列を定義する場合、<code>HERE</code> の値を参照して適切なメモリ領域を割り当て、その後 <code>HERE</code> を更新します。 具体的な使用例を示します: :<syntaxhighlight lang=forth> HERE . \ 現在のHEREの値を表示(ディクショナリ内の次の空き領域のアドレス) 10 ALLOT \ 10バイトの領域を確保 HERE . \ 確保後のHEREの値を表示 </syntaxhighlight> この例では、まず <code>HERE</code> の値が表示され、次に <code>10 ALLOT</code> によって10バイトの領域が確保されます。その後、再度 <code>HERE</code> の値が表示され、確保された領域の終端アドレスが示されます。 <code>HERE</code> を適切に使用することで、動的なメモリ管理やデータスペースの操作が行えます。 ==== HEREを利用したデータスペースの活用例 ==== ; sieve.fr :<syntaxhighlight lang=forth> : prime? ( n -- ? ) here + c@ 0= ; : composite! ( n -- ) here + 1 swap c! ; : sieve ( n -- ) here over erase 2 begin 2dup dup * > while dup prime? if 2dup dup * do i composite! dup +loop then 1+ repeat drop ." Primes: " 2 do i prime? if i . then loop ; 100 sieve / Primes: 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 </syntaxhighlight> このForthのコードは、エラトステネスの篩(Sieve of Eratosthenes)アルゴリズムを実装しています。このアルゴリズムは、与えられた数 <code>n</code> 以下のすべての素数を見つけるために使用されます。以下では、与えられたコードの各部分を詳しく説明します。 ; <code>prime?</code> ワード :<syntaxhighlight lang=forth> : prime? ( n -- ? ) here + c@ 0= ; </syntaxhighlight> :; <code>( n -- ? )</code>: スタックから整数 <code>n</code> を取り出し、その数が素数であるかどうかの真偽値 <code>?</code> をスタックに積む。 :* <code>here + c@</code>: <code>here</code> は現在のデータスペースの末尾を示し、それに <code>+</code> を使ってワードの<code>n</code>番目のアドレスを取得する。そして <code>c@</code> はそのアドレスの内容(1バイトの文字)を取得する。 :* <code>0=</code>: 取得したバイトが0かどうかをチェックし、0ならば真(素数)を返す。 ; <code>composite!</code> ワード :<syntaxhighlight lang=forth> : composite! ( n -- ) here + 1 swap c! ; </syntaxhighlight> :; <code>( n -- )</code>: スタックから整数 <code>n</code> を取り出す。 :* <code>here + 1 swap c!</code>: <code>here</code> から<code>n</code>のアドレスにを1を1バイトで書き込む。 ; <code>sieve</code> ワード :<syntaxhighlight lang=forth> : sieve ( n -- ) here over erase 2 begin 2dup dup * > while dup prime? if 2dup dup * do i composite! dup +loop then 1+ repeat drop ." Primes: " 2 do i prime? if i . then loop ; </syntaxhighlight> :; <code>( n -- )</code>: スタックから整数 <code>n</code> を取り出す。 :* <code>here over erase</code>: 現在のデータスペース(<code>here</code> から先)を <code>n</code> バイト分消去する。 :* <code>2 begin ... repeat</code>: メインのループ。2から始めて、以下の条件に基づいて処理を繰り返す。 :** <code>2dup dup * ></code>: 現在の値を2つコピーし、2つを掛けた値が <code>n</code> を超えるまで続ける。 :** <code>dup prime? if ... then</code>: 現在の値が素数かどうかをチェックし、素数ならば以下を実行。 :*** <code>2dup dup * do ... dup +loop</code>: 素数の場合、その数の倍数を篩い落とす。内側のループで、その数の倍数を全て <code>composite!</code> でマークする。 :** <code>1+</code>: 現在の数値を1増やす。 :* <code>drop</code>: 最後の数値を削除する。 :* <code>." Primes: " 2 do i prime? if i . then loop</code>: 素数を表示するループ。2から始まり、<code>n</code> まで続ける。各数値が素数ならば表示する。 ; 実行 :<syntaxhighlight lang=forth> 100 sieve </syntaxhighlight> :100以下の素数を見つけるために <code>sieve</code> ワードが実行されます。 === CREATEを使った変数と配列の定義 === Forthの <code>CREATE</code> は、新しい変数や配列をディクショナリに定義するためのワードです。<code>CREATE</code> を使うことで、任意の名前で参照可能なデータ領域を確保し、その領域に対する操作を定義することができます。 以下に、<code>CREATE</code> ワードの基本的な構文と使用方法を示します。 ==== 構文 ==== :<syntaxhighlight lang=forth> CREATE name </syntaxhighlight> * <code>name</code>: 定義する変数や配列の名前を指定します。 ==== 使用方法 ==== # 変数の定義 #:<code>CREATE</code> を使って変数を定義する場合、単に変数の初期値を指定します。 #:<syntaxhighlight lang=forth> CREATE my-var 42 , </syntaxhighlight> #:上記の例では、<code>my-var</code> という名前の変数が定義され、初期値として <code>42</code> が設定されています。<code>,</code> はスタックのトップの値を <code>my-var</code> の定義領域に格納するワードです。 # 配列の定義 #: <code>CREATE</code> を使って配列を定義する場合、配列の要素数や初期値を指定します。 #:<syntaxhighlight lang=forth> CREATE my-array 5 ALLOT </syntaxhighlight> #: 上記の例では、<code>my-array</code> という名前の配列が定義され、5つの要素分の領域が確保されます。各要素には初期値が与えられていないため、初期化が必要な場合は別途行います。 ==== 使用例 ==== このForthのコードは、<code>CREATE</code> を使って変数と配列を定義し、それらに値を格納・表示する例です。 ; 変数の定義と使用 :<syntaxhighlight lang=forth> CREATE x \ 変数 x を定義 100 x ! \ x に 100 を代入 x @ . CR \ x の値を表示 </syntaxhighlight> * <code>CREATE x</code>: <code>x</code> という名前の変数を定義します。<code>CREATE</code> はディクショナリに新しいワードを登録しますが、データスペース自体は確保しません。 * <code>100 x !</code>: <code>x</code> のデータフィールドに <code>100</code> を格納します。 * <code>x @ . CR</code>: <code>x</code> のデータフィールドから値を読み取って表示します。<code>CR</code> は改行を出力します。 ; 配列の定義と使用 :<syntaxhighlight lang=forth> CREATE MY-ARY 100 ALLOT \ 100セルの配列を作成 42 MY-ARY 10 + ! \ 11番目の要素に42を代入 MY-ARY 10 + @ . \ 11番目の要素の値を表示 </syntaxhighlight> * <code>CREATE MY-ARY 100 ALLOT</code>: <code>MY-ARY</code> という名前の配列を定義し、100セル分のデータスペースを確保します。 * <code>42 MY-ARY 10 + !</code>: <code>MY-ARY</code> の11番目の要素(0から始まるインデックスなので、10を足します)に <code>42</code> を代入します。 * <code>MY-ARY 10 + @ .</code>: <code>MY-ARY</code> の11番目の要素の値を読み取って表示します。 この例では、<code>CREATE</code> を使って変数 <code>x</code> と配列 <code>MY-ARY</code> を定義し、それぞれに値を設定しています。<code>x</code> は単一の値を格納する変数であり、<code>MY-ARY</code> は複数の要素を持つ配列です。<code>!</code> を使ってデータを代入し、<code>@</code> を使ってデータを取得しています。 Forthの特性として、変数や配列の定義はディクショナリに登録されるため、名前に対して対応するデータ領域へのアクセスが可能となります。これにより、動的なデータ構造を効率的に管理することができます。 === アライメント === Forthの <code>ALIGN</code> ワードは、データ領域のアラインメントを行うためのワードです。アラインメントとは、データがメモリ上で配置される位置を調整することであり、特定のアドレス境界にデータを配置することを指します。 アラインメントの必要性は、プロセッサアーキテクチャに依存しますが、多くのアーキテクチャでは特定のデータ型(例:4バイト整数など)は特定の境界に配置される必要があります。アラインメントが正しく行われないと、メモリアクセスの効率が低下したり、アドレスエラーなどの例外が発生し処理を中断する可能性があります。 ; 構文 :<syntaxhighlight lang=forth> ALIGN </syntaxhighlight> ; 動作 : <code>ALIGN</code> ワードは、データスペースポインタ (<code>HERE</code>) をアラインメント条件に従って調整します。具体的には、通常は2バイトまたは4バイトの境界に <code>HERE</code> を調整します。これにより、次に確保されるデータ領域が適切な境界に配置されます。 ; 使用例 :<syntaxhighlight lang=forth> HERE ALIGN </syntaxhighlight> : 上記の例では、<code>HERE</code> の値をアラインメントされた位置に調整します。これにより、次に確保されるデータ領域が適切な境界に配置されます。 :<syntaxhighlight lang=forth> CREATE my-var ALIGN 2 ALLOT </syntaxhighlight> : この例では、<code>my-var</code> という名前の変数を定義していますが、そのデータ領域が2バイト境界にアラインメントされて確保されます。これにより、<code>my-var</code> のデータ領域は適切な境界に配置され、メモリアクセスの効率が向上します。 <code>ALIGN</code> ワードは、特定のアーキテクチャで必要なメモリアラインメントを確保するために重要な役割を果たします。メモリアクセスの効率を最大化するために、適切なアラインメントが常に考慮されるべきです。 == 入出力と組み込みワード == Forthには標準の入出力ワードがあり、コンソールやファイルからの入出力を行えます。また、様々な組み込みワードが用意されており、これらを活用することでForthの機能を拡張できます。 === 標準入出力 === Forthには、キーボードからの文字入力や、コンソールへの文字出力を行うためのワードが用意されています。 :<syntaxhighlight lang=forth> KEY \ キーボードから1文字読み込む EMIT \ スタック上の値(文字コード)を出力する ." \ 文字列を直接出力する </syntaxhighlight> <code>KEY</code>はキーボード入力を待ち、押された文字のASCIIコードをスタックに置きます。<code>EMIT</code>は逆に、スタック上の値を文字コードとして解釈し、コンソールに出力します。<code>." Hello"</code>のように、<code>."</code> の後に文字列を続けると、その文字列がコンソール出力されます。 数値入出力には、<code>?</code>、<code>U.</code>、<code>U.R</code>などのワードが使えます。<code>?</code>は数値を入力受け付け、<code>U.</code>は符号なし数値を、<code>U.R</code>は数値を指定した基数(2進数、16進数など)で出力します。 === ファイルアクセス === ファイル入出力には、様々なワードが用意されています。<code>OPEN-FILE</code>でファイルを開き、<code>READ-FILE</code>や<code>WRITE-FILE</code>でデータの読み書きができます。 :<syntaxhighlight lang=forth> S" data.txt" R/O OPEN-FILE THROW VALUE HANDLE \ ファイルを読み取りモードで開く HANDLE READ-FILE ABORT" READ ERROR" \ ファイルを読み込む HANDLE CLOSE-FILE THROW \ ファイルを閉じる </syntaxhighlight> ファイル名は、<code>S"</code> で文字列をスタックに置いた後、<code>R/O</code>(読み取り専用)や<code>W/O</code>(書き込み専用)といったモードを指定してファイルを開きます。<code>THROW</code>はエラーがあれば例外を発生させます。 <code>READ-FILE</code>や<code>WRITE-FILE</code>では、バッファ領域のアドレスと読み書きするバイト数をスタックに置く必要があります。 === 組み込みワードの利用 === Forthには、数学関数や論理演算、メモリ操作など、様々な組み込みワードが用意されています。必要に応じてこれらのワードを活用することで、プログラムにさまざまな機能を付加できます。 :<syntaxhighlight lang=forth> 2 3 MAX . \ 最大値(3)を出力 S" HELLO" SWAP DROP \ スタック操作サンプル HEX 1F20 4 DUMP \ メモリダンプ </syntaxhighlight> <code>MAX</code>は2つの数値の最大値を、<code>SWAP</code>は2つの値の順序を入れ替え、<code>DROP</code>は最上位の値を捨てます。<code>DUMP</code>は指定したアドレスからのメモリ内容をダンプ出力します。 組み込みワードには、浮動小数点演算、文字列処理、マルチタスク、IPCなど、様々な分野のものがあります。また、必要に応じてワードを自作したり、外部ライブラリからリンクしたりできます。Forthはコンパクトなシステムながら、組み込みワードの充実により高い機能性を発揮します。 == アプリケーション開発 == Forthは小規模な組み込みシステムから大規模なアプリケーションまで、幅広い用途に使用できる言語です。この章では、Forthにおけるアプリケーション開発の手法と、実例について解説します。 === モジュール化とワード管理 === Forthはワードをベースとしたモジュール性の高いプログラミングができます。大きなアプリケーションを開発する際は、適切にモジュール分割してワードを設計・管理することが重要です。 Forthにはネームスペースの概念がありません。そのため、ワード名の重複を避けるためには、プレフィックスなどの命名規則を定めることが一般的です。たとえば<code>STRING-LENGTH</code>のように、ワードの役割がわかるよう名前を付けます。 また、ワードをまとめてファイルに保存し、必要に応じて読み込む方法があります。Forthの多くの処理系は、ワードの定義をソースファイルに保存したり、メモリイメージを永続化したりできます。 :<syntaxhighlight lang=forth> MARKER MODULE>STRING : STRING-LENGTH \ 文字列の長さを求める ... ; : STRING-REVERSE \ 文字列を反転する ... ; STRING-REVERSESTRING-LENGTH +MODULE </syntaxhighlight> 作成したワードは<code>MODULE>NAME</code>でモジュール名を付け、<code>+MODULE</code>でモジュールを完成させることができます。他のソースから<code>USE MODULE>NAME</code>とすれば、そのモジュールのワードが使用可能になります。 大規模なシステムでは、このようなソースレベルの分割に加え、オーバーレイ、仮想メモリ、マルチタスク機能を活用することで、メモリの効率的な使用が可能です。 === グラフィックス処理 === Forthでもグラフィック処理が可能ですが、組み込みの機能は限られています。ほとんどの処理はユーザ定義ワードとして実装する必要があります。 ビットマップ画像の表示や、ウィンドウ、マウスカーソルなどの基本的なGUIの作成はある程度可能です。高度な3Dグラフィックスなどを実現するには、外部ライブラリを利用する必要があります。 :<syntaxhighlight lang=forth> NEED FRAMEBUFFER \ フレームバッファへのアクセスモジュール : DRAW-LINE ( x1 y1 x2 y2 -- ) \ ブレザンハムのアルゴリズムでライン描画 ... ; : DRAW-RECT ( x y w h -- ) 2SWAP 2>R 2R> \ (x y w h -- x y x+w y+h) DRAW-LINE 2>R 2R> DRAW-LINE 2SWAP DRAW-LINE 2SWAP DRAW-LINE ; FRAMEBUFFER-INIT \ グラフィックスサブシステムの初期化 100 100 300 200 DRAW-RECT \ 長方形を描画 </syntaxhighlight> 上記では、フレームバッファの制御関数がロードされた前提で、<code>DRAW-LINE</code>を使って<code>DRAW-RECT</code>(長方形描画)を実装しています。スタックを活用して座標値を受け渡し、基本的な幾何図形を描画しています。 Forthはグラフィックスパイプラインなどの高度な機能を組み込んでいませんが、スタックベースの処理により、低レベルのデバイスアクセスが可能です。組み込みシステムのディスプレイやLED制御など、グラフィックス関連の処理に適しています。 === システムプログラミング === Forthの本質的な特性として、システムプログラミングに適していることがあげられます。小規模でコンパクト、高速動作、低レベルなメモリアクセスが可能というメリットがあります。 OSカーネル、デバイスドライバ、BIOS、ブートローダなどの開発にForthは広く使われてきました。組み込みシステムでは、センサーやI/Oデバイスの制御に最適です。スタック指向のモデルにより、レジスタレベルの処理が直接かけるのも特徴です。 例えば、Forthを使ってブートローダを実装する場合には、次のようなプログラムになります。 :<syntaxhighlight lang=forth> HEX 07C0 INPORT DROP \ DOSデータ領域クリア 0800 0 20 MOVE \ リセットベクタ設定 KERNEL.IMG LOAD \ カーネル読み込み A000 OUTPORT \ VGAモードへ切り替え 1000 JMP \ カーネル実行 ... \ BIOSブート用の簡単なForth読み込みコード :KERNEL.IMG LOAD CORE SWAP CPU KERNEL ; </syntaxhighlight> BIOSなどの低レベル機能を呼び出してブートローダを構築する処理が、Forthの文法でコンパクトに記述できる様子がわかります。 また、Forth自身が小規模で可搬性が高いため、Forth処理系そのものもForthで書かれた簡単なコアを、ホストOSやアーキテクチャに合わせてセルフホスト (移植) する手法が一般的です。これは、アプリケーションと実行環境を一体化して開発できる利点があります。 == 高度なトピック == ここまでForthの基本的な構文と概念、データ構造、アプリケーション開発の実例などを解説してきました。この章では、Forthの高度な利用方法としてパフォーマンス最適化、マルチスレッド・マルチタスク、メタプログラミングについて取り上げます。 === 最適化とパフォーマンス === Forthはコンパクトで高速な言語ですが、さらなる最適化の余地があります。ワードの定義を工夫したり、ネイティブコードコンパイラを使ったりすることで、パフォーマンスを向上できます。 ワード定義の最適化では、冗長な演算を排除したり、インラインコーディングの手法を用いたりします。例えば、次のようなワード定義があるとします。 :<syntaxhighlight lang=forth> : MAX2 ( n1 n2 -- max ) 2DUP > IF SWAP DROP ELSE NIP THEN ; </syntaxhighlight> この<code>MAX2</code>は一時的に2つの値を複製(<code>2DUP</code>)し、<code>IF</code>..<code>ELSE</code>..<code>THEN</code>の条件分岐で最大値を選びます。しかし、この一時複製が無駄な演算となっています。次のように書くとコードがシンプルになります。 :<syntaxhighlight lang=forth> : MAX2 ( n1 n2 -- max ) OVER OVER > IF SWAP THEN ; </syntaxhighlight> ワードの最適化には一般的なテクニックがあり、Forthのコンパイラ作者から提案されているものを参考にするとよいでしょう。 また、Forthにはネイティブコードコンパイラと呼ばれるもので、ワードの実行コードをネイティブマシン語に変換できるものがあります。Forthの対話的な実行環境は便利ですが、ネイティブコードの方が高速に動作します。こうした最適化手法を使い分けることで、Forthのパフォーマンスを飛躍的に向上できます。 === マルチスレッドとマルチタスク === Forthには並列実行の機構が組み込まれていないため、マルチスレッドやマルチタスク処理を実現するにはユーザ定義の実装が必要です。しかし、Forthの言語特性を活かせばきわめてコンパクトな並列処理ができます。 マルチスレッドでは、スタックを分離し、スレッド毎にスタックのコピーを持つ手法が一般的です。スレッドの切り替えはスタックのコンテキストスイッチで実現できます。また、Forthのデータストアクセス方式を応用すれば、IPC(プロセス間通信)の仕組みを作ることもできます。 :<syntaxhighlight lang=forth> : NEW-TASK ( -- ) HERE CURRENT-STACK >R CREATE-STACK SWAP [: DO-SOME-WORK ;] ( compile: word behavior ) R> SET-CURRENT ; </syntaxhighlight> この例では、新しいタスクを作成するワード<code>NEW-TASK</code>を定義しています。<code>CREATE-STACK</code>でスタックを新しく割り当て、<code>DO-SOME-WORK</code>のようなワード定義をタスクとして登録します。実行時にはスケジューラによってこれらのタスクが実行されます。 マルチタスク機構を実装する例は多数あり、スレッド単位でデータを扱う方式、メッセージキューによる方式、それぞれ長所と短所があります。並列処理にはデッドロックなどの問題点もありますが、Forthではコンパクトでシンプルなコード記述が可能です。 === メタプログラミング === Forthにはプログラムを生成・変更するメタプログラミングの機能があり、コードを自動生成したり、プログラムを動的に変更したりできます。この機能は、Forthをドメイン固有言語(DSL)の開発などに適用できることを意味しています。 メタプログラミングには、コンパイル時に評価される構文<code>[...]</code>と実行時構文<code>EVAL</code>があります。どちらもプログラムをデータとして扱えるため、動的にプログラムを生成・変更できます。 :<syntaxhighlight lang=forth> : HILBERT-CURVE ( n -- ) 0 ?DO [: 2DUP RECURSE >R >R 1 HCURVE R> R> RECURSE 3 HCURVE ;] POSTPONE LITERAL POSTPONE HCURVE LOOP ; </syntaxhighlight> この例では、ヒルベルト曲線を描画するコードを動的に生成しています。<code>POSTPONE</code>はワードのコンパイルを遅延させ、<code>[: ... ;]</code>の構文はその間のテキストを実行可能なコードとしてコンパイルします。この手法により、 Hilbertカーブの次元(<code>n</code>)に応じて、その描画コードを生成しています。 Forthのメタプログラミング機能は、高度な用途に役立ちます。例えば、ユーザインターフェースビルダー、コードジェネレーター、プログラムシンセサイザなどでその力を発揮できます。Forthの柔軟性を最大限に活かせる側面といえるでしょう。 == サンプルプログラムとプロジェクト == Forthの理解を深めるには、実際にコードを書いて動作を確認することが大切です。この章では、様々なサンプルコードを紹介するとともに、実践的なForthプロジェクトの例を示します。 === 様々なサンプルコード === 以下はForthの基本的な機能を示すサンプルコード集です。 ; 再帰によるフィボナッチ数列 :<syntaxhighlight lang=forth> : FIB ( n -- fib-n ) DUP 0= IF DROP 1 EXIT THEN DUP 1 = IF DROP 1 EXIT THEN DUP 1- RECURSE SWAP 2 - RECURSE + ; </syntaxhighlight> ; 文字列操作 :<syntaxhighlight lang=forth> : UPPERCASE ( addr n -- addr n ) OVER + SWAP ?DO I C@ [CHAR] a [CHAR] z 1+ WITHIN IF [CHAR] A [CHAR] a - + THEN I C! LOOP ; : REVERSE-WORDS ( addr n -- ) [CHAR] \ SKIP SPACES OVER >R BEGIN OVER C@ [CHAR] \ <> WHILE [CHAR] \ PARSE DUP >R REVERSE R> OVER C! CHAR+ REPEAT R> DROP 2DROP ; </syntaxhighlight> ; ベクトル・行列計算 :<syntaxhighlight lang=forth> REQUIRE DOUBLE \ 倍精度浮動小数点サポート : VZEROS ( n -- addr ) \ n要素のゼロベクトルを生成 CREATE HERE 0 SWAP 8 * DUP ALLOT FILL ; : MZEROS ( rows cols -- addr ) \ rows x cols の零行列を生成 SWAP VZEROS SWAP 0 ?DO OVER VZEROS COLS + LOOP ; </syntaxhighlight> ; 簡易グラフィックス :<syntaxhighlight lang=forth> VARIABLE FRAMEBUF \ フレームバッファアドレス : PIXEL ( x y color -- ) \ 1ピクセル書き込み FRAMEBUF @ >R 2 * R@ + 3 * RP@ C!+ RP@ C!+ RDROP ; : LINE ( x1 y1 x2 y2 c -- ) \ ラインの描画 >R 2SWAP R> 2>R 2R@ PIXEL 2R> PIXELLINE ; </syntaxhighlight> これらの例は、スタックを使った処理の流れ、ユーザ定義ワードの作成、再帰など、Forthのプログラミング手法の基本を示しています。コンパクトながらも表現力の高さがわかるでしょう。 === 実践的なプロジェクト例 === 次に、もう少し大がかりなForthプロジェクトの例を紹介します。 ; Forth Chip-8 エミュレーター Chip-8はレトロなゲームコンソールで、Forthでその命令セットをエミュレートするプロジェクトです。グラフィックス、入力処理、命令デコーダなどを実装します。 ; カーネルとブートローダ ForthでOSカーネルの基本部分を実装し、ブートローダと合わせてシステムを構築するプロジェクト。メモリ管理、タスク管理、ファイルシステム、ドライバなどの機能が実装できます。 ; Webサーバー ForthでHTTPリクエストを処理するWebサーバーを作成。ソケット通信、文字列処理、ファイル入出力などの機能が必要になります。追加してWebアプリケーションフレームワークなども作れます。 ; オープンソースForthプロセッサ Forthを使ってCPU命令セットを記述し、ゲートレベルまでFPGAに実装するプロセッサの設計プロジェクト。ハードウェア記述言語との連携が重要です。 このようなプロジェクトを通して、Forthの実用性とシステムプログラミングでの可能性を体験できます。Forthという言語自体を使って、OSやハードウェアコンポーネントを実装できるのが最大の特徴です。いずれのプロジェクトも一般的な規模になると、モジュール分割やワード管理、ツール活用などの工夫が必要になります。 == 参考資料 == Forthについてより深く学ぶには、書籍や公開されているオンラインリソースを参照するのが有効な方法です。また、活発なForthコミュニティに参加することで、他の開発者からの助言を得られます。 === 関連書籍の紹介 === Forthの入門書から応用、さらには処理系の実装に至るまで、多くの優れた書籍が出版されています。 * 「Forth入門」レオ・ブロディ (ISBN:978-4875930297 工学社) ** Forth言語の基本から、アプリケーション開発までをカバーした長年の定番書。 * 「Thinking Forth」Leo Brodie (Punchy Publishing) / Forth思考 ―問題解決のための言語と哲学― レオ・ブロディー著 ** Forth哲学に重きを置いた名著。Forthの考え方を深く解説。 * 「Forth Programmer's Handbook」(ISBN:978-1419675492 Forth Inc.) ** ANS Forthの規格書で、WordSetの詳細が書かれている。 これらの書籍を手に入れられれば、Forthの理解が格段に進むはずです。電子書籍としても出版されているものがあります。 === オンラインリソース === {{Wikipedia}} インターネット上にも無料で参照できるForth関連の豊富なリソースが存在します。 * Forth Interest Group ( https://www.forth.org/ ) ** Forthに関する書籍、記事、リソースなどが集まるポータル。 * Forth-Standard-Committee 公式サイト( https://forth-standard.org/ ) Webサイト、ソースコード、ニュースレターなど、さまざまな形でリソースが公開されているので、活用していきたいものです。 === Forthコミュニティ === 長年にわたりForth言語を支える活発なコミュニティが存在し、開発者同士が支え合う環境があります。 * Newsgroups: comp.lang.forth ** ディスカッションの場となるForth専用のニュースグループ。 * 地域 Forth グループ ** ヨーロッパ、アメリカ、アジアなどの地域Forthグループ。 オンラインフォーラムやメーリングリスト、対面の勉強会など、様々な形でForth開発者同士が交流を深めています。初心者でもこうしたコミュニティに参加することで、サポートを受けられます。Forthの小さな世界ですが、地域を越えて開発が行われているのが特徴です。 Forthの参考文献やオンラインリソース、そしてコミュニティを上手く活用することで、この独特な言語の理解が一層深まるはずです。 == 脚註 == <references /> [[Category:Forth|*]] [[Category:プログラミング言語]] k9o965iu9k8mv5aq9pplwqm6w738kt8 246678 246677 2024-04-14T03:40:29Z Ef3 694 /*Hello, world!*/ Forthでは、.(ワードはデリミター )に囲まれた文字列を指定し表示します。 .( Hello, world!) cr これにより、"Hello, world!" が表示されます。 wikitext text/x-wiki == はじめに == Forthはスタック指向のプログラミング言語であり、そのシンプルさと柔軟性から広く用いられています。 本書は、プログラマがForthを効果的に使いこなすための手引書として設計されています。例示や実践的なヒントが豊富に盛り込まれており、読者は理論を理解しながら実際のプロジェクトに応用できるでしょう。 本書を通じて、Forthの魅力と実力を十分に体感し、その利用価値を最大限に引き出すことができるでしょう。 本書では、ForthのCore Word Setに準拠した標準的なForthシステムを題材とします。 == Forthプログラミングの基礎 == Forthはスタック指向のプログラミング言語であり、独自の特徴を持っています。以下では、Forthプログラミングの基礎を解説します。 === Hello, world! === Forthでは、<code>.(</code>ワードはデリミター <code>)</code>に囲まれた文字列を指定し表示します。 :<syntaxhighlight lang=forth> .( Hello, world!) cr </syntaxhighlight> これにより、"Hello, world!" が表示されます。 <!-- これはコンパイル時のコードではなく、実行時のコードです。対話モードで直接実行することができます。 --> === スタック操作 === [[スタック構造|スタック]]は、Forthにおける中心的なデータ構造です。ほとんどのワードは、スタックから値を取り出したり、スタックに値を代入したりします。スタックは、後入れ先出し(LIFO; Last In First Out)のデータ構造で、Forthの演算はスタック上で行われます。 === 例 === 以下は、Forthでの簡単な計算の例です: :<syntaxhighlight lang=forth> 3 4 + . </syntaxhighlight> : まず<code>3</code>をスタックに置き、<code>4 + .</code> を解釈します。 : 次に、<code>4</code>をスタックに置き、<code>3 4</code> となり、<code>+ .</code> が残ります。 : そして、<code>+</code> はスタックのトップの2つの要素を加算して結果を戻し、スタックには<code>7</code>だけが残ります。 : 最後に、<code>.</code>(ドット)はスタックから<code>7</code>を取り除いてそれを表示します。 :{| |- !コード!!style='width:3em'| 3 !!style='width:3em'| 4 !!style='width:3em'| + !!style='width:3em'| . |- !スタックトップ |style="border:1px solid black; text-align:center"| 3 ||style="border:1px solid black; text-align:center"| 4 ||style="border:1px solid black; text-align:center"| 7 || |- ! | ||style="border:1px solid black; text-align:center"| 3 || || |- !出力 | || || ||style="text-align:center; font-weight: bold"| 7 |} === コメント === Forthでは、コメントは括弧で囲んで表現されます。例えば: :<syntaxhighlight lang=forth> ( これはコメントです ) </syntaxhighlight> <code>/</code> から行末までもコメントです :<syntaxhighlight lang=forth> 3 4 + \ 3 + 4 の結果をスタックトップに残す </syntaxhighlight> コメントは、インタプリタの動作に影響を与えません。 === スタックエフェクト === Forthの各ワードは、スタック上で特定の操作を行います。ワードのドキュメントでは、それがスタックに対してどのような影響を与えるかを示す記述があります。例えば: :<syntaxhighlight lang=forth> + ( a b -- c ) </syntaxhighlight> この記述は、<code>+</code>ワードが2つの引数(<code>a</code>と<code>b</code>)を消費し、1つの結果(<code>c</code>)をスタックに残すことを意味します。 === Forthのワードとは?その定義と使用について === Forthにおける「ワード」とは、基本的には単語や言葉を意味しますが、Forthプログラミングでは、より具体的には次の2つの意味を持ちます。 # 定義済みの単語 #: ワードは、Forthの語彙において定義された単語や操作を指します。Forthでは、これらのワードはスタック操作や制御構造、算術演算などの基本的な機能を表します。例えば、<code>+</code>は2つの数値を取り出して足し合わせ、結果をスタックに戻すワードです。 # 新しい単語の定義 #: ワードは、Forthプログラム内で新しい単語を定義するための仕組みとしても使われます。これは、既存のワードを組み合わせて、新しい機能を持つ単語を定義することを意味します。例えば、<code>DOUBLE</code>というワードを定義して、与えられた数値を2倍にするような操作を定義することができます。 ワードの定義は、通常、次のような形式で行われます: :<syntaxhighlight lang=forth> : ワード名 ( 定義部分 ) ; </syntaxhighlight> ここで、<code>: ワード名</code>は新しいワードの定義を開始し、<code>;</code>は定義の終了を示します。定義部分には、既存のワードや操作を組み合わせて、新しい機能を実現するForthのコードが記述されます。 === ワードの定義と使用例 === Forthにおけるワードの定義と使用についてさらに詳しく説明します。 # ワードの定義 : #: ワードは、<code>:</code> と <code>;</code> の間に記述されたコードブロックで定義されます。 #: 例えば、<code>SQUARE</code>という新しいワードを定義してみましょう。 #:<syntaxhighlight lang=forth> : SQUARE ( n -- n*n ) DUP * ; </syntaxhighlight> #: ここでは、<code>SQUARE</code>というワードが定義されています。このワードは、スタックから1つの数値を取り出し、その数値を自乗して結果をスタックに戻します。 # ワードの使用 : #: 定義したワードは、Forthプログラム内で直接使用することができます。 #:<syntaxhighlight lang=forth> 5 SQUARE . \ スタックから5を取り出して自乗し、結果を表示する </syntaxhighlight> #:上記の例では、<code>5 SQUARE .</code> というForthコードが実行されます。まず、<code>5</code>がスタックに積まれ、次に<code>SQUARE</code>ワードが実行されて、<code>5</code>の自乗である<code>25</code>が計算されます。最後に<code>.</code>はスタックのトップの値を表示しますので、結果として<code>25</code>が表示されます。 # 組み込みワードとカスタムワード : #: Forthには組み込みのワード(<code>+</code>, <code>-</code>, <code>*</code>, <code>/</code>など)がありますが、ユーザーはこれに加えて独自のワードを定義することができます。カスタムワードを使うことで、プログラムをより効率的に構築できます。 # 再帰的なワード : #: Forthでは、ワードは自身の中で再帰的に呼び出すことができます。これにより、複雑な演算や制御構造を簡潔に表現することが可能です。 ワードの定義と使用は、Forthプログラムの中核的な部分を構成します。これにより、プログラムの再利用性、メンテナンス性、可読性が向上し、効率的なコーディングが実現されます。 === 基本的な制御構造 === Forthの制御構造は、他のプログラミング言語とは異なり「制御構造もワードの集合から定義する」という独自の特徴を持っています。Forthでは、基本的な制御構造として条件分岐とループが利用されます。 制御構造に関するワードは、コンパイル時(つまり <code>:</code> から <code>;</code> までの間)でのみ使用でき会話モードでは使用できません。 ==== 条件分岐 ==== Forthでは、条件分岐は主に <code>IF</code>, <code>ELSE</code>, <code>THEN</code> のワードを組み合わせて実現されます。 ; 例: :<syntaxhighlight lang=forth> : ABS ( n -- |n| ) DUP 0< IF NEGATE THEN ; </syntaxhighlight> この例では、<code>ABS</code>というワードを定義しています。このワードは、スタックから数値を取り出し、その絶対値を計算して結果をスタックに戻します。<code>DUP 0<</code> はスタックトップの値が0より小さいかどうかをチェックし、<code>IF</code> から <code>THEN</code> の間に記述されたブロックが条件を満たす場合に実行されます。つまり、もし数値が負の場合は <code>NEGATE</code> が実行されます。 ==== ループ ==== Forthでは、ループは <code>DO</code>, <code>LOOP</code> や <code>BEGIN</code>, <code>WHILE</code>, <code>REPEAT</code> のワードを使って実装されます。 ; 例: :<syntaxhighlight lang=forth> : COUNTDOWN ( n -- ) 0 DO I . LOOP ; </syntaxhighlight> 上記の例では、0から与えられた数値(<code>n</code>)までカウントダウンする<code>COUNTDOWN</code>というワードを定義しています。 ==== その他の制御構造 ==== Forthには他にも、<code>CASE</code>, <code>OF</code>, <code>ENDOF</code>, <code>ENDCASE</code> を使った条件分岐や、<code>IF-ELSE-ENDIF</code> 構造、<code>BEGIN-UNTIL</code>、<code>BEGIN-WHILE-REPEAT</code> など、さまざまな制御構造が存在し、新たな制御構造をユーザーが定義することすら出来ます。 Forthの制御構造は、スタック指向の特性に基づいてシンプルかつ柔軟に設計されており、独自のプログラミングスタイルを持つことが特徴です。 === スタック操作の基本命令 === Forthにはスタック上のデータを操作するための基本的な命令があります。 * <code>DUP</code>: ( n -- n n ) スタックのトップの要素を複製する * <code>DROP</code>: ( n -- ) スタックのトップの要素を削除する * <code>SWAP</code>: ( n1 n2 -- n2 n1 ) スタックのトップとその下の要素を交換する * <code>OVER</code>: (n1 n2 -- n1 n2 n1 ) スタックのトップの2つ下の要素を複製してトップに置く * <code>ROT</code>: ( n1 n2 n3 — n2 n3 n1 ) スタックのトップの3つ下の要素をトップに回転する === 基本的な演算 === Forthには、算術演算(<code>+</code>、<code>-</code>、<code>*</code>、<code>/</code>など)、論理演算(<code>AND</code>、<code>OR</code>、<code>NOT</code>)、比較(<code>=</code>、<code><></code>、<code>></code>、<code><</code>など)の基本ワードが用意されています。これらのワードは、スタック上の値を取り、演算結果をスタックに代入します。 === 再帰的呼び出し === Forthで再帰的呼び出しを行う場合、ワード <code>recurse</code> を使ってワード自身を表します。 再帰的なワードを定義する方法について説明します。 ==== 階乗 ==== 再帰的な階乗(factorial)を定義します。 :<syntaxhighlight lang=forth> : factorial ( n -- result ) dup 0= if \ スタックのトップの値が0かどうかをチェック drop 1 \ もし0ならば、結果は1として処理を終了 else dup 1 - \ スタックのトップの値から1を引いた値をコピー recurse * \ 再帰的に自身を呼び出して、その結果にスタックのトップの値を掛ける then ; </syntaxhighlight> この定義の内容を説明します。 * ワード <code>factorial</code> は、<code>( n -- result )</code> のスタックエフェクトを持ちます。<code>n</code> は階乗を計算する整数です。 * <code>dup 0=</code>: スタックのトップの値が0かどうかをチェックします。 ** もし0ならば、<code>drop 1</code> が実行されて、スタックのトップの値(<code>n</code>)が削除され、結果として <code>1</code> がスタックにプッシュされます。 * <code>else</code>: もしスタックのトップの値が0でない場合は、次の操作が実行されます。 ** <code>dup 1 -</code>: スタックのトップの値から <code>1</code> を引いた値をスタックにプッシュします。これは <code>n - 1</code> の計算です。 ** <code>recurse *</code>: 自身の <code>factorial</code> を再帰的に呼び出して、結果に対してスタックのトップの値(<code>n</code>)を掛けます。これにより、<code>n! = n * (n-1)!</code> の計算が行われます。 * <code>then</code>: <code>if</code> ブロックの終了を示します。 例えば、<code>5 factorial .</code> を実行すると、<code>5</code> の階乗(<code>5!</code>)が計算されます。 :<syntaxhighlight lang=forth> 5 factorial . </syntaxhighlight> この例では、<code>5!</code> の計算手順は以下の通りです: * <code>5</code> がスタックにプッシュされる。 * <code>factorial</code> が呼び出される。 ** <code>dup 0=</code>: スタックのトップの値が0でないので、次の処理が実行される。 ** <code>dup 1 -</code>: <code>5 - 1</code> が計算されて <code>4</code> がスタックにプッシュされる。 ** <code>recurse *</code>: <code>4</code> の階乗 (<code>4!</code>) が再帰的に計算される。 *** <code>dup 0=</code>: スタックのトップの値が0でないので、次の処理が実行される。 *** <code>dup 1 -</code>: <code>4 - 1</code> が計算されて <code>3</code> がスタックにプッシュされる。 *** <code>recurse *</code>: <code>3</code> の階乗 (<code>3!</code>) が再帰的に計算される。 **** ... ***** 最終的に、<code>1</code> の階乗 (<code>1!</code>) が計算されて <code>1</code> がスタックにプッシュされる。 **** <code>5 *</code>: <code>5</code> と <code>4!</code> の結果を掛けて <code>120</code> がスタックにプッシュされる。 *** <code>5 *</code>: <code>5</code> と <code>120</code> の結果を掛けて <code>120</code> がスタックにプッシュされる。 * <code>. (dot)</code> コンパイラワ ==== 最大公約数(GCD) ==== 再帰的にユークリッドのアルゴリズムを使用して最大公約数(Greatest Common Divisor, GCD)を計算します。 :<syntaxhighlight lang=forth> : gcd ( u1 u2 -- gcd ) dup 0= if \ スタックのトップの値が0かどうかをチェック drop \ スタックのトップの値が0ならば削除して終了 else swap over mod recurse \ スタックのトップと2番目の値を入れ替えて、modを計算し再帰的に呼び出す then ; </syntaxhighlight> このプログラムの動作をステップごとに説明します: # <code>dup 0=</code>: スタックのトップの値(<code>u1</code>)が0かどうかをチェックします。 #* もし0ならば、<code>drop</code> が実行されて、スタックのトップの値(<code>u1</code>)が削除されます。この場合は再帰の終了条件となります。 # <code>else</code>: もしスタックのトップの値(<code>u1</code>)が0でない場合は、次の操作が実行されます。 # <code>swap over mod recurse</code>: #* <code>swap</code>: スタックのトップと2番目の値を入れ替えます。これにより、<code>u1</code> と <code>u2</code> の値が入れ替わります。 #* <code>over</code>: スタックの2番目の値(入れ替え前の <code>u1</code>)をスタックのトップにコピーします。 #* <code>mod</code>: スタックのトップの2つの値を取り出して、<code>u1 % u2</code>(<code>u1</code> を <code>u2</code> で割った余り)を計算し、その結果をスタックにプッシュします。 #* <code>recurse</code>: 自身の <code>gcd</code> を再帰的に呼び出します。これにより、新しい <code>u1</code> と <code>u2</code> の値がスタックに積まれ、再帰的に最大公約数が計算されます。 # <code>then</code>: <code>if</code> ブロックの終了を示します。 例えば、<code>12 18 gcd .</code> を実行すると、以下のように動作します: * <code>12</code> と <code>18</code> がスタックにプッシュされます。 * <code>gcd</code> が呼び出されます。 ** <code>dup 0=</code>: <code>18</code> は0ではないので、次の処理に進みます。 ** <code>swap over mod recurse</code>: <code>18</code> と <code>12</code> が入れ替わり、<code>18 % 12</code> が計算されます(余りは <code>6</code>)。 ** <code>gcd</code> が再帰的に呼び出され、新しい値 <code>12</code> と <code>6</code> がスタックにプッシュされます。 *** <code>dup 0=</code>: <code>6</code> は0ではないので、次の処理に進みます。 *** <code>swap over mod recurse</code>: <code>6</code> と <code>12</code> が入れ替わり、<code>6 % 12</code> が計算されます(余りは <code>6</code>)。 *** <code>gcd</code> が再帰的に呼び出され、新しい値 <code>6</code> と <code>6</code> がスタックにプッシュされます。 **** <code>dup 0=</code>: <code>6</code> は0ではないので、次の処理に進みます。 **** <code>swap over mod recurse</code>: <code>6</code> と <code>6</code> が入れ替わり、<code>6 % 6</code> が計算されます(余りは <code>0</code>)。 **** <code>0=</code>: <code>0</code> が0なので、<code>drop</code> が実行されて、スタックのトップの値 <code>0</code> が削除されます。 * 最終的に、スタックのトップには <code>6</code> が残ります。これが <code>12</code> と <code>18</code> の最大公約数です。 したがって、<code>12 18 gcd .</code> を実行すると、<code>6</code> が表示されます。 === 変数の宣言・代入と参照 === Forthにおける <code>VARIABLE</code> は、変数を定義するためのワードです。Forthでは、変数はメモリ内のアドレスに名前を関連付ける方法で定義されます。 以下は、<code>VARIABLE</code> を使用して変数を定義する方法とその使い方の例です。 ==== <code>VARIABLE</code> の使用方法 ==== <code>VARIABLE</code> は以下のように使用します: :<syntaxhighlight lang=forth> VARIABLE my-var \ my-var という名前の変数を定義する </syntaxhighlight> この行は、名前が <code>my-var</code> の変数を定義します。この変数はメモリ内の特定のアドレスに関連付けられます。 ==== 変数の使用方法 ==== 定義された変数を使用するには、<code>@</code>(fetch)や <code>!</code>(store)などのワードを使います。これらのワードを使って変数の値を取得したり設定したりできます。 - <code>@</code> は、変数の値をスタックにプッシュします。 - <code>!</code> は、スタックのトップの値を変数に代入します。 例えば、次のように変数に値を設定して取得します: :<syntaxhighlight lang=forth> 123 my-var ! \ 変数 my-var に値 123 を代入する my-var @ . \ 変数 my-var の値を表示する </syntaxhighlight> この例では、変数 <code>my-var</code> に <code>123</code> を代入し、その後 <code>@</code> を使って変数の値を取得して表示しています。 ==== 実際の例 ==== 以下は、<code>VARIABLE</code> を使って変数を定義し、値を設定して取得する具体的な例です: :<syntaxhighlight lang=forth> VARIABLE my-var \ my-var という名前の変数を定義する 123 my-var ! \ 変数 my-var に値 123 を代入する my-var @ . \ 変数 my-var の値を表示する </syntaxhighlight> この例では、変数 <code>my-var</code> を定義し、<code>123</code> を代入してその値を表示しています。<code>!</code> で変数に値を設定し、<code>@</code> で変数の値を取得しています。 変数はプログラムでデータを保持する際に便利です。Forthでは、変数の値は直接メモリ上に代入されるため、効率的なデータ管理が可能です。 === 定数の定義と参照 === Forthの <code>CONSTANT</code> は、定数を定義するためのワードです。定数は変更されることのない値であり、プログラムの中で何度も使われる値を簡潔に表現するために使用されます。 ==== <code>CONSTANT</code> の使用方法 ==== <code>CONSTANT</code> は以下のように使用します: :<syntaxhighlight lang=forth> 123 CONSTANT my-const \ my-const という名前の定数を定義する </syntaxhighlight> この行は、名前が <code>my-const</code> の定数を定義し、その値を <code>123</code> に設定します。定数はプログラム中で使用される値を一元管理し、可読性を向上させます。 ==== 定数の使用方法 ==== 定義された定数は、その名前を使ってプログラム中で値を参照することができます。 :<syntaxhighlight lang=forth> my-const . \ 定数 my-const の値を表示する </syntaxhighlight> この例では、定数 <code>my-const</code> の値が表示されます。 ==== 実際の例 ==== 以下は、<code>CONSTANT</code> を使って定数を定義し、その定数を使用する具体的な例です: :<syntaxhighlight lang=forth> 123 CONSTANT my-const \ my-const という名前の定数を定義する my-const . \ 定数 my-const の値を表示する </syntaxhighlight> この例では、定数 <code>my-const</code> を <code>123</code> に設定し、その後定数の値を表示しています。 定数はプログラム中で共通の値を使い回す際に便利です。Forthの定数は一度定義されると値が変更されることはなく、プログラム全体で一貫性のある値を提供します。 === 基数 === Forthの <code>BASE</code> は、数値の基数(n進数のn)を設定するための変数です。Forthでは、数値の表現において基数を変更することができます。通常、Forthはデフォルトで10進数を使用しますが、<code>BASE</code> を変更することで他の基数(2進数、16進数など)で数値を表現することが可能です。 ==== <code>BASE</code> の使用方法 ==== <code>BASE</code> は以下のように使用します: :<syntaxhighlight lang=forth> 16 BASE ! \ 基数を16進数に設定する </syntaxhighlight> この行は、<code>BASE</code> の値を <code>16</code> に設定しています。これにより、その後の数値の表示や入力が16進数で行われるようになります。 ==== 基数の変更と数値の表現 ==== <code>BASE</code> を変更することで、その後の数値リテラルの表現が変わります。例えば、<code>BASE</code> を16進数に設定した場合、数値リテラルは16進数として解釈されます。 :<syntaxhighlight lang=forth> 16 BASE ! \ 基数を16進数に設定する FF . \ 16進数の255を表示する </syntaxhighlight> この例では、<code>BASE</code> を16進数に設定してから、<code>FF</code> を表示すると、16進数の <code>FF</code> (10進数の <code>255</code>)が表示されます。 ==== デフォルトの基数と再設定 ==== Forthのデフォルトの基数は10進数です。基数を変更した後は、必要に応じて再度基数を10進数に戻すことができます。 :<syntaxhighlight lang=forth> DECIMAL BASE ! \ 基数を10進数に戻す </syntaxhighlight> この行は、<code>BASE</code> を10進数に再設定しています。これにより、数値リテラルは再び10進数として解釈されるようになります。 よくある間違い: :<syntaxhighlight lang=forth> 10 BASE ! \ 基数を16進数から10進数に戻す??? </syntaxhighlight> : として基数を10に戻そうとするミスがあります。 : コードの 10 は16進数として解釈されるので基数は16のままです。 ==== 注意点 ==== <code>BASE</code> を変更すると、数値の解釈や表示が変わるため、基数の変更後には適切な基数に戻すことが重要です。また、<code>BASE</code> の値は変数として扱われるため、必要に応じて保存や復元することができます。 基数を変更することで、特定の基数で数値を扱うプログラムを簡単に記述することができます。 === イミディエイトワード === イミディエイトワード(immediate word)は、Forthプログラミング言語において特定の動作を持つワードの一種です。イミディエイトワードは、通常のワードとは異なり、コンパイル時ではなく実行時に直ちに処理されます。 以下は、イミディエイトワードの特性について詳しく説明します: # 実行時処理: #* イミディエイトワードは、定義された時点ではコンパイルされず、実行時に直ちに解釈および実行されます。 #* 通常のワード(コンパイルワード)は、単なるコンパイル時にスタックに動作を積むだけであり、後で実行されますが、イミディエイトワードは定義された時点ですぐに実行されます。 # 定義方法: #* イミディエイトワードは、<code>IMMEDIATE</code> を使用して定義されます。 #* これにより、そのワードが定義された直後に実行されるようにマークされます。 # 使用例: #* 例えば、<code>."</code>(ダブルクォートピリオド)はイミディエイトワードです。これは、コンパイル時ではなく実行時に文字列を表示します。 #* <code>: greeting ." Hello, world!" ;</code> という定義では、<code>. "</code>Hello, world!"<code> はコンパイル時に実行されず、</code>greeting` を実行したときに実行されます。 # 動的な挙動: #* イミディエイトワードは、通常のワードとは異なり、実行時の環境やスタックの状態に応じて動的に振る舞います。 #* これにより、実行時に動的なテキストや操作を生成するために使用することができます。 イミディエイトワードは、Forthの柔軟性と強力な動的な特性を提供します。コンパイル時に制御構造や動作を決定するだけでなく、実行時に動的な挙動を持つことができます。 {{コラム|Forthの文法|2=Forthのプログラムは、空白文字で区切られた「ワード」の並びで構成されます。ワードには、数値リテラル、制御構造、演算子、そして他のワードを呼び出す構文などがあります。Forthには高水準の構文がなく、基本的な構文要素は非常にシンプルです。 例えば、<code>2 3 +</code> と入力すると、2と3がスタックにプッシュされ、最後の<code>+</code>がスタック上の2つの数値を加算します。この結果である5がスタックに残ります。つまり、Forthではプログラムの実行とデータ操作が、ワードの解釈とスタック操作によって行われるのです。 Forthは、基本的に行指向の言語です。プログラムは複数行に分割できますが、改行の前後で文が継続する場合は、スペースを入れる必要があります。このため、適切なインデントを使ってプログラムの構造をわかりやすくすることが重要です。 }} == データ型 == Forthには明示的なデータ型宣言がないため、データ型は主に暗黙的に扱われます。Forthでは、データ型はデータの解釈や使用方法に依存します。以下では、Forthでよく使用されるデータ型について説明します。 === セル(Cell) === セルは、通常2バイトまたは4バイトのサイズを持つ整数型です。Forthの基本的なデータ型であり、スタックやメモリ内のデータはセル単位で扱われます。セルのサイズは実装によって異なる場合があります。 === 符号付き整数(Signed Integer)と符号なし整数(Unsigned Integer) === Forthは整数を符号付きとしても、符号なしとしても扱うことができます。通常はセル内のビットパターンに基づいて解釈されます。算術演算や比較演算などが適用されますが、具体的な整数型に明示的に制限はありません。 === 文字(Character) === Forthでは文字は通常、符号なし整数として扱われます。ASCII文字セット内の範囲(通常は0から255)の数値として表現されます。文字に対する演算は、数値としての操作として扱われます。 === 文字列(String) === 文字列はカウント付き文字列(Counted String)やnull終端文字列(Null-terminated String)として表現されることがあります。カウント付き文字列では、最初のバイトが文字列の長さを示し、その後に文字のデータが続きます。文字列は通常、メモリ上の連続した領域に格納されます。文字列の操作には、<code>WORD</code>、<code>FIND</code>、<code>C"</code>などの専用のワードが用意されています。 === アドレス(Address) === Forthではアドレスも整数として扱われます。アドレスはメモリ上の位置を示す整数値であり、アドレス演算は通常の整数演算と同様に行われます。アドレス演算には、<code>CHAR+</code>、<code>CELLS</code>、<code>FLOAT+</code>などの専用のワードが用意されています。 === データ型の制約と振る舞い === Forthでは、データ型に関する制約やチェックはコンパイラやランタイムによっては'''行われません'''。プログラマはデータを正しく扱う責任があります。特にプログラムの移植性を考慮する場合は、適切なデータ型の使用が重要です。 データ型はForthの柔軟性とパフォーマンスの両方をサポートするため、プログラマに柔軟性と責任を与えます。それぞれのアプリケーションや環境に応じて、適切なデータ型を選択することが重要です。 == 浮動小数点数 == Forthの浮動小数点数についての情報は、Forth-2012仕様におけるオプションの浮動小数点数ワードセットに関連しています。以下にその内容の要点をまとめます。 ; 浮動小数点数の基本 :* 浮動小数点数は、<code>DECIMAL</code>の<code>BASE</code>で入力する必要があります。任意の基数での浮動小数点数の入力は許可されていません。 :* 標準システムで解釈されるすべての浮動小数点数には、指数インジケーター "E" を含める必要があります。 :;浮動小数点数の例 ::<syntaxhighlight lang=forth> 1e 3.14e 1.2e3 1e9 </syntaxhighlight> ; 浮動小数点数のフォーマットと範囲 :* 浮動小数点数の有効桁数や指数のフォーマット、範囲は、Forth-2012では実装に依存します。IEEE浮動小数点数フォーマットが一般的に使用されています。 ; 浮動小数点数のワードセット :* Floating-Point Extensionsワードセットには、<code>DF@</code>、<code>SF@</code>、<code>DF!</code>、<code>SF!</code>などのワードが含まれています。これらは、倍精度および単精度のIEEE浮動小数点フォーマットの数値をメモリに格納するためのものです。 ; 浮動小数点数の入力 :* 浮動小数点数をASCII形式で入力するためには、<code>>FLOAT</code>ワードが使用されます。これは、標準Forthシステムや他の広く使用されるプログラミング環境からデータを受け入れるために広範な構文を許容します。 ; 実装の注意点 :* カスタムの浮動小数点数データ構造を定義する際には、アドレスの整列(alignment)に注意する必要があります。<code>CREATE</code>が適切な浮動小数点数の整列を行わない場合は、コンパイル時および実行時に適切な整列を指定する必要があります。 == ローカル変数 == ForthのOPTIONAL Locals word set(ローカルワードセット)は、Forthのプログラミングでローカル変数を定義するための機能を提供します。以下は、このワードセットに関する情報の要約です。 ; ローカル変数の定義方法 :* <code>(LOCAL)</code> ワードや <code>LOCALS|</code> ワードを使用して、ローカル変数を定義します。 :* <code>{ ... }</code> または <code>{: ... :}</code> の表記を使用して、ローカル変数を囲みます。<code>: ... :</code> の形式は、他のシステムとの名前の衝突を避けるための妥協形式です。 ; ローカル変数の種類 :* ローカル変数は、初期化されたものと初期化されていないものに分けられます。初期化されたローカル変数はデータスタックから実行時に初期化されます。 ; 定義の終了 :* ローカル変数の定義は <code>--</code> もしくは <code>:}</code> で終了します。これにより、ローカル変数の定義中に完全なスタックコメントを記述することが可能です。 ; 文法と慣習 :* ローカル変数の引数と値の区切りには <code>|</code> を使用しますが、他のシステムでは <code>{ ... }</code> の表記が競合する場合があります。 :* 実装によっては、別の区切り文字(例: <code>\</code>, <code>¦</code>)を使用する場合がありますが、移植性を確保するためには <code>|</code> の使用が推奨されます。 ; 予約事項 :* ローカル変数の名前には、特定の文字(<code>:</code>、<code>[</code>、<code>^</code>)で終わる名前は予約されています。 Forthのローカル変数機能は、実装によって異なる場合がありますが、一般的な慣習として、<code>(LOCAL)</code> や <code>{: ... :}</code> の表記が広く使用されています。移植可能なプログラムを書く場合は、このような慣習に準拠することが重要です。 == ファイル操作 == Forthのファイル操作に関連するオプションのワードセットである「File-Access」についての情報を要約します。 === ファイル操作の機能 === # '''CREATE-FILE''' (<code>CREATE-FILE</code>) #* ファイルを作成するためのワードです。 #* 例: <code>S" TEST.FTH" R/W CREATE-FILE ABORT" CREATE-FILE FAILED" ;</code> # '''OPEN-FILE''' (<code>OPEN-FILE</code>) #* ファイルをオープンするためのワードです。 #* 例: <code>S" TEST.FTH" R/W OPEN-FILE ABORT" OPEN-FILE FAILED" ... ;</code> # '''READ-FILE''' (<code>READ-FILE</code>) #* ファイルからデータを読み込むためのワードです。 #* 典型的なシーケンシャルなファイル処理アルゴリズム: #:<syntaxhighlight lang=forth> BEGIN ... READ-FILE THROW ?DUP WHILE ... REPEAT </syntaxhighlight> # '''READ-LINE''' (<code>READ-LINE</code>) #* ファイルから行単位でデータを読み込むためのワードです。 #* 典型的な行指向のシーケンシャルなファイル処理アルゴリズム: #:<syntaxhighlight lang=forth> BEGIN ... READ-LINE THROW WHILE ... REPEAT DROP </syntaxhighlight> # '''INCLUDE''' (<code>INCLUDE</code>) #* 指定されたファイルを読み込んで実行するためのワードです。 #* 例: <code>INCLUDE filename</code> # '''REQUIRE''' (<code>REQUIRE</code>) #* 指定されたファイルを読み込んで実行するためのワードです。 #* 例: <code>REQUIRE filename</code> # '''REQUIRED''' (<code>REQUIRED</code>) #* 指定されたファイルを読み込んで実行するためのワードです。 #* 例: <code>S" filename" REQUIRED</code> === ファイル操作の注意事項 === * ファイルを再利用する際は、前のファイルのブロックバッファをフラッシュして、誤った関連付けを避ける必要があります。 * <code>S"</code> や <code>S\"</code> で使用される一時バッファは、2つの連続する文字列を格納できるようにする必要があります。バッファが不足している場合は、最も古いバッファを上書きすることができます。 == 例外処理 == Forthの例外処理に関する情報を要約します。 Exception word set はオプショナルなので、実装していない処理系もありえます。 === CATCH と THROW === * '''CATCH''' (<code>CATCH</code>): 例外ハンドリングの開始をマークします。CATCH ブロック内のコードが例外を THROW すると、CATCH は例外コードをキャッチして対応する処理を行います。 * '''THROW''' (<code>THROW</code>): 例外を発生させ、対応する CATCH ブロックに制御を戻します。例外コードが与えられると、THROW は対応する CATCH のスタック状態を復元し、適切な処理を行います。 === 例外処理の重要性と利用法 === * '''例外処理の重要性''': ABORT などの状況でプログラムの制御を維持するために例外ハンドラを使用します。 * '''例外処理の利用法''': 例外処理は、ファイルのテキスト解釈中に発生した例外をキャッチしてファイルをクローズするなど、プログラムの安全な実行を保証します。 === 具体例 === :<syntaxhighlight lang=forth> : could-fail ( -- char ) KEY DUP [CHAR] Q = IF 1 THROW THEN ; : do-it ( a b -- c) 2DROP could-fail ; : try-it ( --) 1 2 ['] do-it CATCH IF ( x1 x2 ) 2DROP ." There was an exception" CR ELSE ." The character was " EMIT CR THEN ; : retry-it ( -- ) BEGIN 1 2 ['] do-it CATCH WHILE ( x1 x2) 2DROP ." Exception, keep trying" CR REPEAT ( char ) ." The character was " EMIT CR ; </syntaxhighlight> * <code>could-fail</code>: キーボードからキーを読み取り、特定の条件で例外を発生させます。 * <code>do-it</code>: 例外を発生させる可能性のある処理を行います。 * <code>try-it</code>: <code>do-it</code> を実行し、例外が発生した場合は例外メッセージを表示します。 * <code>retry-it</code>: <code>do-it</code> を実行し、例外が発生した場合はリトライし続けます。 == 実行トークン == Forthにおける実行トークン(Execution Token; xt)は、ワード(Word)や定義体(Definition)の実行を指示するためのデータ構造です。実行トークンは、コードワードを指すための一意の識別子として機能します。以下は、Forthの実行トークンについての詳細です。 ; 実行トークンの定義 : 実行トークンは、通常、ワードや定義体の実行を示すために使用される整数またはポインタです。これは通常、コンパイラやインタプリタ内部で使用され、特定のワードや定義体を表す一意の識別子として機能します。 ; 実行トークンの使用 : Forthのコードは、実行トークンを使用してワードや定義体を実行します。実行トークンは通常、スタックや辞書(Dictionary)に格納され、必要なときに取り出されて使用されます。 ; ' (Tick) 記号 : 一般的なForthのプログラミングスタイルでは、実行トークンを取得するためにシングルクォート(')記号が使用されます。例えば、<code>' DUP</code> は <code>DUP</code> ワードの実行トークンを取得します。 ; 実行トークンと定義体の関連付け : 実行トークンは、定義体やコードワードと関連付けられます。通常、辞書内のワードエントリは、そのワードの実行トークンを参照します。これにより、プログラムは実行トークンを使用して、辞書内のワードを特定して実行することができます。 ; ランタイムスタックとの関係 : Forthのランタイムスタックは、実行トークンを使用してコードを実行します。コンパイルされたForthコードは、ランタイムスタック上で実行トークンを取り出して、対応するワードや定義体を実行します。 ; 実行トークンの特徴 : 実行トークンは、Forthの柔軟性と効率性を向上させるために使用されます。コンパイラやインタプリタは、実行トークンを介してワードを効率的に実行し、辞書の管理を行います。 ; 実行トークンの安全性 : Forthでは、実行トークンは通常、ユーザーからは直接操作されず、コンパイラやランタイムシステム内部で使用されます。これにより、実行トークンを誤って操作することがなく、安全なプログラミング環境が提供されます。 Forthの実行トークンは、言語の内部実装の詳細を隠蔽し、プログラマに柔軟性と効率性を提供する重要な概念です。 == 制御フロースタック == 制御フロースタックは、Forthの制御構造の実装に使用されるメカニズムです。具体的には以下のような役割を果たします: # 分岐命令の始点(origin)を記録する #* <code>IF</code>、<code>AHEAD</code> などの前方ジャンプ命令の始点を記録 # 分岐命令の終点(destination)を記録する #* <code>BEGIN</code>、<code>AGAIN</code> などの後方ジャンプ命令の終点を記録 # 分岐命令の始点と終点を解決する #* <code>THEN</code> で<code>IF</code> や <code>AHEAD</code> の始点を解決 #* <code>AGAIN</code> で <code>BEGIN</code> の終点を解決 制御フロースタックは、Forthの制御構造を実現するための中間表現として機能しています。プログラマはこの制御フロースタックの管理を意識することなく、高レベルな制御構造を記述できます。 実装方法は任意ですが、たとえばデータスタック、連結リスト、特殊な配列など、必要な操作ができる形で実現されます。重要なのは、制御構造の始点と終点が適切に記録・解決されることです。 この制御フロースタックを基に、<code>IF-THEN</code>、<code>BEGIN-UNTIL</code>、<code>BEGIN-WHILE-REPEAT</code> などの基本的な制御構造が構築されます。さらに、<code>CASE</code>、<code>WHILE</code>、<code>REPEAT</code>、<code>ELSE</code> などの拡張構造も、制御フロースタックの操作によって定義できます。 つまり、Forthの制御フロースタックは、高度な制御構造を柔軟に構築するための基盤となる重要な概念なのです。 == コンパイル時ワード == Forthには、コンパイル時に処理される特殊なワードがあります。これらをコンパイル時ワードと呼びます。 主なコンパイル時ワードには以下のようなものがあります: # コンパイル時の定義操作 #* <code>:</code> (コロン) - 新しい定義を開始する(<code>:</code>自身は通常の逐次ワード) #* <code>;</code> (セミコロン) - 定義を終了しコンパイルモードを抜ける #* <code>CONSTANT</code>、<code>VARIABLE</code>、<code>DEFER</code> - 定数、変数、遅延定義を作成する # コンパイル時の制御 #* <code>IF</code>、<code>ELSE</code>、<code>THEN</code>、<code>BEGIN</code>、<code>UNTIL</code> など - 条件分岐やループなどの制御構造を定義する #* <code>LITERAL</code> - スタックトップの値をコンパイル時に埋め込む # その他のコンパイル時操作 #* <code>IMMEDIATE</code> - 定義をすぐに実行されるように指定する #* <code>[COMPILE]</code> - 次のワードをコンパイル時に実行する #* <code>POSTPONE</code> - 次のワードの実行トークンをコンパイルする これらのコンパイル時ワードは、Forthのプログラムの構造を定義したり、実行時の振る舞いを制御したりするために使われます。 通常のワードとは異なり、これらのコンパイル時ワードはコンパイル時に処理され、実行時には特殊な動作をするようになっています。これにより、Forthのプログラミングモデルを柔軟に拡張することができます。 == 辞書 == Forthの辞書に関する情報を要約します。 ; 辞書と名前空間 :* '''名前空間''': Forthの辞書は名前空間を提供します。標準プログラムは非標準の定義で標準ワードを再定義することができますが、その結果は標準システムではなくなります。 :* '''定義名''': 標準プログラムが使用する外部要素が標準システムで提供されていない場合、実行環境に依存する可能性があります。 ; コード空間とデータ空間 :* '''データ空間''': Forthシステムのデータ空間は不連続な領域に分かれています。複数の領域の配置については標準プログラムは仮定できません。 :* '''アドレスの整列''': アクセス命令によって使用されるアドレスにはアライメント制約があります。例えば、16ビットのデータは偶数アドレスにのみ保存される必要があるなどの制約があります。 ; 他の情報 :* '''一貫したアドレス''': データ領域の一貫性は、領域内でのアドレス演算を有効にします。 ; Contiguous regions(連続領域) Forthではデータ空間が連続しているという考え方があります。つまり、データ領域は一つの連続したブロックとして扱われますが、実際にはそのデータ空間は複数の部分から構成されていることがあります。 一般的なForthシステムでは、データ空間は複数の領域に分かれており、これらの領域は連続性を持ちますが、その間に他の種類の領域が存在する場合もあります。このような設計は、Forthシステムのメモリ管理において重要な役割を果たします。 例えば、以下のようなForthのコードで連続領域を確保することができます: :<syntaxhighlight lang=forth> CREATE MY-ARRAY 100 CELLS ALLOT </syntaxhighlight> この例では、100つのセル(通常はセルは1つのワードに対応します)を連続して確保しています。これにより、MY-ARRAYは連続した100個のセルを格納する領域を持つことになります。このようにして連続領域を確保することで、アドレス算術を利用してデータにアクセスすることができます。 Forthの連続領域の管理は、<code>CREATE</code>や<code>ALLOT</code>、<code>DOES></code>などの単語を使用して行われます。これらの単語を組み合わせてデータ構造を定義し、連続領域を動的に割り当てることができます。 これらの情報は、標準プログラムのポータビリティと安全性を確保するために重要です。具体的な実装や制約については、詳細なFor仕様書を参照してください。 == データ構造とメモリ管理 == Forthは組み込みシステムなどのリソース制約の厳しい用途を想定して設計されているため、メモリの効率的な利用が重視されています。この章では、Forthにおけるデータ構造とメモリ管理の方法を説明します。 === コントロールフロースタック === コントロールフロースタックとは、Forthのプログラムの制御フローを管理するために使用される仮想的なスタックです。 その主な役割は以下の通りです: # 制御フロー命令の対応関係の管理 #* 制御フロー命令(<code>IF</code>, <code>THEN</code>, <code>ELSE</code>, <code>BEGIN</code>, <code>WHILE</code>, <code>REPEAT</code> など)の対応関係を管理します。 #* 開始と終了の命令が適切に対応していることを確認します。 # 制御フロー中のデータスタック操作の制約 #* 制御フロー中のデータスタックの使用方法に制約を課します。 #* 制御フロー命令の入れ子関係に応じて、適切なデータスタックの状態が維持されるようにします。 コントロールフロースタックは物理的に実装されていなくても良いと仕様で定められています。 代わりに、システムはコンパイル時や実行時にこのスタックの挙動を模倣する方法を採ることができます。 つまり、コントロールフロースタックはForthの制御構造の妥当性を保証する上で重要な概念であり、プログラムの正しい実行を支えているのです。 通常のプログラミングでコントロールフロースタックを強く意識することはありませんが、制御構造を自らワードとして定義しようとする場合、コントロールフロースタックの振る舞いに注意する必要があります。 === リターンスタック === Forthには、データスタックとは別に、リターンスタックと呼ばれる重要なスタックが存在します。リターンスタックの主な役割は以下の通りです: # 関数呼び出しとリターン #* 関数を呼び出すとき、その関数の呼び出し元の命令アドレスがリターンスタックにプッシュされます。 #* 関数から抜け出すときは、リターンスタックからアドレスがポップされ、その場所に制御が戻されます。 #* これによって、関数呼び出しの際の制御の移動を管理することができます。 # 一時的データ保管 #* リターンスタックは、データを一時的に保管する場所としても使えます。 #* データスタックからデータを>Rでリターンスタックにプッシュし、後でR>で取り出すことができます。 #* これにより、データスタックの状態を一時的に変更せずに、値を保持しておくことができます。 リターンスタックの使用には注意点があります: * ワード内やループ内では、<code>>R</code>と <code>R></code>の回数が一致している必要があります。 * リターンスタックの値は、同じブロック内でのみ参照・取り出しできます。 * ループの脱出時やDO-ループ内からは、リターンスタックの値を取り出せません。 つまり、リターンスタックは制御フローの管理と一時的なデータ保管に使われますが、その使い方には一定の制限があるため、注意深く扱う必要があります。 プログラムの複雑さが増すと、リターンスタックの状態を適切に管理することが難しくなるため、できるだけ単純な使い方に留めるのが賢明です。 ; <code>>R ( x -- ) ( R: -- x )</code> : データスタックから値をポップしリターンスタックにプッシュする ; <code>R> ( R: -- x ) ( x -- )</code> : リターンスタックから値をポップしデータスタックにプッシュする ; <code>R@ ( -- x ) ( R: x -- x )</code> : リターンスタックのスタックトップをデータスタックにコピーする ; <code>2>R ( x1 x2 -- ) ( R: -- x1 x2 )</code> ; <code>2R> ( -- x1 x2 ) ( R: x1 x2 -- )</code> ; <code>2R@ ( -- x1 x2 ) ( R: x1 x2 -- x1 x2 )</code> スタックエフェクトに <code>R:</code> という新しい記号が出てきましたが、これはリターンスタックへの操作をしまします。このためリターンスタックはRスタックとも呼ばれています。 === 変数とアドレス指定 === Forthには、グローバル変数やローカル変数の概念がありません。代わりに、値を格納するためのメモリ領域を確保し、そのアドレスを使ってアクセスします。<code>VARIABLE</code>ワードを使うと、新しい変数領域が確保され、その開始アドレスがスタックに置かれます。 :<syntaxhighlight lang=forth> VARIABLE COUNTER \ カウンター変数を定義 COUNTER @ . \ 変数の値を表示(初期値は0) 1 COUNTER +! \ 変数にインクリメント </syntaxhighlight> 変数の値を取り出すには<code>@</code>(フェッチ)、格納するには<code>!</code>(ストア)を使います。<code>+!</code>のように算術演算と<code>!</code>を組み合わせたワードもあります。 Forthではアドレスを直接スタックに置いて操作することもできます。<code>HERE</code>はディクショナリの次の空きアドレスを取得し、<code>ALLOT</code>はディクショナリ領域を確保します。 ==== データスペース(Data Space) ==== Forthのデータスペースとは、メモリ内の連続した領域を指し、データやワードの定義などが格納される場所です。Forthでは、データスペースは主に '''ヒープ(heap)''' と '''ディクショナリ(dictionary)''' の2つの領域に分かれています。 * '''ヒープ''': データスタックやワードの実行時に使用される一時的な領域です。ここでは、動的に割り当てられたデータや一時的な計算に使用されるデータが保持されます。 * '''ディクショナリ''': ワード(ワード)の定義やその実装が格納される領域です。Forthのディクショナリはワードの名前とそれに対応する実行可能なコードへのポインタを保持します。 ==== <code>HERE</code> ワード ==== <code>HERE</code> はForthで使用される特定のワードであり、現在のデータスペース内の「ここ(here)」の位置を示します。具体的には、ディクショナリ内の次の空き領域の先頭アドレスを指します。 <code>HERE</code> を使用すると、新しいワードやデータをデータスペースに格納する際に位置を特定することができます。主にワードの定義やデータの動的な確保に使用されます。 例えば、新しい変数や配列を定義する場合、<code>HERE</code> の値を参照して適切なメモリ領域を割り当て、その後 <code>HERE</code> を更新します。 具体的な使用例を示します: :<syntaxhighlight lang=forth> HERE . \ 現在のHEREの値を表示(ディクショナリ内の次の空き領域のアドレス) 10 ALLOT \ 10バイトの領域を確保 HERE . \ 確保後のHEREの値を表示 </syntaxhighlight> この例では、まず <code>HERE</code> の値が表示され、次に <code>10 ALLOT</code> によって10バイトの領域が確保されます。その後、再度 <code>HERE</code> の値が表示され、確保された領域の終端アドレスが示されます。 <code>HERE</code> を適切に使用することで、動的なメモリ管理やデータスペースの操作が行えます。 ==== HEREを利用したデータスペースの活用例 ==== ; sieve.fr :<syntaxhighlight lang=forth> : prime? ( n -- ? ) here + c@ 0= ; : composite! ( n -- ) here + 1 swap c! ; : sieve ( n -- ) here over erase 2 begin 2dup dup * > while dup prime? if 2dup dup * do i composite! dup +loop then 1+ repeat drop ." Primes: " 2 do i prime? if i . then loop ; 100 sieve / Primes: 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 </syntaxhighlight> このForthのコードは、エラトステネスの篩(Sieve of Eratosthenes)アルゴリズムを実装しています。このアルゴリズムは、与えられた数 <code>n</code> 以下のすべての素数を見つけるために使用されます。以下では、与えられたコードの各部分を詳しく説明します。 ; <code>prime?</code> ワード :<syntaxhighlight lang=forth> : prime? ( n -- ? ) here + c@ 0= ; </syntaxhighlight> :; <code>( n -- ? )</code>: スタックから整数 <code>n</code> を取り出し、その数が素数であるかどうかの真偽値 <code>?</code> をスタックに積む。 :* <code>here + c@</code>: <code>here</code> は現在のデータスペースの末尾を示し、それに <code>+</code> を使ってワードの<code>n</code>番目のアドレスを取得する。そして <code>c@</code> はそのアドレスの内容(1バイトの文字)を取得する。 :* <code>0=</code>: 取得したバイトが0かどうかをチェックし、0ならば真(素数)を返す。 ; <code>composite!</code> ワード :<syntaxhighlight lang=forth> : composite! ( n -- ) here + 1 swap c! ; </syntaxhighlight> :; <code>( n -- )</code>: スタックから整数 <code>n</code> を取り出す。 :* <code>here + 1 swap c!</code>: <code>here</code> から<code>n</code>のアドレスにを1を1バイトで書き込む。 ; <code>sieve</code> ワード :<syntaxhighlight lang=forth> : sieve ( n -- ) here over erase 2 begin 2dup dup * > while dup prime? if 2dup dup * do i composite! dup +loop then 1+ repeat drop ." Primes: " 2 do i prime? if i . then loop ; </syntaxhighlight> :; <code>( n -- )</code>: スタックから整数 <code>n</code> を取り出す。 :* <code>here over erase</code>: 現在のデータスペース(<code>here</code> から先)を <code>n</code> バイト分消去する。 :* <code>2 begin ... repeat</code>: メインのループ。2から始めて、以下の条件に基づいて処理を繰り返す。 :** <code>2dup dup * ></code>: 現在の値を2つコピーし、2つを掛けた値が <code>n</code> を超えるまで続ける。 :** <code>dup prime? if ... then</code>: 現在の値が素数かどうかをチェックし、素数ならば以下を実行。 :*** <code>2dup dup * do ... dup +loop</code>: 素数の場合、その数の倍数を篩い落とす。内側のループで、その数の倍数を全て <code>composite!</code> でマークする。 :** <code>1+</code>: 現在の数値を1増やす。 :* <code>drop</code>: 最後の数値を削除する。 :* <code>." Primes: " 2 do i prime? if i . then loop</code>: 素数を表示するループ。2から始まり、<code>n</code> まで続ける。各数値が素数ならば表示する。 ; 実行 :<syntaxhighlight lang=forth> 100 sieve </syntaxhighlight> :100以下の素数を見つけるために <code>sieve</code> ワードが実行されます。 === CREATEを使った変数と配列の定義 === Forthの <code>CREATE</code> は、新しい変数や配列をディクショナリに定義するためのワードです。<code>CREATE</code> を使うことで、任意の名前で参照可能なデータ領域を確保し、その領域に対する操作を定義することができます。 以下に、<code>CREATE</code> ワードの基本的な構文と使用方法を示します。 ==== 構文 ==== :<syntaxhighlight lang=forth> CREATE name </syntaxhighlight> * <code>name</code>: 定義する変数や配列の名前を指定します。 ==== 使用方法 ==== # 変数の定義 #:<code>CREATE</code> を使って変数を定義する場合、単に変数の初期値を指定します。 #:<syntaxhighlight lang=forth> CREATE my-var 42 , </syntaxhighlight> #:上記の例では、<code>my-var</code> という名前の変数が定義され、初期値として <code>42</code> が設定されています。<code>,</code> はスタックのトップの値を <code>my-var</code> の定義領域に格納するワードです。 # 配列の定義 #: <code>CREATE</code> を使って配列を定義する場合、配列の要素数や初期値を指定します。 #:<syntaxhighlight lang=forth> CREATE my-array 5 ALLOT </syntaxhighlight> #: 上記の例では、<code>my-array</code> という名前の配列が定義され、5つの要素分の領域が確保されます。各要素には初期値が与えられていないため、初期化が必要な場合は別途行います。 ==== 使用例 ==== このForthのコードは、<code>CREATE</code> を使って変数と配列を定義し、それらに値を格納・表示する例です。 ; 変数の定義と使用 :<syntaxhighlight lang=forth> CREATE x \ 変数 x を定義 100 x ! \ x に 100 を代入 x @ . CR \ x の値を表示 </syntaxhighlight> * <code>CREATE x</code>: <code>x</code> という名前の変数を定義します。<code>CREATE</code> はディクショナリに新しいワードを登録しますが、データスペース自体は確保しません。 * <code>100 x !</code>: <code>x</code> のデータフィールドに <code>100</code> を格納します。 * <code>x @ . CR</code>: <code>x</code> のデータフィールドから値を読み取って表示します。<code>CR</code> は改行を出力します。 ; 配列の定義と使用 :<syntaxhighlight lang=forth> CREATE MY-ARY 100 ALLOT \ 100セルの配列を作成 42 MY-ARY 10 + ! \ 11番目の要素に42を代入 MY-ARY 10 + @ . \ 11番目の要素の値を表示 </syntaxhighlight> * <code>CREATE MY-ARY 100 ALLOT</code>: <code>MY-ARY</code> という名前の配列を定義し、100セル分のデータスペースを確保します。 * <code>42 MY-ARY 10 + !</code>: <code>MY-ARY</code> の11番目の要素(0から始まるインデックスなので、10を足します)に <code>42</code> を代入します。 * <code>MY-ARY 10 + @ .</code>: <code>MY-ARY</code> の11番目の要素の値を読み取って表示します。 この例では、<code>CREATE</code> を使って変数 <code>x</code> と配列 <code>MY-ARY</code> を定義し、それぞれに値を設定しています。<code>x</code> は単一の値を格納する変数であり、<code>MY-ARY</code> は複数の要素を持つ配列です。<code>!</code> を使ってデータを代入し、<code>@</code> を使ってデータを取得しています。 Forthの特性として、変数や配列の定義はディクショナリに登録されるため、名前に対して対応するデータ領域へのアクセスが可能となります。これにより、動的なデータ構造を効率的に管理することができます。 === アライメント === Forthの <code>ALIGN</code> ワードは、データ領域のアラインメントを行うためのワードです。アラインメントとは、データがメモリ上で配置される位置を調整することであり、特定のアドレス境界にデータを配置することを指します。 アラインメントの必要性は、プロセッサアーキテクチャに依存しますが、多くのアーキテクチャでは特定のデータ型(例:4バイト整数など)は特定の境界に配置される必要があります。アラインメントが正しく行われないと、メモリアクセスの効率が低下したり、アドレスエラーなどの例外が発生し処理を中断する可能性があります。 ; 構文 :<syntaxhighlight lang=forth> ALIGN </syntaxhighlight> ; 動作 : <code>ALIGN</code> ワードは、データスペースポインタ (<code>HERE</code>) をアラインメント条件に従って調整します。具体的には、通常は2バイトまたは4バイトの境界に <code>HERE</code> を調整します。これにより、次に確保されるデータ領域が適切な境界に配置されます。 ; 使用例 :<syntaxhighlight lang=forth> HERE ALIGN </syntaxhighlight> : 上記の例では、<code>HERE</code> の値をアラインメントされた位置に調整します。これにより、次に確保されるデータ領域が適切な境界に配置されます。 :<syntaxhighlight lang=forth> CREATE my-var ALIGN 2 ALLOT </syntaxhighlight> : この例では、<code>my-var</code> という名前の変数を定義していますが、そのデータ領域が2バイト境界にアラインメントされて確保されます。これにより、<code>my-var</code> のデータ領域は適切な境界に配置され、メモリアクセスの効率が向上します。 <code>ALIGN</code> ワードは、特定のアーキテクチャで必要なメモリアラインメントを確保するために重要な役割を果たします。メモリアクセスの効率を最大化するために、適切なアラインメントが常に考慮されるべきです。 == 入出力と組み込みワード == Forthには標準の入出力ワードがあり、コンソールやファイルからの入出力を行えます。また、様々な組み込みワードが用意されており、これらを活用することでForthの機能を拡張できます。 === 標準入出力 === Forthには、キーボードからの文字入力や、コンソールへの文字出力を行うためのワードが用意されています。 :<syntaxhighlight lang=forth> KEY \ キーボードから1文字読み込む EMIT \ スタック上の値(文字コード)を出力する ." \ 文字列を直接出力する </syntaxhighlight> <code>KEY</code>はキーボード入力を待ち、押された文字のASCIIコードをスタックに置きます。<code>EMIT</code>は逆に、スタック上の値を文字コードとして解釈し、コンソールに出力します。<code>." Hello"</code>のように、<code>."</code> の後に文字列を続けると、その文字列がコンソール出力されます。 数値入出力には、<code>?</code>、<code>U.</code>、<code>U.R</code>などのワードが使えます。<code>?</code>は数値を入力受け付け、<code>U.</code>は符号なし数値を、<code>U.R</code>は数値を指定した基数(2進数、16進数など)で出力します。 === ファイルアクセス === ファイル入出力には、様々なワードが用意されています。<code>OPEN-FILE</code>でファイルを開き、<code>READ-FILE</code>や<code>WRITE-FILE</code>でデータの読み書きができます。 :<syntaxhighlight lang=forth> S" data.txt" R/O OPEN-FILE THROW VALUE HANDLE \ ファイルを読み取りモードで開く HANDLE READ-FILE ABORT" READ ERROR" \ ファイルを読み込む HANDLE CLOSE-FILE THROW \ ファイルを閉じる </syntaxhighlight> ファイル名は、<code>S"</code> で文字列をスタックに置いた後、<code>R/O</code>(読み取り専用)や<code>W/O</code>(書き込み専用)といったモードを指定してファイルを開きます。<code>THROW</code>はエラーがあれば例外を発生させます。 <code>READ-FILE</code>や<code>WRITE-FILE</code>では、バッファ領域のアドレスと読み書きするバイト数をスタックに置く必要があります。 === 組み込みワードの利用 === Forthには、数学関数や論理演算、メモリ操作など、様々な組み込みワードが用意されています。必要に応じてこれらのワードを活用することで、プログラムにさまざまな機能を付加できます。 :<syntaxhighlight lang=forth> 2 3 MAX . \ 最大値(3)を出力 S" HELLO" SWAP DROP \ スタック操作サンプル HEX 1F20 4 DUMP \ メモリダンプ </syntaxhighlight> <code>MAX</code>は2つの数値の最大値を、<code>SWAP</code>は2つの値の順序を入れ替え、<code>DROP</code>は最上位の値を捨てます。<code>DUMP</code>は指定したアドレスからのメモリ内容をダンプ出力します。 組み込みワードには、浮動小数点演算、文字列処理、マルチタスク、IPCなど、様々な分野のものがあります。また、必要に応じてワードを自作したり、外部ライブラリからリンクしたりできます。Forthはコンパクトなシステムながら、組み込みワードの充実により高い機能性を発揮します。 == アプリケーション開発 == Forthは小規模な組み込みシステムから大規模なアプリケーションまで、幅広い用途に使用できる言語です。この章では、Forthにおけるアプリケーション開発の手法と、実例について解説します。 === モジュール化とワード管理 === Forthはワードをベースとしたモジュール性の高いプログラミングができます。大きなアプリケーションを開発する際は、適切にモジュール分割してワードを設計・管理することが重要です。 Forthにはネームスペースの概念がありません。そのため、ワード名の重複を避けるためには、プレフィックスなどの命名規則を定めることが一般的です。たとえば<code>STRING-LENGTH</code>のように、ワードの役割がわかるよう名前を付けます。 また、ワードをまとめてファイルに保存し、必要に応じて読み込む方法があります。Forthの多くの処理系は、ワードの定義をソースファイルに保存したり、メモリイメージを永続化したりできます。 :<syntaxhighlight lang=forth> MARKER MODULE>STRING : STRING-LENGTH \ 文字列の長さを求める ... ; : STRING-REVERSE \ 文字列を反転する ... ; STRING-REVERSESTRING-LENGTH +MODULE </syntaxhighlight> 作成したワードは<code>MODULE>NAME</code>でモジュール名を付け、<code>+MODULE</code>でモジュールを完成させることができます。他のソースから<code>USE MODULE>NAME</code>とすれば、そのモジュールのワードが使用可能になります。 大規模なシステムでは、このようなソースレベルの分割に加え、オーバーレイ、仮想メモリ、マルチタスク機能を活用することで、メモリの効率的な使用が可能です。 === グラフィックス処理 === Forthでもグラフィック処理が可能ですが、組み込みの機能は限られています。ほとんどの処理はユーザ定義ワードとして実装する必要があります。 ビットマップ画像の表示や、ウィンドウ、マウスカーソルなどの基本的なGUIの作成はある程度可能です。高度な3Dグラフィックスなどを実現するには、外部ライブラリを利用する必要があります。 :<syntaxhighlight lang=forth> NEED FRAMEBUFFER \ フレームバッファへのアクセスモジュール : DRAW-LINE ( x1 y1 x2 y2 -- ) \ ブレザンハムのアルゴリズムでライン描画 ... ; : DRAW-RECT ( x y w h -- ) 2SWAP 2>R 2R> \ (x y w h -- x y x+w y+h) DRAW-LINE 2>R 2R> DRAW-LINE 2SWAP DRAW-LINE 2SWAP DRAW-LINE ; FRAMEBUFFER-INIT \ グラフィックスサブシステムの初期化 100 100 300 200 DRAW-RECT \ 長方形を描画 </syntaxhighlight> 上記では、フレームバッファの制御関数がロードされた前提で、<code>DRAW-LINE</code>を使って<code>DRAW-RECT</code>(長方形描画)を実装しています。スタックを活用して座標値を受け渡し、基本的な幾何図形を描画しています。 Forthはグラフィックスパイプラインなどの高度な機能を組み込んでいませんが、スタックベースの処理により、低レベルのデバイスアクセスが可能です。組み込みシステムのディスプレイやLED制御など、グラフィックス関連の処理に適しています。 === システムプログラミング === Forthの本質的な特性として、システムプログラミングに適していることがあげられます。小規模でコンパクト、高速動作、低レベルなメモリアクセスが可能というメリットがあります。 OSカーネル、デバイスドライバ、BIOS、ブートローダなどの開発にForthは広く使われてきました。組み込みシステムでは、センサーやI/Oデバイスの制御に最適です。スタック指向のモデルにより、レジスタレベルの処理が直接かけるのも特徴です。 例えば、Forthを使ってブートローダを実装する場合には、次のようなプログラムになります。 :<syntaxhighlight lang=forth> HEX 07C0 INPORT DROP \ DOSデータ領域クリア 0800 0 20 MOVE \ リセットベクタ設定 KERNEL.IMG LOAD \ カーネル読み込み A000 OUTPORT \ VGAモードへ切り替え 1000 JMP \ カーネル実行 ... \ BIOSブート用の簡単なForth読み込みコード :KERNEL.IMG LOAD CORE SWAP CPU KERNEL ; </syntaxhighlight> BIOSなどの低レベル機能を呼び出してブートローダを構築する処理が、Forthの文法でコンパクトに記述できる様子がわかります。 また、Forth自身が小規模で可搬性が高いため、Forth処理系そのものもForthで書かれた簡単なコアを、ホストOSやアーキテクチャに合わせてセルフホスト (移植) する手法が一般的です。これは、アプリケーションと実行環境を一体化して開発できる利点があります。 == 高度なトピック == ここまでForthの基本的な構文と概念、データ構造、アプリケーション開発の実例などを解説してきました。この章では、Forthの高度な利用方法としてパフォーマンス最適化、マルチスレッド・マルチタスク、メタプログラミングについて取り上げます。 === 最適化とパフォーマンス === Forthはコンパクトで高速な言語ですが、さらなる最適化の余地があります。ワードの定義を工夫したり、ネイティブコードコンパイラを使ったりすることで、パフォーマンスを向上できます。 ワード定義の最適化では、冗長な演算を排除したり、インラインコーディングの手法を用いたりします。例えば、次のようなワード定義があるとします。 :<syntaxhighlight lang=forth> : MAX2 ( n1 n2 -- max ) 2DUP > IF SWAP DROP ELSE NIP THEN ; </syntaxhighlight> この<code>MAX2</code>は一時的に2つの値を複製(<code>2DUP</code>)し、<code>IF</code>..<code>ELSE</code>..<code>THEN</code>の条件分岐で最大値を選びます。しかし、この一時複製が無駄な演算となっています。次のように書くとコードがシンプルになります。 :<syntaxhighlight lang=forth> : MAX2 ( n1 n2 -- max ) OVER OVER > IF SWAP THEN ; </syntaxhighlight> ワードの最適化には一般的なテクニックがあり、Forthのコンパイラ作者から提案されているものを参考にするとよいでしょう。 また、Forthにはネイティブコードコンパイラと呼ばれるもので、ワードの実行コードをネイティブマシン語に変換できるものがあります。Forthの対話的な実行環境は便利ですが、ネイティブコードの方が高速に動作します。こうした最適化手法を使い分けることで、Forthのパフォーマンスを飛躍的に向上できます。 === マルチスレッドとマルチタスク === Forthには並列実行の機構が組み込まれていないため、マルチスレッドやマルチタスク処理を実現するにはユーザ定義の実装が必要です。しかし、Forthの言語特性を活かせばきわめてコンパクトな並列処理ができます。 マルチスレッドでは、スタックを分離し、スレッド毎にスタックのコピーを持つ手法が一般的です。スレッドの切り替えはスタックのコンテキストスイッチで実現できます。また、Forthのデータストアクセス方式を応用すれば、IPC(プロセス間通信)の仕組みを作ることもできます。 :<syntaxhighlight lang=forth> : NEW-TASK ( -- ) HERE CURRENT-STACK >R CREATE-STACK SWAP [: DO-SOME-WORK ;] ( compile: word behavior ) R> SET-CURRENT ; </syntaxhighlight> この例では、新しいタスクを作成するワード<code>NEW-TASK</code>を定義しています。<code>CREATE-STACK</code>でスタックを新しく割り当て、<code>DO-SOME-WORK</code>のようなワード定義をタスクとして登録します。実行時にはスケジューラによってこれらのタスクが実行されます。 マルチタスク機構を実装する例は多数あり、スレッド単位でデータを扱う方式、メッセージキューによる方式、それぞれ長所と短所があります。並列処理にはデッドロックなどの問題点もありますが、Forthではコンパクトでシンプルなコード記述が可能です。 === メタプログラミング === Forthにはプログラムを生成・変更するメタプログラミングの機能があり、コードを自動生成したり、プログラムを動的に変更したりできます。この機能は、Forthをドメイン固有言語(DSL)の開発などに適用できることを意味しています。 メタプログラミングには、コンパイル時に評価される構文<code>[...]</code>と実行時構文<code>EVAL</code>があります。どちらもプログラムをデータとして扱えるため、動的にプログラムを生成・変更できます。 :<syntaxhighlight lang=forth> : HILBERT-CURVE ( n -- ) 0 ?DO [: 2DUP RECURSE >R >R 1 HCURVE R> R> RECURSE 3 HCURVE ;] POSTPONE LITERAL POSTPONE HCURVE LOOP ; </syntaxhighlight> この例では、ヒルベルト曲線を描画するコードを動的に生成しています。<code>POSTPONE</code>はワードのコンパイルを遅延させ、<code>[: ... ;]</code>の構文はその間のテキストを実行可能なコードとしてコンパイルします。この手法により、 Hilbertカーブの次元(<code>n</code>)に応じて、その描画コードを生成しています。 Forthのメタプログラミング機能は、高度な用途に役立ちます。例えば、ユーザインターフェースビルダー、コードジェネレーター、プログラムシンセサイザなどでその力を発揮できます。Forthの柔軟性を最大限に活かせる側面といえるでしょう。 == サンプルプログラムとプロジェクト == Forthの理解を深めるには、実際にコードを書いて動作を確認することが大切です。この章では、様々なサンプルコードを紹介するとともに、実践的なForthプロジェクトの例を示します。 === 様々なサンプルコード === 以下はForthの基本的な機能を示すサンプルコード集です。 ; 再帰によるフィボナッチ数列 :<syntaxhighlight lang=forth> : FIB ( n -- fib-n ) DUP 0= IF DROP 1 EXIT THEN DUP 1 = IF DROP 1 EXIT THEN DUP 1- RECURSE SWAP 2 - RECURSE + ; </syntaxhighlight> ; 文字列操作 :<syntaxhighlight lang=forth> : UPPERCASE ( addr n -- addr n ) OVER + SWAP ?DO I C@ [CHAR] a [CHAR] z 1+ WITHIN IF [CHAR] A [CHAR] a - + THEN I C! LOOP ; : REVERSE-WORDS ( addr n -- ) [CHAR] \ SKIP SPACES OVER >R BEGIN OVER C@ [CHAR] \ <> WHILE [CHAR] \ PARSE DUP >R REVERSE R> OVER C! CHAR+ REPEAT R> DROP 2DROP ; </syntaxhighlight> ; ベクトル・行列計算 :<syntaxhighlight lang=forth> REQUIRE DOUBLE \ 倍精度浮動小数点サポート : VZEROS ( n -- addr ) \ n要素のゼロベクトルを生成 CREATE HERE 0 SWAP 8 * DUP ALLOT FILL ; : MZEROS ( rows cols -- addr ) \ rows x cols の零行列を生成 SWAP VZEROS SWAP 0 ?DO OVER VZEROS COLS + LOOP ; </syntaxhighlight> ; 簡易グラフィックス :<syntaxhighlight lang=forth> VARIABLE FRAMEBUF \ フレームバッファアドレス : PIXEL ( x y color -- ) \ 1ピクセル書き込み FRAMEBUF @ >R 2 * R@ + 3 * RP@ C!+ RP@ C!+ RDROP ; : LINE ( x1 y1 x2 y2 c -- ) \ ラインの描画 >R 2SWAP R> 2>R 2R@ PIXEL 2R> PIXELLINE ; </syntaxhighlight> これらの例は、スタックを使った処理の流れ、ユーザ定義ワードの作成、再帰など、Forthのプログラミング手法の基本を示しています。コンパクトながらも表現力の高さがわかるでしょう。 === 実践的なプロジェクト例 === 次に、もう少し大がかりなForthプロジェクトの例を紹介します。 ; Forth Chip-8 エミュレーター Chip-8はレトロなゲームコンソールで、Forthでその命令セットをエミュレートするプロジェクトです。グラフィックス、入力処理、命令デコーダなどを実装します。 ; カーネルとブートローダ ForthでOSカーネルの基本部分を実装し、ブートローダと合わせてシステムを構築するプロジェクト。メモリ管理、タスク管理、ファイルシステム、ドライバなどの機能が実装できます。 ; Webサーバー ForthでHTTPリクエストを処理するWebサーバーを作成。ソケット通信、文字列処理、ファイル入出力などの機能が必要になります。追加してWebアプリケーションフレームワークなども作れます。 ; オープンソースForthプロセッサ Forthを使ってCPU命令セットを記述し、ゲートレベルまでFPGAに実装するプロセッサの設計プロジェクト。ハードウェア記述言語との連携が重要です。 このようなプロジェクトを通して、Forthの実用性とシステムプログラミングでの可能性を体験できます。Forthという言語自体を使って、OSやハードウェアコンポーネントを実装できるのが最大の特徴です。いずれのプロジェクトも一般的な規模になると、モジュール分割やワード管理、ツール活用などの工夫が必要になります。 == 参考資料 == Forthについてより深く学ぶには、書籍や公開されているオンラインリソースを参照するのが有効な方法です。また、活発なForthコミュニティに参加することで、他の開発者からの助言を得られます。 === 関連書籍の紹介 === Forthの入門書から応用、さらには処理系の実装に至るまで、多くの優れた書籍が出版されています。 * 「Forth入門」レオ・ブロディ (ISBN:978-4875930297 工学社) ** Forth言語の基本から、アプリケーション開発までをカバーした長年の定番書。 * 「Thinking Forth」Leo Brodie (Punchy Publishing) / Forth思考 ―問題解決のための言語と哲学― レオ・ブロディー著 ** Forth哲学に重きを置いた名著。Forthの考え方を深く解説。 * 「Forth Programmer's Handbook」(ISBN:978-1419675492 Forth Inc.) ** ANS Forthの規格書で、WordSetの詳細が書かれている。 これらの書籍を手に入れられれば、Forthの理解が格段に進むはずです。電子書籍としても出版されているものがあります。 === オンラインリソース === {{Wikipedia}} インターネット上にも無料で参照できるForth関連の豊富なリソースが存在します。 * Forth Interest Group ( https://www.forth.org/ ) ** Forthに関する書籍、記事、リソースなどが集まるポータル。 * Forth-Standard-Committee 公式サイト( https://forth-standard.org/ ) Webサイト、ソースコード、ニュースレターなど、さまざまな形でリソースが公開されているので、活用していきたいものです。 === Forthコミュニティ === 長年にわたりForth言語を支える活発なコミュニティが存在し、開発者同士が支え合う環境があります。 * Newsgroups: comp.lang.forth ** ディスカッションの場となるForth専用のニュースグループ。 * 地域 Forth グループ ** ヨーロッパ、アメリカ、アジアなどの地域Forthグループ。 オンラインフォーラムやメーリングリスト、対面の勉強会など、様々な形でForth開発者同士が交流を深めています。初心者でもこうしたコミュニティに参加することで、サポートを受けられます。Forthの小さな世界ですが、地域を越えて開発が行われているのが特徴です。 Forthの参考文献やオンラインリソース、そしてコミュニティを上手く活用することで、この独特な言語の理解が一層深まるはずです。 == 脚註 == <references /> [[Category:Forth|*]] [[Category:プログラミング言語]] gbh15au7ujr3znwt8d1assr0npfy1ep ガリア戦記 第5巻/注解/40節 0 39418 246697 246473 2024-04-14T11:12:57Z Linguae 449 /* 外部リンク */ wikitext text/x-wiki <div style="font-family:Arial Black;font-style:normal;font-size:15pt;color:#990033;text-align:center;">C &middot; IVLII &middot; CAESARIS &middot; COMMENTARIORVM &middot; BELLI &middot; GALLICI</div> <div style="font-family:Arial Black;font-style:normal;font-size:30pt;color:#990033;text-align:center;">LIBER &middot; QVINTVS</div> <br> {| id="toc" style="align:center;clear:all;" align="center" cellpadding="5" |- ! style="background:#bbf; text-align:center;" |&nbsp; [[ガリア戦記/注解編|ガリア戦記 注解編]] &nbsp; | style="background:#ccf; text-align:center;" |&nbsp; [[ガリア戦記 第5巻/注解|第5巻]] &nbsp; | style="background:#eef; text-align:center;"| &nbsp;[[ガリア戦記 第5巻/注解/39節|39節]] | [[ガリア戦記 第5巻/注解/40節|40節]] | [[ガリア戦記 第5巻/注解/41節|41節]] &nbsp; |} __notoc__ == 原文テキスト == <div style="font-family:Times New Roman;font-style:normal;font-size:15pt;color:#333;text-align:left;"><ref>原文テキストについては[[ガリア戦記/注解編#原文テキスト]]を参照。</ref> 40. &nbsp;&nbsp; <!--❶--><sup>1</sup>Mittuntur ad Caesarem confestim <!--(α) -->ab<!--(β) a--> Cicerone litterae, magnis propositis praemiis, si pertulissent: &nbsp;<!--●-->&nbsp; obsessis omnibus viis missi intercipiuntur. &nbsp;<!--●-->&nbsp; <!--❷--><sup>2</sup>Noctu ex <!--(β) ea--> materia<!--,--> quam munitionis causa <span style="background-color:#ffc;">comportaverant<!--conportaverant--></span>, turres admodum centum XX<!--centum viginti, CXX--> excitantur<!-- ; --> incredibili celeritate; &nbsp;<!--●-->&nbsp; quae deesse operi videbantur<!--,--> perficiuntur. &nbsp;<!--●-->&nbsp; <!--❸--><sup>3</sup>Hostes postero die multo maioribus coactis copiis castra oppugnant, fossam complent. &nbsp;&nbsp;<!--●-->&nbsp;&nbsp; <!--(β) a nostris -->Eadem ratione, qua pridie, <!--(α) -->ab nostris<!--(α)--> resistitur. &nbsp;<!--●-->&nbsp; <!--❹--><sup>4</sup>Hoc idem reliquis deinceps fit diebus. &nbsp;&nbsp;<!--●-->&nbsp;&nbsp; <!--❺--><sup>5</sup>Nulla pars nocturni temporis ad laborem intermittitur; &nbsp;<!--●-->&nbsp; non aegris, non vulneratis facultas quietis datur. &nbsp;&nbsp;<!--●-->&nbsp;&nbsp; <!--❻--><sup>6</sup>Quaecumque ad proximi diei oppugnationem opus sunt noctu comparantur:<!--;--> &nbsp;<!--●-->&nbsp; multae praeustae sudes, magnus muralium pilorum numerus instituitur; &nbsp;<!--●-->&nbsp; turres contabulantur, pinnae loricaeque ex cratibus attexuntur. &nbsp;<!--●-->&nbsp; <!--❼--><sup>7</sup>Ipse Cicero, cum tenuissima valetudine esset, ne nocturnum quidem sibi tempus ad quietem relinquebat, ut ultro militum concursu ac vocibus sibi parcere cogeretur. </div> <span style="background-color:#ffc;"></span> ---- ;テキスト引用についての注記 *<span style="font-family:Times New Roman;font-style:normal;font-size:15pt;">[[wikt:en:comportaverant|comportaverant]] : [[wikt:en:conportaverant|conportaverant]]</span> と表記する校訂版もある。 <span style="font-family:Times New Roman;font-style:normal;font-size:15pt;"></span> <span style="font-family:Times New Roman;font-style:oblique;font-size:15pt;"></span> <span style="font-family:Times New Roman;font-style:bold;font-size:15pt;"></span> == 整形テキスト == <div style="font-family:Times New Roman;font-style:normal;font-size:15pt;color:#333;text-align:left;"><ref>整形テキストについては[[ガリア戦記/注解編#凡例]]を参照。</ref> </div> <span style="color:#800;"></span> ---- ;注記 <!-- *原文の <span style="font-family:Times New Roman;font-style:normal;font-size:15pt;">[[wikt:en:accommodatae|accommodātae]], [[wikt:en:Aduatuci|Aduatucī]], [[wikt:en:Aduatucis|Aduatucīs]], [[wikt:en:Aduatucos|Aduatucōs]], [[wikt:en:Aeduae|Aeduae]], [[wikt:en:Aedui#Latin|Aeduī]], [[wikt:en:Aeduorum|Aeduōrum]], [[wikt:en:Aeduus#Latin|Aeduus]], [[wikt:en:aequinocti|aequinoctī]], [[wikt:en:aggregabat|aggregābat]], [[wikt:en:Alpis#Latin|Alpīs]], [[wikt:en:appelluntur|appelluntur]], [[wikt:en:apportari|apportārī]], [[wikt:en:appropinquabat|appropinquābat]], [[wikt:en:appropinquare#Latin|appropinquāre]], [[wikt:en:appropinquarent|appropinquārent]], [[wikt:en:appropinquaverunt|appropinquāvērunt]] ([[wikt:en:appropinquarunt|appropinquārunt]]), [[wikt:en:appropinquavit|appropinquāvit]], [[wikt:en:appulso#Latin|appulsō]], [[wikt:en:arripere|arripere]], [[wikt:en:ascendissent#Latin|ascendissent]], [[wikt:en:ascensu#Noun|ascēnsū]], [[wikt:en:assuefacti|assuēfactī]], [[wikt:en:auxili#Latin|auxilī]], [[wikt:en:cedentis|cēdentīs]], [[wikt:en:cohortis|cohortīs]], [[wikt:en:coicere|coicere]], [[wikt:en:coicerent|coicerent]], [[wikt:en:coici|coicī]], [[wikt:en:coiciant|coiciant]], [[wikt:en:coiciebant|coiciēbant]], [[wikt:en:coiciunt|coiciunt]], [[wikt:en:coiecerant|coiēcerant]], [[wikt:en:coiecerunt|coiēcērunt]], [[wikt:en:coiecisse|coiēcisse]], [[wikt:en:coiecta|coiecta]], [[wikt:en:collatis|collātīs]], [[wikt:en:collaudatis#Participle|collaudātīs]], [[wikt:en:collis#Latin|collīs]], [[wikt:en:collocabant|collocābant]], [[wikt:en:collocabat|collocābat]], [[wikt:en:collocandis|collocandīs]], [[wikt:en:collocant#Latin|collocant]], [[wikt:en:collocarat|collocārat]], [[wikt:en:collocare#Latin|collocāre]], [[wikt:en:collocaret|collocāret]], [[wikt:en:collocari|collocārī]], [[wikt:en:collocatas|collocātās]], [[wikt:en:collocati#Latin|collocātī]], [[wikt:en:collocatis#Participle|collocātīs]], [[wikt:en:collocavit|collocāvit]], [[wikt:en:collocuti|collocūtī]], [[wikt:en:colloquantur|colloquantur]], [[wikt:en:colloquendi|colloquendī]], [[wikt:en:colloqui#Latin|colloquī]], [[wikt:en:colloquium#Latin|colloquium]], [[wikt:en:compluris|complūrīs]], [[wikt:en:conantis|cōnantīs]], [[wikt:en:consili|cōnsilī]], [[wikt:en:egredientis#Etymology_2|ēgredientīs]], [[wikt:en:ei#Latin|eī]], [[wikt:en:eis#Latin|eīs]], [[wikt:en:finis#Latin|fīnīs]], [[wikt:en:hostis#Latin|hostīs]], [[wikt:en:imperi#Latin|imperī]], [[wikt:en:incolumis#Latin|incolumīs]], [[wikt:en:irridere#Latin|irrīdēre]], [[wikt:en:irruperunt|irrūpērunt]], [[wikt:en:laborantis#Etymology_2|labōrantīs]], [[wikt:en:montis|montīs]], [[wikt:en:navis#Latin|nāvīs]], [[wikt:en:negoti|negōtī]], nōn nūllae, nōn nūllōs, [[wikt:en:offici#Noun_2|officī]], [[wikt:en:omnis#Latin|omnīs]], [[wikt:en:partis#Latin|partīs]], [[wikt:en:periclum#Latin|perīclum]], plūrīs, [[wikt:en:proeli|proelī]], proficīscentīs, [[wikt:en:resistentis|resistentīs]], [[wikt:en:singularis#Latin|singulārīs]], [[wikt:en:spati#Latin|spatī]], [[wikt:en:subeuntis|subeuntīs]], [[wikt:en:suffossis|suffossīs]], [[wikt:en:sumministrata|sumministrāta]], [[wikt:en:summissis|summissīs]], [[wikt:en:summittebat|summittēbat]], [[wikt:en:summoveri|summovērī]], [[wikt:en:Trinobantes#Latin|Trinobantēs]], trīs, [[wikt:en:utilis#Latin|ūtilīs]], [[wikt:en:vectigalis#Latin|vectīgālīs]] </span> などは、<br>それぞれ <span style="font-family:Times New Roman;font-style:normal;font-size:15pt;">[[wikt:en:adcommodatae|adcommodātae]], [[wikt:de:Atuatuci|Atuatucī]], Atuatucīs, Atuatucōs, Haeduae, Haeduī, Haeduōrum, Haeduus, [[wikt:en:aequinoctii|aequinoctiī]], [[wikt:en:adgregabat|adgregābat]], [[wikt:en:Alpes#Latin|Alpēs]], [[wikt:en:adpelluntur|adpelluntur]], [[wikt:en:adportari|adportārī]], [[wikt:en:adpropinquabat|adpropinquābat]], [[wikt:en:adpropinquare|adpropinquāre]], [[wikt:en:adpropinquarent|adpropinquārent]], [[wikt:en:adpropinquaverunt|adpropinquāvērunt]] ([[wikt:en:adpropinquarunt|adpropinquārunt]]), [[wikt:en:adpropinquavit|adpropinquāvit]], [[wikt:en:adpulso|adpulsō]], [[wikt:en:adripere|adripere]], [[wikt:en:adscendissent|adscendissent]], [[wikt:en:adscensu#Noun|adscēnsū]], [[wikt:en:adsuefacti|adsuēfactī]], [[wikt:en:auxilii|auxiliī]], [[wikt:en:cedentes#Latin|cēdentēs]], [[wikt:en:cohortes#Latin|cohortēs]], [[wikt:en:conicere|conicere]], [[wikt:en:conicerent|conicerent]], [[wikt:en:conici#Latin|conicī]], [[wikt:en:coniciant|coniciant]], [[wikt:en:coniciebant|coniciēbant]], [[wikt:en:coniciunt|coniciunt]], [[wikt:en:coniecerant|coniēcerant]], [[wikt:en:coniecerunt|coniēcērunt]], [[wikt:en:coniecisse|coniēcisse]], [[wikt:en:coniecta|coniecta]], [[wikt:en:conlatis|conlātīs]], [[wikt:en:conlaudatis#Participle|conlaudātīs]], [[wikt:en:colles#Latin|collēs]], [[wikt:en:conlocabant|conlocābant]], [[wikt:en:conlocabat|conlocābat]], [[wikt:en:conlocandis|conlocandīs]], [[wikt:en:conlocant|conlocant]], [[wikt:en:conlocarat|conlocārat]], [[wikt:en:conlocare|conlocāre]], [[wikt:en:conlocaret|conlocāret]], [[wikt:en:conlocari|conlocārī]], [[wikt:en:conlocatas|conlocātās]], [[wikt:en:conlocati|conlocātī]], [[wikt:en:conlocatis#Participle|conlocātīs]], [[wikt:en:conlocavit|conlocāvit]], [[wikt:en:conlocuti|conlocūtī]], [[wikt:en:conloquantur|conloquantur]], [[wikt:en:conloquendi|conloquendī]], [[wikt:en:conloqui#Latin|conloquī]], [[wikt:en:conloquium#Latin|conloquium]], [[wikt:en:complures#Latin|complūrēs]], [[wikt:en:conantes|cōnantēs]], [[wikt:en:consilii|cōnsiliī]], [[wikt:en:egredientes|ēgredientēs]], [[wikt:en:ii#Latin|iī]], [[wikt:en:iis#Latin|iīs]], [[wikt:en:fines#Latin|fīnēs]], [[wikt:en:hostes#Latin|hostēs]], [[wikt:en:imperii#Latin|imperiī]], [[wikt:en:incolumes|incolumēs]], [[wikt:en:inridere|inrīdēre]], [[wikt:en:inruperunt|inrūpērunt]], [[wikt:en:laborantes#Latin|labōrantēs]], [[wikt:en:montes#Latin|montēs]], [[wikt:en:naves#Latin|nāvēs]], [[wikt:en:negotii|negōtiī]], [[wikt:en:nonnullae|nōnnūllae]], [[wikt:en:nonnullos|nōnnūllōs]], [[wikt:en:officii#Latin|officiī]], [[wikt:en:omnes#Latin|omnēs]], [[wikt:en:partes#Latin|partēs]], [[wikt:en:periculum#Latin|perīculum]], [[wikt:en:plures|plūrēs]], [[wikt:en:proelii|proeliī]], [[wikt:en:proficiscentes|proficīscentēs]], [[wikt:en:resistentes#Latin|resistentēs]], [[wikt:en:singulares#Latin|singulārēs]], [[wikt:en:spatii#Latin|spatiī]], [[wikt:en:subeuntes|subeuntēs]], [[wikt:en:subfossis|subfossīs]], [[wikt:en:subministrata|subministrāta]], [[wikt:en:submissis|submissīs]], [[wikt:en:submittebat|submittēbat]], [[wikt:en:submoveri|submovērī]], [[wikt:en:Trinovantes#Latin|Trinovantēs]], [[wikt:en:tres#Latin|trēs]], [[wikt:en:utiles#Latin|ūtilēs]], [[wikt:en:vectigales|vectīgālēs]] </span> などとした。 --> <span style="font-family:Times New Roman;font-style:normal;font-size:15pt;"></span> <span style="font-family:Times New Roman;font-style:oblique;font-size:15pt;"></span> <span style="color:#b00;"></span> <span style="color:#800;"></span> <span style="font-size:10pt;"></span> <span style="background-color:#ff0;"></span> == 注解 == === 1項 === <span style="font-family:Times New Roman;font-size:20pt;"></span> ;語釈 <span style="font-family:Times New Roman;font-size:15pt;background-color:#fff;"></span> <span style="font-family:Times New Roman;font-size:15pt;"></span> <span style="font-family:Times New Roman;font-size:15pt;"></span> <span style="background-color:#ccffcc;"></span> <!-- ;対訳 《 》 内は、訳者が説明のために補った語。<span style="font-family:Times New Roman;font-size:30pt;">{</span> <span style="font-family:Times New Roman;font-size:30pt;">}</span> 内は関係文。 <span style="font-family:Times New Roman;font-size:15pt;"></span> --> == 訳文 == *<span style="background-color:#dff;">訳文は、[[ガリア戦記_第5巻#40節]]</span> == 脚注 == {{Reflist}} == 解説 == <!-- {| class="wikitable" style="text-align:center" |- style="height:23em;" | | |} --> == 関連項目 == *[[ガリア戦記]] **[[ガリア戦記/注解編]] ***[[ガリア戦記 第5巻/注解]] **[[ガリア戦記/用例集]] == 関連記事 == == 外部リンク == *[https://babel.hathitrust.org/cgi/pt?id=hvd.hn1tp9&seq=207 #207 - C. Iuli Caesaris De bello gallico libri VII : Caesar's Gallic ... - Full View | HathiTrust Digital Library] *[https://dcc.dickinson.edu/caesar/book-5/chapter-5-40 Chapter 5.40 | Dickinson College Commentaries] [[Category:ガリア戦記 第5巻|40節]] 2ipszsk70qr77nfl85emmioapg16csn 高等学校英語 英単語/類義語 4500語レベル サブページ15 0 39438 246670 246656 2024-04-14T00:42:30Z すじにくシチュー 12058 /* ※ 分割用タイトル */ 静かな silent(沈黙に重点), quiet wikitext text/x-wiki ==== ※ 分割用タイトル ==== ---- 設立 constitute と establish と found found という動詞がある。動詞「見つける」find の 過去形foundとは別に、原形で「設立する」のfoundという動詞がある。 「設立する」は活用が、 原形 found - 過去形 founded - 過去分詞 founded と変化をする。 foundの意味は「設立する」。「創設者」を名詞 founder と言うのを記憶の土台にすると、覚えやすいだろう。名詞 foundation で「基礎・基盤」や「建設・設立」などの意味。化粧でファンデーションとあるが、あれは和製英語ではなく、れっきとして foundation cream という英単語がある(ジーニアス英和で確認)。 ちなみに金融などで「ファンド」といわれる単語は fund (原形がfund )というまったく別の単語。組織などの「資金」「基金」が名詞でfundである。動詞 fund は、組織などに「資金を出す」こと(旺文社1400)。 なお、「基金の基金を集める」は raise a fund である(旺文社1400。ジーニアス)。また、raise money で「資金を集める」である(東京書籍4500。桐原4500)。 constitute は、議会や制度などを「設立する」。 なお、センチュリー英和によると、「議会を設立する」 constitute an assembly とのこと。 establish は、組織を「設立する」。たとえば桐原4500に「早稲田大学を設立する」という例文で establish が紹介されている。 ジーニアス英和によると、政府・学校・会社などを「設立する」のが establish である。 センチュリー英和によると、国家・政府などを「樹立する」のも establish である。 だが、それよりもestablishは、単語集にはないが、評判などを「確立する」の意味で覚えるほうが良い。 たとえば、センチュリー英和やジーニアス英和にあるが、国家体制など既存の「体制側」や「支配層」のことを establishment という。 いっぽう constitute には、こういったニュアンスはないだろうから。 set up set up は「創業する」「創設する」の意味である。 このほか、set upには、テント(a tent)や看板(a sign)などを「立てる」という意味もある。 センチュリー英和にもあるが、コンピュータの初期設定のことを set up という。 ---- 主張 claim と insist と argue と contend 議論する argue, discuss センチュリー英和によると、claimは、当然の権利として「主張する」、あるいは事実であるとして「主張する」の意味。 claimとinsistのどちらにも、「要求する」の意味がある。 だが、claimの要求は、権利としての要求である(東京書籍4500)。 いっぽう insistの要求は、単に強く要求しているだけである。 insistは、特に、強く「主張する」意味である。 ジーニアス英和およびセンチュリー英和では、無罪の主張でinsist on が用いられている。 日本語の、批判のような意味での「クレーム」は、和製英語であり、センチュリー英和のclaimの説明によると、英語にこの意味はない。 なお、「文句を言う」は英語で complain である。 :(※ たぶん範囲外?)海外旅行などで「荷物の受け取り」のことを baggage claim という<ref>『ビジネス・コミュニケーション』、実教出版、令和2年12月25日 検定済、令和4年1月25日発行、P140</ref>。このように、日本語の「クレーム」と英語のclaim は、だいぶニュアンスが違う。 記号「!」 のことを exclamation (イクスクラメイション)というが、これも動詞 exclaim (イクスクレイム)「さけぶ」の名詞形である。 なお、荷物 baggage は集合名詞なので たとえば複数の荷物を言うときは、 ~ pieces of baggage になる<ref>『ビジネス・コミュニケーション』、実教出版、令和2年12月25日 検定済、令和4年1月25日発行、P153</ref>(桐原3000)。 発音注意であり、baggage 「バギッジ」である。 なおbaggageはアメリカ英語。イギリス英語だと luggage 「荷物」になる。 一方、「カバン」bagは具体的なカバンのことをいうので、普通に数えられるので、bagの複数形は bags である<ref>『All aboard! English Communication I』、東京書籍、令和3年1月29日検定済、令和4年2月10日発行、P145</ref>(桐原3000)。 さて、claim する人(主張者)のことは claimant である。 ただし、権利の主張などは、insistとclaimのどちらでも良い。 argue は、理由をあげて「主張する」の意味である(東京書籍4500)。argue that ~ で「~だと主張する」の意味である。argue with ~(人) で「~(人)と言い争う」の意味である(桐原4500および旺文社1400)。 なお、argueには、用法によっては、やや非友好的に「議論する」ニュアンスもある。ジーニアス英和にも、argue は「discussよりも非友好的」と記述がある。 たとえば検定教科書 "Standard Vision Quest I" でも、 argueは「言い争う」といった意味であると紹介する一方、discuss は「議論する」であると紹介している<ref>高等学校外国語科用『Standard Vision Quest English Logic and Expression I』、啓林館、令和3年3月5日検定済、令和3年12月10日発行、P71</ref>。 ただし、実際には argue には「説得する」などの意味の用法もあるので、ニュアンスの違いはあまり明確ではない。 センチュリー英和に、弁護士の「弁論」をargueとした例文があったが、もし法廷闘争での敵対陣営同士の「弁論」ならargueのほうが、ふさわしいだろう。 なお、「口論する」は quarrel である<ref>高等学校外国語科用『Standard Vision Quest English Logic and Expression I』、啓林館、令和3年3月5日検定済、令和3年12月10日発行、P71</ref>。 contend は、(東京書籍4500いわく)「強く主張する」とか、(桐原5500いわく)「論争する」とかの意味。 桐原5500の例文にあるが、contend in court で「法廷で争う」。 旺文社1900によると名詞 contention で「主張」「論点」の意味。 旺文社1900とセンチュリー英和が紹介しているが contend that ~ で「~だと主張する」。 旺文社1900 で熟語 an issue of contention (「議論の対象となる問題」)が紹介されてるが、しかしジーニアス英和でもセンチュリー英和でも確認できなかった。 * 異議を唱える challenge challenge には課題や競技相手などに「挑戦する」の意味もあるが、議論などで相手に「異議を唱える」の意味もある。 たとえばジーニアス英和からの抜粋だが、 I challenged her. 「私は彼女に異議を唱えた。」 旺文社1900からの抜粋だが、 He challenged the common belief. 「彼は常識に異議を唱えた。」 センチュリーからの抜粋で、 He challenged my statement. 「彼は私の言うことに異議を唱えた。」 challenging で「やりがいのある」。東京書籍3000に例文がある。辞書を見ても、あまり例文が無いので、当ページでは紹介しない。 なお単語集にはないが、ジーニアスによると、競技などで challenger 「挑戦者」 ⇔ defender 「選手権保持者」(防衛側) である。defender の項目で調べると書いてある。 競技では、challenge は試合を「申し込む」などの意味である。 たとえば、東京書籍3000の例文だが、 Dan challenged me to a game of tennis. 「ダンは私にテニスの試合を申し込んだ。」 また、センチュリー英和に似たような例文 I challenged Betty to a game of tennis. 「私はベティにテニスの試合を申し込んだ。」 がある。 ---- 防御 defend , guard , protect まず、「ガードマン」は和製。 guard だけで「警備員」の意味がある。特に、警備員であることを強調したい場合、 a security guard という(東京書籍、旺文社)。 a security をつけずに「警備員」と使用してもいい。桐原3000の英文は銀行の「警備員」に、 a security をつけていない。 さて、defend は動詞。guardは名詞および動詞。protectは動詞。 なお、guardian とは、未成年などの「後見人」のこと。旺文社1900ではguardian を「保護者」「後見人」と紹介している。 そのほか、センチュリーでは、たとえば世界平和の「守護者」とか、そういう意味の「守護者」のことを guardian という。そのほか、ジーニアスには guardian の意味のひとつに「保護者」と書いてある。 protect は、病気などから「守る」場合にも使えるが(東京書籍3000)、ジーニアスによると人間などの相手でも使っていいようである。 辞書や単語集では「保護する」と訳される場合もある。 名詞 protection は「保護」の意味。 辞書によると、関税によって国内産業を「保護」することも protect である。また、風雨からの保護の「雨よけ」「風よけ」も 名詞 protection である。 さて、ジーニアスによると、「家族を守る」でprotect one's family である。ジーニアスでは文脈は述べていないが、普通の感覚では、病気とかではなく犯罪などから家族を守ることだろう。 日光(sunlight, sun)から目を守ったり(ジーニアス、センチュリー)、肌を守ったりするのも(桐原4500)、protectである。 たとえば、 protect one's eyes from sunlight 「日光から目を守る」 である。 protect 〜 from B で、「〜(守られる対象)をB(危険側)から守る。」である。 なお、子育てなどでいう「過保護」は英語で overprotect である(桐原5500)。 ---- 汚染 pollute と contaminate 違いは不明確。 桐原5500にcontaminate がある。polluteは桐原・東京書籍の4500にある。 一応、ジーニアス英和および桐原5500には、「毒物や放射能」による汚染を contaminate としているが、彼らがそういう説を言っているだけ。クラウン英和はその説を採用していない、 実際にクラウンの例文を見ると、車の排気ガス汚染で、contaminate という動詞を用いている。 :Car exhaust contaminate the air. 車の排気ガスは大気を汚染する。 という文がクラウン英和にある。 しかし東京書籍4500では、工場の煤煙による大気汚染が pollute である。 クラウン英和にある大気汚染 air pollution のように、そういう用語が既にあるので、実務では業界の用語ごと覚えるしかない。 ※高校生としては、不正確かもしれないが、とりあえず「汚染」はすべてpolluteで覚えておいて、実務などで「この場合はcontaminete を使え」と修正された場合にだけ contaminate を使うのが良いだろう。 ---- 傷(きず) wound, injured, harm, hurt 動詞 wound は、刃物・銃などで「傷つける」、「負傷させる」。桐原3000だと「傷つける」、東京書籍4500だと「負傷させる」。 ジーニアス英和hurtの説明によると、戦いでの負傷には wound を使うとのこと。 hurt は、感情なども含む「傷つける」。偶然か英米人のダジャレかどうか知らないが、心のheart と、心を「傷つける」 hurt とで発音が近い。関連付けて覚えよう。 センチュリー英和だと、hurtには、「傷による苦痛に重点がある」とのこと。 名詞 injury が「けが」という意味。これが「けが」の基本的な単語である。 さて、~ be injured で「~が、けがをする」の意味である。 ~ be injured in ・・・ で「~(けが人)が,・・・(原因)でけがをする」である。 単語集によくある典型的な例文が、 「彼はその事故でけがをした。」 He was injured in the accident. である。 単語集では、自動詞 hurt で「痛む」の意味があり、東京書籍4500で例文を紹介。一方、桐原4500は例文なし。 「おなかが痛い」(※東京書籍4500)とか(靴擦れで)「かかとが痛い」(※センチュリー)とかでも、hurtを使っていい。 桐原4500に名詞 hurt で、「傷」の意味が紹介されている(例文なし)。東京書籍4500にはなし。 hurt には「けが」・「傷」・「苦痛」の意味がある。 「傷」の意味では、injuryとほぼ同義だと、ジーニアス英和が言っている。 hurtとpainの違いが気になるが、あいにく辞書には書いてなかった。 ややしいことに「痛み」を意味する名詞 pain には、「苦労」の意味もある。苦痛ではなく苦労なので、いい意味でも使われる。 なお、painは名詞の用法が基本的な意味だし、名詞の意味は「痛み」。 hurt は動詞の用法が基本的な意味だし、動詞の意味は「傷つける」。 辞書を見ると、実は動詞のpainもあるが、これは「痛む」の意味である。(「傷つける」ではない)painはあくまで「痛み」に関する単語 名詞 harm は「害」の意味。なお、harmful で「有害な」の意味の形容詞<ref>高等学校英語 検定教科書『FACTBOOK English Logic and Expression I』、令和3年5月 文部科学省検定済、令和4年2月25日発行、P111 </ref>。 東京書籍およびジーニアスによると、日光や光によって「目をいためる」のは harm である。 飲酒や喫煙などの「害」がharm 。桐原4500に喫煙の害。センチュリー英和に飲酒の害。 このように、比較的に痛みを伴わないものにも使われる。(センチュリーにもそう書いてある。) だが、「目をいためる」ように、実際に痛いこともある場合にも使われるので、まあ傾向の程度。 ネットでときどき「有害コンテンツ」という用語があるが、「有害コンテンツ」も英語で harmful contents である<ref>高等学校外国語科用『Standard Vision Quest English Logic and Expression I』、啓林館、令和3年3月5日検定済、令和3年12月10日発行、P121</ref>。 ほか、旺文社1900のsubstance ’物質)の項目が言うには、飲食物などに含まれていたら困る「有害物質」は harmful substances である。 さて、動詞 suffer が「苦しむ」という意味だが、 be suffering from ~ で、「~(原因)で、苦しい(つらい)」的な意味。 東京書籍 be suffering from a toothache 歯が痛くてつらい 桐原 be suffering from a backache 背中が痛くて苦しい などと訳している。 ジーニアスによると、 「風邪をひいている」 be suffering a cold のように痛み以外でも使っていい。ほか、「英国はインフレで苦しんでいる」 be suffering from inflation のように使ってもいい。 ---- やわらげる relieve, ease 苦痛などを「やわらげる」は動詞 relieve である。 典型的な例文で、(風邪薬などで)「頭痛をやわらげる」 relieve a headache がある(東京書籍4500およびセンチュリー)。 誰が風邪薬を飲んで誰の頭痛をやわらげるのかによって、飲んだのが「私」だったら relieve my headache になったり、教材ごとに主語による多少の違いがある。 どちらにせよ、単に柔らかいわけでもなく、単に軽減するわけでもなく、苦痛などを減らすのが relieve である。 relieve A of B(苦痛など) で、「AからBを除いて楽にする」の意味。 熟語 get rid of ~ 「~を取り除く」と関連づけて覚えよう。実際、桐原4500がそういう構成である。 名詞形は relief であり、「安心」「緩和」「救援」などの意味である(単語集にある)。単語集にはないが、野球のリリーフも同じrelief である(センチュリーで確認)。 sigh with relief で「安堵(あんど)のため息をつく」である。sigh (発音「サイ」)は、動詞としては「ため息をつく」、名詞としては「ため息」である。 例文は、 She sighed with relief. 「彼女は安堵のため息をついた」 である(東京書籍4500 項目 sigh。旺文社1900 項目 sigh)。 ともかく、「安心」的なのが relieve のイメージなので、be relieved to ~(動詞) で「~で安心した」という形容詞的な用法になる。 というか、辞書ではジーニアス英和でもセンチュリー英和でも、 relieved を形容詞として紹介している。 ease (イーズ)という動詞および名詞がある。これも動詞ease は「やわらげる」「取り除く」の意味である。これは形容詞の「簡単な」 easyの、名詞計および動詞形である。 名詞 ease は「容易さ」「気楽さ」「軽減」の意味である。 This medicine eases the pain. 「この薬は痛みをやわらげる。」 のように使う(東京書籍および旺文社に似た例文)。 ジーニアスによると、頭痛 headache をやわらげるのに ease を用いてよく、旺文社によると胃痛 stomach pain をやわらげるのに ease を用いている。 このような薬による「取り除く」「やわらげる」の意味での ease は、ジーニアスによると、relieve とほぼ同義語とのこと。 ---- 取り除く remove, eliminate remove は、「取り外す」の意味に近い。 たとえばパソコンのUSBスティックメモリなどを「リムーバル・メディア」などというが、取り外したあとに、別に捨てるわけでもなく、消去するわけでもない。 このように、remove は単に「取り外す」「取り除く」というニュアンスである。 名詞 removal (リムーバル)「取り外し」という単語も存在しています(東京書籍4500)。 形容詞 removable(リムーバブル)「取り外し可能な」という単語もあります(東京書籍4500)。 「リムーバル」はけっして形容詞 removable(リムーバブル)「取り外し可能な」の誤記ではないです。間違えないように。 一方、eliminate は、取り除いたあとに、処分することを念頭に置いている。または、取り除いたあとに、再度の取り付けの意思がないものに使う。 なので、eliminate で取り除かれるものは、ゴミだったり、あるいは犯罪などの社会悪だったりする。 または、解決すべき問題を片付けることも eliminate である(東京書籍)。 だから eliminate の訳語は「取り除く」である。外すのではなく「除く」に、そういうニュアンスがある。 eliminate (A) from (B) で、「AからBを除去する」である。fromの後ろにあるBが、抹消されるべき対象である。 こういう単語なので、単語集にはないが、ジーニアスを見れば、敵軍などを全滅させる事も eliminate と言うこともある。 なお、生物種の「絶滅」は extinction (エクスティンクション)である。 熟語 get rid of ~ は、そこまであれこれと考えていない。remove的にも使われるし、eliminate 的にも使われる。あるいは、remove と eliminate の中間だと思っておけばいいかもしれない。 さて、 exclude は、「除外する」である。 これよりも、形容詞の exclusive エクスクルーシブの意味「排他的な」のほうが分かりやすいので、そちらを説明する。 exclusive 「排他的」とは、最初から内部に入れない、という意味である。 だからexclude は、最初から中に入れないように「締め出す」という意味もある(桐原で確認)。 excludeの「除外する」の意味については、可能性などを「除外する」という意味もあり、ジーニアスの例文だと、たとえば「明日、雨が降る可能性は除外できる」みたいな割と平和的な「除外する」にも exclude を用いることもできる。 そのほか、exclude は、見当などの際に「考慮に入れない」という意味もあり(ジーニアス、センチュリー、旺文社で確認)、たとえば旺文社の例文では「税金は価格から除外されている」という意味の英文で exclude を受身計で用いている。 なお、対義語は include であり、「含む」という意味である。 たとえば「税込み 5ドル」は <nowiki>$5,</nowiki> tax include である。 典型的な例文は、 「料金は税込みですか?」 Does the price include tax? がある( ジーニアス(ただしpriceでなくrate)、 東京書籍(ただし「料金」でなく「価格」と和訳) )。 また、-clude とは「閉じる」の意味である。 だから、たとえば conclude は、話を閉じるので「結論づける」「締めくくる」の意味。conclusion は「結論」の意味。 ---- 消去する erase , delete (※ 範囲外)火を消す extinguish 鉛筆で書いた文字を消しゴムで消すのが erase である。 また、消しゴムをアメリカ英語で eraser (イレイサー、イレイザー)という(東京書籍1800、旺文社1900)。なおイギリス英語では rubber である。 黒板ふきも eraser である(旺文社、ジーニアス、センチュリー)。 コンピュータのデータを消すのは、erase も delete も使われるが(ジーニアスで確認)、しかし現代では delete でデータ消去を表すのが普通である。 実際、パソコンのキーボードにも delete キーがある。 旺文社の例文も、メールの削除を delete で表現している。 なお、東京書籍と桐原の単語集には delete は見当たらない。 昔なつかしいテープのデータを消去するのには、erase が使われるようである(ジーニアス、センチュリーにerase でテープのデータを消す用法あり)。 erase で消すのは、文字のほかにも、感情を「消す」などの表現でも使われる(ジーニアス、)。 「記憶を消せればいいのに」みたいな表現でも erase を使う(旺文社、ジーニアス)。 辞書にはないが、delete はもともと動詞で「削除する」「消去する」の意味であるが、現代ではパソコンのデリートキーを表す名詞として、delete が名詞としても使われる(旺文社1900)。辞書のほうが遅れている。旺文社1900が正しい。 なお、名詞形 deletion 「消去」「削除」という単語もある(旺文社、ジーニアス、センチュリー)。 高校範囲外ですが、火を「消す」は動詞 extinguish (イクステングィッシュ)です。 extinguish は一見すると見慣れないですが、実は高校範囲の単語「絶滅」 extinction (イクスティンクション)の動詞形です。 extinction のスペルのままでは動詞の意味は無いです(センチュリー、ジー二アス)。 消防士による「消火する」から(ジー二アス)、たばこの火を「消す」まで(センチュリー)、extinguish で表現できます。 なお、extinct は形容詞「絶滅した」「消滅した」です。 ほか、生態系の「絶滅危惧種」は an endangered species である(桐原4500 species、ジー二アス endangered)。東京書籍と旺文社には、species の項目自体はあるが、絶滅危惧種はない。 なお、植物の「種」(たね)は、seed という別の単語である(東京書籍4500、桐原3000)。 典型的な例文は、 「農場に種をまく」 plant seeds in the field である(東京書籍4500、桐原3000)。 plant は「種をまく」という意味の動詞。 field は「農場」である。 動詞として seed 「種をまく」という用法もあるが、旺文社以外1200は紹介していない。少なくとも、桐原3000と東京書籍4500には、動詞の用法が紹介されていない。 ---- 疑い suspect ,doubt doubt ~は、「~が信じがたい」の意味。 → don't think に近い たとえば doubt if ~で「~かどうか疑わしい」。doubt that~で「~でないと思う」である。 suspect ~ は、「どうも~のようだ」のような意味(ジーニアス英和) → think に近い 旺文社1400にあるdoubt 例文で、 doubt ifの例文「私は神が存在するかどうか疑わしく思う」I doubt if god sexists. および doubt that の例文 「私は神は実在しないと思う」I doubt that god exist. が覚えやすいだろう。 suspect~ の 目的語(~)の部分は、原因や容疑などがくる。 例文として「食中毒を疑う」 suspect food poisoning とか(東京書籍4500)、 容疑者は名詞 suspect である。 このほか dubious と言う「疑わしいと思う」(桐原5500)という単語があるが、辞書の例文が不足していてよく分からなかった。単語集では桐原5500に書いてある。 ---- 治療と回復 「治す」 heal, cure , 「~'''が'''回復する」(自動詞)は recover 「~'''を'''回復する」(他動詞)は restore 「気分の回復」は refresh 「(健康などを)取り戻す」は regain 医療や薬などによって、けが や病気を「治す」一般的な語は cure である。 外傷を治す場合は heal が好んで使われる。 cure ~(人) の語順である。 けが を治す場合、 cure ~(人) of □□(けが・病気) の語順である。 典型的な例文が 「その薬が彼の病気を治すでしょう」 The medicine will cure him of his disease. である(ジーニアスの例文を改造し、「あなたの病気」から「彼の病気」に変更)。 桐原にも似た例文があり、 This medicine will cure him of the disease. 「この薬が彼の病気を治すだろう。」 とある。 his disease か the disease かなどの多少の違いはあるが、まあこんな感じの英文になる。 get rid of ~ などと同様に、ofの後ろには取り除かれるべき物が来る。 heal も同様、 heal ~(人) of □□(けが) の語順である。 だが、東京書籍4500および桐原4500いわく、 heal the wound 「けがを治す」のように、ofを使わずに使われる場合もある。 recover は「回復する」である。 recover from ~ で「~から回復する」である。 動詞 restore は、 「秩序を回復する」 restore order のような例文が辞書で典型的(ジーニアスとセンチュリーの両方にある)。 さて、旺文社 store 項目によると、パソコンなどで、データをバックアップすることは store である。 そして、単語集にはないが、バックアップをもとに設定データなどを自動的に「復元する」ことを restore という事がよくある。 辞書によると、古い建築物や美術品などを復元することも restore である。 東京書籍4500では、教会を修復するのを restore としている。その教会が古いかどうかは東京書籍4500には書いてない。 桐原では、桐原5500にrestoreが書いてある。 けがの回復ではなく、ちょっとした疲れやノドの渇きや気分などを、軽い飲食物や短時間の休養などで回復させるぐらいの場合は、動詞 refresh (リフレッシュ)で表せる。 旺文社1900がrefreshを紹介している。桐原・東京書籍は紹介せず。 ジーニアスいわく、冷たい水を飲むのも refresh である。 refresh は主語や述語の語順のつかいかわけが難しいので、例文を省略する。 センチュリーいわく、入浴で疲れをとるのも refresh である。また、ジーニアスでもセンチュリーでも、アルコールで気分を回復するのが refresh である。 そのほか、ジーニアスによると、コンピュータなどのディスプレイ上の画像が更新されるのも refresh である。これからのIT時代は覚えておきたい。 regain one's health で「健康を取り戻す」という慣用表現である(ジーニアス、旺文社1900)。 旺文社1900にしかなく、番号 1502 / 1900 の単語。少なくとも桐原4500・5500と東京書籍4500にはない。 He regained his health. 「彼は健康を取り戻した」 のように使う(センチュリー)。 「意識を取り戻す」 regain consciousness もよく使われる(ジーニアス、旺文社1900)。 たぶん She regained consciousness のように使う(旺文社に似た例文)。 また、この用例から分かるように、健康的なものを取り戻す場合、普通は主語が自身の健康を取り戻すのに regain を使う。 「自由を取り戻す」(センチュリー)とか「都市を取り戻す」(ジーニアス)とかの政治的なことも regain である。 ---- 蓄え store , stock store は「店」という意味の名詞でもあるが、「蓄える」という意味の動詞でもあり、さらに「蓄え」「蓄積」などの意味の名詞でもある。 なお、storeを「店」の意味で使うのはアメリカ英語。イギリス英語では店はshopである。桐原3000にも東京書籍3000にも書いてある。storeは3000語レベル。 stock は「在庫」や「株式」という意味の名詞でもあるが、「蓄え」「蓄積」などの意味の名詞でもあり、さらに商品を「店に置く」「仕入れる」などの意味の動詞でもある。桐原と旺文社は、「仕入れる」の意味まで単語を紹介している(ただし例文なしで単語のみ)。 stockは4500語レベル。 しかし単語集では、ややこしいので、stockについては、「株式」「在庫」の意味の名詞だとしてしか、紹介していない。しかし実はstockも動詞の用法があるのである。 センチュリーによると、食料の「蓄え」は、stock でも store でもよい。 たとえばセンチュリーのstockの例文は「我々の食料の蓄え」Our stock of food である。センチュリーのstoreの例文は(リスが冬に備えての)「食料を蓄える」lay in a store of food である。 このように、どっちでも食料 food を蓄えられるので、区別がつかない。 storeは別にリスのような動物限定というわけでもなく、たとえばセンチュリーで図書の「蔵書」 a book of store などの表現もある。 storeが店での商売関係というわけでもない(もし商売に限定だすると、図書の蔵書とかリスの食料とか、説明がつかない)。 なので、stock に「株式」「在庫」の意味があると覚えるしかない。 桐原および旺文社いわく、 be out of stock で「在庫が切れている」 の意味。桐原は例文も紹介。旺文社は例文なし。東京書籍は紹介せず。 例文は桐原も東京書籍も旺文社も、在庫の例文である。 単語紹介だけでが、桐原いわく「株式市場」stock market 旺文社いわく「証券取引所」the stock exchange である。 語源を調べてみても、 stock の語源は木の「棒」stick と同じだと書いてあるだけで、stock と storeとの区別には役立たない。 さて、単語集にはないが、パソコンなどのハードディスクなどの貯蔵量のデータ記録デバイスのことをストレージ storage という。 ついで、単語集にある情報だが、 storage は、「貯蔵庫」や「保存庫」の意味で、東京書籍4500の巻末にだけ、解説なしで、単語と例文だけ書いてある。 辞書を確認のため見たが、ジーニアス英和は家具の「保管」を storage といい、センチュリー英和は単に「倉庫」を storage といい、あまり共通性はなさそうなので、深入りしない。 ---- 愚か(おろか) 形容詞 foolish, stupid, silly, ridiculous などがある。 このうち、 foolish, stupid, silly, は、「愚かだ」「馬鹿げている」の意味。 このうち silly は口語調。 <nowiki>Don't be silly.</nowiki> で「馬鹿げたことを言わないで。」という典型的な例文があり、東京書籍4500でも紹介されている。 名詞foolが形容詞になったのが foolish である。 stupid は、辞書によると、foolish よりも、けなしの意味が強い。口頭では使わないほうが安全だろう。 ridiculous は、「不合理で馬鹿げている」という意味。センチュリーによると、ridiculousには、あざけりや物笑いの意味もあるとのこと。 単に「不合理だ」の意味なら、 absurd を使う。桐原5500にabsurdが書いてある。なるべくabsurdを使うほうが高尚だろう。 センチュリーによると、absurdは、不合理さ・非常識さを強調している。 ---- 移行と移転と移動 migrate, transfer , 桐原4500に名詞形migrant (移住者)が書いてありますが、英語では動詞 migrateとは「移住する」や、渡り鳥の「渡る」のことです。 しかし単語集にはないですが、そのほかにもmigrateには、IT用語では古いシステムに入っていたデータやプログラムを新しいシステムの中へと「移す」ことや、開発環境などのシステムを新システムへと「移行する」という意味もあります<ref>[https://www.otsuka-shokai.co.jp/words/migration.html マイグレーション | IT用語辞典 | 大塚商会]</ref>。 なお似た言葉にreplaceがありますが、これはサポート切れなどで古くなったりして(obsolete)使えなくなったソフトウェアなどを現在の稼働中の使えるバージョンのものに「置き換える」(replace)ことを意味します。 英語では、「『移住』にシステム環境『移行』の意味もある」と覚えることが本質的な理解でしょう。 なお、スペルの似ている immigrate に、(外国から)「移住する」の意味があります(桐原4500)。またなお、桐原4500にも書いてあるが、空港などの入国管理が名詞 immigration である。英会話の教材などでよく immigration が出てくる。 immigrate と migrate の意味の違いを把握するため、辞書の説明に逆らって、私たちは migrate は(環境を)「移行する」で覚えましょう。 これが、moveやtransfer と、migrate との違いです。 なお transfer に「転勤する」「転勤させる」の意味があります(桐原4500)。 「転勤させる」ほうは他動詞なのでtransferでもいいのは分かりますが、「転勤する」と「移住する」の区別が難しいです。まあ、おそらく他動詞からの類推か、慣用的にtransfer が定着しただけでしょう。 なお、辞書にありますが「転校」や(プロ選手などの)「移籍」もtransferです。 高校生物の遺伝に関連する細胞物質のひとつで、トランスファーRNA (transfer RNA)というのがあります。こういうのと関連づけて覚えましょう。 また、列車・バスなどの乗り換えも transfer です。 スペルの似た単語で、transport という動詞および名詞がありますが、動詞 transport は「輸送する」です。 transfer 「乗り換え」はおそらくtransport 「輸送する」との関連で定着した表現でしょうか。 単語集にも辞書にもないですが、インターネット用語で HTTP というのがありますが、これは「Hypertext Transfer Protocol 」の略です。データなどを「転送する」のも transfer です。 センチュリー英和によると、銀行口座に「振り込む」もtransfer とのことなので、おそらく「送金する」のようなニュアンスでしょう。 なお、ジーニアス英和およびセンチュリー英和によると、法律用語で、財産などを「譲渡する」もtransferです。 transition という名詞が別にあります。transition は、移行期にあるものについての「移行」のことです。桐原4500 では「議会制民主主義への移行」、旺文社1900では「自動運転車への移行」を例文にしています。 ---- 決定 determine ,decide 辞書にはないが、determine は、断固とした決意で「決心する」「決定する」である。 形容詞 determined がセンチュリー英和によると断固とした決意の意味なので、動詞determineのほうもそういうニュアンスである。 あと、ジーニアス英和にあるが、判決を下すのも determine である。 あと、予備知識がないと気づかないだろうが、東京書籍4500にある例文のように、専門家などが原因などを「特定する」ことや、判定するのも determine である。 実際には、あまり断固としてなくても determine が使われるような例文もちらほらとあるが、あくまで派生的な用法だと思うべきだろう。 だから名詞形 determination は、「決心」「決意」と覚えるべきだし、実際に桐原4500や東京書籍4500でそういう和訳である。 be determined to ~(動詞) で「~する決心をする」 である。受身形で「決心する」になる。 たとえば He was determined to ~ 「彼は~する決心をしていた」 のように使う。また、完了形にせず、過去形のままで使う(桐原4500の例文、ジーニアスの例文など)。 能動形でも「決心する」の用法もあるが、普通は上述のように受身形で使う(ジーニアス)。 検定教科書で三省堂 CROWN Iを読んでいると、高校1年でもう be determine to do を扱っている。 対する decision は、和訳は「決定」である(東京書籍4500)。桐原によるとdecisionは「決定・決断」だが、しかし上述のように、どちらかというとdesicionは比較的に「決定」のニュアンスのほうに近いだろう。 resolve でも「決意する」だが、東京書籍4500だと彼女をデートにさそう「決心」という例文であり、まったくもって断固とした必死さが足りない。 そんなのよりも、会議などの「議決」のことを resolution というのを覚えたほうが良いだろう。桐原4500に「決心」「決議」と単語の和訳だけ書いてある(例文はなし)。 ---- 減少 decrease, decline , reduce, diminish 静かな silent(沈黙に重点), quiet まず、高校英語で増減を表す場合につかう典型的な単語は、increase (「増える」「増やす」の意味)および、対義語の decrease(「減る」「減らす」の意味)である。 たとえば、三省堂『CROWN II』「英語表現」教科書では、パラグラフ・リーディング/ライティングの説明で、留学生に関する分析の文章を扱っているのだが、留学生の「増加/減少」<!-- 「/」は原著が全角文字なので、それに合わせた。 -->にそれぞれ increase/decrease という表現を使っている<ref>高等学校学外国語科用『CROWN English Expression II New Edition』、三省堂、2022年3月30日 発行、P81</ref>。 この例のように、 increase (増加)と decrease (減少)は対になって使える便利な表現であるので、まずはこれを覚えよう。 熟語というほどではないが、 ~(主語) increased by □□(数値) percent. で、「~が□□%上昇した。」である。たとえば上記のパターンで、東京書籍4500では「その商品の売り上げ」Sales of the product だし、旺文社199では「日本の実質GDP」Japan's real GDP である。桐原3000には数値上昇の例文なし。桐原は昔から単語集では定番だが、しかし桐原だけでは勉強できないこともある。 increase で増える数値はなにも百分率(パーセント)でなくてもよく、たとえばジーニアス英和では、「体重は2キロ増えて60キロになった」 increased by two kilograms to 60 kilograms. という例文もある。 on the increase で「増大して」の意味。なお、ここでの increase は名詞。 東京書籍4500では「自動車事故が増加している。」 Bike accidents are on the increase. センチュリー英和では「大都会における犯罪は増加しつつある。」 Crime in big city is on the increase. ジーニアスは on the increase の例文なし。このように、ひとつの英和辞典だけでは勉強できない。 別に on the increase を使わずとも、現在増加中のものは現在完了進行形で書いてもよく、桐原3000がそうであり、 「車の台数が増え続けている」 The number of cars have been increasing. である。 ジーニアス英和にある説明だが、よく、The number of ~ increased. で「~が増えた。」と言う例文があるが、「The number of 」を省いて直接「 ~ increased. 」のように言ってもいい。 実際、東京4500の例文「自動車事故が増加している。」 Bike accidents are on the increase. でも、 the number of は無い。 on the increase のbe動詞が単数形(is)なのか複数形(are)なのか食い違いがあるが、英和辞典を見ても、とくに言及はされていない。 increasingly で「ますます」の意味が紹介されているが(東京書籍4500。旺文社1900)、しかし例文は無い。 価値や能力を「高める」場合、enhance (エンハンス)という動詞が使われることもある。だが、辞書でも例文が少なく、あまりいい例文が見当たらないので、説明は省略。旺文社1900だと、603/1900の位置でenhanceを紹介している。だが東京書籍4500では、巻末ちかくで enhance を紹介である。桐原に至っては、4500語レベルではなく桐原5500の後半ちかくでenhanceを紹介である。 なお、遺伝学の用語でエンハンサーというのがあり、サイト『脳科学辞典』によると「 エンハンサーとは、遺伝子の転写量を増加させる作用をもつDNA領域のことをいう。プロモーターからの距離や位置、方向に関係なく働く[1][2][3]。サイレンサー(遺伝子の転写を抑制するDNA領域)とともに、遺伝子の発現調節で重要な役割を果たす。」とのこと<ref>[https://bsd.neuroinf.jp/wiki/%E3%82%A8%E3%83%B3%E3%83%8F%E3%83%B3%E3%82%B5%E3%83%BC 佐藤 達也、斎藤 哲一郎、『エンハンサー』、原稿受付日:2013年3月25日 原稿完成日:2015年1月15日]</ref>。 ほか、和製かもしれないが、音楽用語でDTM用語で、「エンハンサー」という機器がある。なお、近年ではエキサイターとも言うらしい。もしかしたら微妙に機能が違うかもしれないが、特定分野なので深入りしない。 サイレンサーというのは、銃などの減温装置などもサイレンサーというので、おそらく何かしら「エンハンサー」という機械装置が欧米にもあってそれを由来にした生物学用語なのだろうが、調べきれなかった。 なお、いくら銃に持ち運びできるような装置を取り付けても、さすがに無音にできるわけではないので(消音ではない)、「サイレンサー」という表現は誇大広告。近年は、銃の消音装置は「サプレッサー」 suppressor (「抑制するもの」というような意味)という。なお遺伝生物学では、過去の間違った学説にもとづく架空の分子に「サプレッサー」と言う用語が使われたことがあって、そのため、この語の使用をひかえている。 なお、このsuppressも高校英語であり、東京書籍4500および旺文社1900に書いてある。 suppressには(人間の集団を)「鎮圧する」の意味がある。 The police suppressed the protesters. 「警察は抗議する人々を鎮圧した。」(東京書籍4500の例文を改変) みたいに使う。 なおジーニアス、グランドセンチュリーだと The police suppressed the revolt. 「警察は反乱を鎮圧した。」 のような例文がある。revoltは高校範囲外。 東京書籍が気を利かして、中学歴史の宗教革命で「プロテスタント」を習ってるので、抗議者 protesters の例文のほうが高校生に分かりやすいだろうという気遣い(きづかい)。 silent を辞書で調べてたら、「沈黙の抗議」a silent protest という例文がジーニアスにもグランドセンチュリーにもあった。ついでに覚えよう。silentも高校英語(東京書籍4500、桐原3000、旺文社1200(いちばん簡単な黄色本))。 名詞形は silence サイレンス。 今の中学音楽の教科書は知らないが、むかし中学音楽の教科書で、サイモン&ガーファンクル(ミュージシャンのコンビ)の サウンドオブサイレンス と言う曲が掲載されていた。なので知ってる人も多かった。 The audience became silent. 「観客は静かになった。」 みたいな例文がよくある。 さて、suppress サプレスに戻る。桐原4500および5500には suppress が見つからない。 なお、suppressor はジーニアスにはあり、suppressor 「消音装置」。グランドセンチュリーにsuppressorは無い。 The streets were silent. 「通りは静かだった。」(東京書籍4500) ジーニアスに a silent street という例文があるが、street の訳が「通り」ではなく「街」。「静まり返った街」と訳している。 keep silent や remain silent で「沈黙を保つ」(東京書籍4500がremain のみ紹介。ジーニアスで両方を紹介) silent と quiet も類義語である。(桐原3000) silent は、物を言わないことに重点がある。(ジーニアス)。ただし、人間以外にも silent を使うことがあり(上述の silent street のように)、「静かな」の意味もある。 quiet との区別は難しい。 ジーニアスいわく、 a silent volcano 「休火山」= a dormant volcano とのことだが、しかしネットの画像検索で silent volcano を調べると噴火の画像ばかりである。 ほか、 The audience fell silent. 「観客は静かになった。」(東京書籍4500) ジーニアスいわく、fall silent で「急に黙り込む」とのこと。東京書籍とジーニアスの見解が微妙に一致しない。 さて、decline は自動詞であり、つまりdeclineは「低下する」「減少する」の意味である。 declineの典型的な例文が「出生率は低下している。」であり、東京書籍4500では The birth date is declining. 「出生率は低下している。」 である。 似た例文が、旺文社1400にもあり、 「出生率は低下し続けている。」 The birth rate continues to decline. である(旺文社1400)。 なお検定教科書にも decline の単語は掲載されている<ref> 、『CROWN English Communication III New Edition』、三省堂、2018(平成30)年2月28日 文部科学省検定済、2022(令和4)年3月30日 発行、P45</ref>。和訳が検定教科書に書かれてないので不明だが、その検定教科書では経済の議論の紹介で decline が使われているので、「低下する」の意味にて decline を用いているのだろう。 decline には、申し出・誘いなどを「断る」の意味もあり、桐原4500に紹介されているのはこっちの意味だけ。 しかし、高校の検定教科書に、「少子化」 declining birth rate が照会されているので、「減少」の意味のほうもキチンと覚えよう<ref>高等学校英語 検定教科書『FACTBOOK English Logic and Expression I』、令和3年5月 文部科学省検定済、令和4年2月25日発行、P18 </ref>。 名詞形 declination が、ていねいな断りの意味。 reject (計画などの「拒絶」。※却下のような意味)や refuse (拒絶)だと意味が強すぎるのだろう。 reduce は「減少させる」。3R運動のリサイクル、リユース、リデュースのあれ。  「減少」は名詞 decrease と名詞 reduction がある。 reduction は、「削減」のニュアンスで使われることが比較的に多く、桐原4500および東京書籍4500の例文が経費削減である。 reduce costs で「経費を削減する」である。 このほか、diminish や drop や fall などがあるが、やや高校範囲を超える。一応、diminishは桐原5500および東京書籍4500には書いてある。(桐原4500には書いてない。)な 一応、diminish は、検定教科書『CROWN III』で使われている<ref>高等学校学外国語科用『CROWN English Expression III New Edition』、三省堂、2018(平成30)年2月28日 文部科学省検定済、2022(令和4)年3月30日 発行、P73</ref>。 CROWN III にある例文は But the war 1990's, the threat of war diminished. という文章(抜粋)である。検定教科書に和訳がないので答えは不明だが、「しかし、1990年代には、戦争のおそれも少なくなった」ような意味である。 直前の文章では、「20世紀は戦争が多く」みたいなことを英語で言っているので、おそらくそういう意味だろう。 辞書で diminish を確認したところ、ジーニアスもセンチュリーも悪い意味に使う例文のほうが多いが、しかしCROWN IIIの検定教科書によると、とくにdiminish には悪い意味合いは無いようである。 桐原5500に書いてある例文も、 We can diminish our fear. 「恐怖を減らすことはできる。」(抜粋) なので、別にdiminish に悪い意味合いはない。 なお、桐原5500の例文は東北大の過去問。ネットでは「地方国立の入試英語なんて教科書レベル」などの言説もあるが、まあ確かに教科書にはdimisihも書いてあるものの、大分、学習量は大きい。 drop やfall は、旺文社1400の巻末にある類義語の章にだけある(本編には解説なし)。 dropは数量や人口、価格などの減少で使われる「口語的」な語(旺文社が「口語的」と言っている)。ただ、ノーベル経済学者クルーグマンのツイッターを読んでたら、「インフレの減速」のような意味で普通に drop を使っていた。 価格の低下だけでなく、派生してインフレの減速にもdropが使われることから、もしかしたら経済学などでは文語的に drop という単語が使われている可能性もあるかもしれない。 なお、「急騰する」は soar である(桐原5500、旺文社1900)。 単語集の例文だと完了形で have soared だが、急騰の結果として現在でも株価が高いなら完了形にするのが無難だろう。 インフレ率の上昇でも株価の上昇でも何でもいいが、たとえば旺文社1900が株価の上昇の典型的な例文 The stock prices of the company has soared . 「その会社の株価が急上昇した。」 である。 ジーニアスは野菜の価格の急騰、桐原5500は米価の急騰である。たとえばジーニアスでは The price of vegetables is shoring. 「野菜の価格が急騰している。」 である。この野菜の例文のように、進行形ならもちろん、現在も急騰の真っ最中になる。 時制ついでに桐原5500の例文を紹介すると、 Figure showed the price of rice had soared to record levels. 「数字は米価が記録的な水準にまで急騰したことを示していた。」 である。 なお「痛い」soreと同じ発音である。 ついでに言うと、よく景気の先行きについての見通しで「悲観的」だの「楽観的」だのマスコミ用語でいうが、これは英語でもそう言い、 「悲観主義」は英語でpessimism (ペシミズム)である。 「楽観主義」は英語で optimism (オプティミズム)である。 スペルよりも、まずカタカナで『ペシミズム』『オプティミズム』と覚えてしまおう。社会評論などの書籍などを読んでいると、ときどき外来語として「ペシミズム」などの用語を使っている場合もある。 典型的な例文として 東京書籍4500で「ボブは自分の将来について楽観的だ。」 Bob is optimistic about his future. である。 似たような例文が旺文社1900にもあり、「彼女は自分の将来について楽観的な気持ちだ。」 She feels optimistic about her future. である。 桐原4500が紹介しているが、なにも将来でなく経済に楽観や悲観を感じてもいいのである。 桐原によれば、「彼はその国の将来について楽観主義を表明した。」 He has expressed optimism about the country's economy. である。 wikiオリジナルの例文だが「トムは経済の先行きに悲観的だ。」なら、さしずめ Tom is pessimistic about the country's economy. とでもなろうか。 なお、英和辞典を見ても、例文が「~は将来に楽観的だ」とか「将来に悲観的になってはいけない」ばかりである。optimistic などの単語が経済予想や株価予想に使えることすら、辞書だけでの勉強では全然分からない。とはいえ、あまり良い市販の英語教材がない。 ともかく、また、これらの例文のように、 be optimistic about ~ で「~に楽観的だ」となる(東京書籍4500)。悲観の場合も pessimistic で同様。 念のため、派生語も含めて一覧にすると、 optimism 「楽観主義」、 optimistic 「楽観的な」、 optimist 「楽観主義者」(旺文社1900に紹介あり)、 pessimism「悲観主義」、 pessimistic「悲観的な」、 pessimist 「悲観主義者」、 である。 ---- 想像 vision, imagination, image vision は「想像」の意味があるが、「見通し」の意味もある。もっとも、見通しの意味では名詞 perspective がさらに高尚。 なお、perspective はどちらかというと「視点」の意味である。大局的な視点=見通しのようなニュアンスが perspective である。東京書籍が(大局的な)「視点」、桐原が「観点」。だが、別に大局的でなくても美術の遠近画法のことを perspective というので、東京書籍の説明はいかがなものか。 from a different perspective で、「違った視点から」 たとえばジーニアスいなる例文think about the problem from a different perspective で、「その問題を違う観点から考える」となる。ジーニアスは「観点」、東京書籍4500は「視点」と訳しているが、別にどちらでもいい。 different の部分を別の形容詞にすれば、 from ~ perspective で、「~の視点(観点)から」になる。 なお、スペルの似ているprospect は、何か良いことの起きる「見込み」、成功の可能性のこと。 たとえば形容詞 prospective は「有望な」の意味である。 ジーニアス英和によると、もともとはprospectは高いところからの「展望」のような意味だったようである。桐原4500にprospectが書いてある。 「見込み」outlook という単語もある(桐原5500 のprospect)。桐原5500では prospect の「見込み」の類義語として紹介されている。 もし、「観察力」とかを言いたい場合、observe 「観察する」である。 「洞察力」なら、penetrating 「洞察力のある」である(旺文社1900。桐原5500)。ただし、洞察力の意味での例文は単語集に無い。動詞penetrate には「浸透する」の意味もあって、そちらの例文が市販の単語集には書いてある。 もっと簡単な単語としては insight 「洞察力」という名詞があるので、これを使って洞察力を表現する方法もある。 なお、 語法 give A insight into B で「AにBの見識を与える」 である。 名詞 vision にも、「見通し」「洞察力」などの意味があるので、これでも洞察力を表現できるだろう。ただし、単語集にその用法での例文は無い。 旺文社1900によれば、 a one's(myなど) point of view で「〜の観点から」の意味。だが、これを直接暗記するよりも、まず名詞 view には、「眺め」の意味のほかにも、「見解」の意味があることまず知るべき。 慣用的に in my view, 「私の考えでは、」(ジーニアス、センチュリー)という表現がある。「考え」と訳しているが、「私の見解ですが、」くらいに訳したほうが分かり易いだろう。ただし、英語の view には、個人的な感情も含んで見方を示しているので、そういう意味で辞書では「意見」としたのかもしれない。 だが、 in my view は、ジーニアスによれば、in my opinion よりも控え目な言い回しとして使われる。 まあ、読者の自己責任で和訳してください。 単語集にはないが、viewpoint 「観点」という単語がある。ジーニアスの例だと、 From an economic viewpoint, 「経済的な見地からすると、」(その計画には利点がない) と続く。 センチュリーだと、 〜 from the viewpoint of employees. 「従業員からの立場からみれば」(昇給はよいことだ) となる。 旺文社の大学入試出る順シリーズに a point of view が書いてあるから、たぶん入試に良く出るんだろうが、正直言って瑣末な単語であろう。実際、桐原も東京書籍も a point of view を紹介していない。ジーニアスやセンチュリーにすら、少なくともview の項目には書いてない。辞書でpoint で調べると point of view が書いてあるが。 たとえば、センチュリー英和では「アメリカ人の視点から見ると、」(謝罪は自分の誤りを認めたことになる) From an American point of view, 〜 ジーニアス英和では「財政的見知では、」(これは由々しき問題だ) From a financial point of view, 〜 などの例文がある。 熟語 in terms of ~ で「~の点から」。なお terms はterm の複数形。東京書籍4500と桐原4500に似た例文があって、東京書籍「その計画は費用の点から現実的ではない」The plan is not realistic in terms of cost. なんで terms と複数形なのか不明と思うだろうが、しかし英和辞典にも in terms of と複数形で紹介されているので、受け入れてもらうしかない。 いっぽう、桐原「この計画は時間と費用の関係で現実的ではない。」 This schedule <nowiki>isn't</nowiki> realistic in terms of time and costs. term ついでに言うと、医療の末期医寮などでターミナルなんとか terminal 〜 とかあるが、辞書で確認すると用語term と末期terminal の語源は一応は同じだが、事実上は意味のまったく違う別の単語だと思うほうが良いだろう。東京書籍4500がそういう見解であり、「用語」 term と 「末期の」「終末の」 terminal を別々の項目として紹介している。 「末期の」の典型的な例文としては、「末期ガン」 terminal cancer がある(東京書籍4500. ジーニアス、センチュリー)。 桐原4500 では terminate 「終わりにする」が紹介。terminateの紹介位置が巻末ちかくの付録のため、例文なし。 駅や空港などのターミナル terminal も、同じスペルである。駅近くなどのターミナルも、もともとは何かの終着のことだったのだろう。 なお、駅が公共バスなどの終点である事例は多い。 そういうバスターミナルのことも、ジーニアス英和いわく a bus terminal であり、またはセンチュリー英和いわく単に terminal という。 センチュリー英和は、バスのターミナルを単に「終点」と訳している。 さて、term には、「用語」の意味の他にも、「期限」「期間」の意味がある。 形容詞 long-term で「長期の」という意味である(旺文社1900)。 単語集にはないが、termination 「満期」「満期の」という単語がある。term にはそういう、限度のある期間的な何かのニュアンスもある。関連づけて覚えよう。 小中高の学校の「学期」もtermであるが、普通は3学期制の「学期」のことをいう(ジーニアスsemester で確認。ほか旺文社 semester )。大学の「前期」「後期」といった2学期制の場合は semester という(旺文社、ジーニアス semester )。 なお、日本の大学は、年間で「前期」「後期」という2学期制である。少なくとも日本の大学はそうである。 英米では、「秋学期」the fall semester と、「春学期」 the spring semester という言い方をする。 普通、英米では、9月から翌年1月までが「前期」the first semester であり(センチュリーで確認)、「秋学期」the fall semester という言い方をする(センチュリー、旺文社)。 普通、英米では、2月から8月までが「後期」the second semester であり(センチュリーで確認)、「春学期」the spring semester という言い方をする(センチュリー、旺文社)。 果たして大学でもし3学期制の学校があったら何というのかは知らない。まあ、単語なんて所詮は、社会の現状に合わせて言葉が作られるので、社会に存在しない制度の呼び名を考えてもラチがあかない。 imagination は「想像する行為」または「想像力」のこと。 image は、想像によって脳内に思い浮かんだ「像」や「印象」のこと。 動詞形は imagine である。実はimageも動詞とみる場合もあるが、しかしジーニアス英和ではimageの動詞用法は不採用である(ジーニアスでimageを見ても、動詞の用法は無い)。センチュリー英和だと、imageの動詞の用法が書いてある。 形容詞 imaginary は、「想像上の」「架空の」「実在しない」である(ジーニアス英和。センチュリー英和)。 ジーニアスでもセンチュリーでも、「創造」ではなく「想像上の」である。 スペルの似た imagery という単語があり、旺文社には『(集合的に)「比喩的表現」』と書いてある。辞書を見てもジーニアスでしか見つからず、例文もなく、よく分からないので説明を省略。 単語集にはないが、理科のレンズの実像(a real image)や虚像(a virtual image)などの「像」も image である(ジーニアス英和)。 旺文社1900にあるが、テレビの「画像」も image である。上述のレンズとテレビを合わせて考えれば、つまり、光学の像も image であるし、実際に英和辞典ではそう紹介している。 なお、イメージダウンなどは和製英語。イメージが悪化した場合は a bad image のように言う(ジーニアスで確認)。 なお、仏像とか銅像とか、ああいったのは「塑像」(そぞう)とか「彫像」(ちょうぞう)とかいうが、「塑像」・「彫像」の英語は statue (スタチュー)である。単語集を見ると巻末の索引に statue が書いてないので一見すると高校の範囲外だが、しかし自由 liberty で東京書籍4500を見れば「自由の女神像」 the statue of liberty が書いてある。桐原の検定教科書『EMPOWER II』にも、P28に「自由の女神像」 the statue of liberty が書いてある。 このように、「自由の女神像」 the statue of liberty は事実上の高校必須の単語である。 liberty「自由」は普通、国家権力からの自由の事を言う。 だから liberal は形容詞「自由主義の」または名詞「自由主義者」の意味がある。(桐原4500が名詞「自由主義者」も紹介している。東京書籍は形容詞だけ。) liberalism 「自由主義」である。 statue は、桐原の検定教科書『EMPOWER II』にも、P31に「ブロンズ像」 a bronze statue が書いてある。 光学ついでに言うと、「反射する」は reflect である。典型的な例文が、「日光を反射する」reflect sunlight である(東京書籍4500、センチュリー)。 ジーニアスには「鏡は光を反射する」 A mirror reflects a light. という例文もある。 だが、桐原4500や旺文社1900では、reflectの、意見などを「反映する」の意味のほうが紹介されている。 とりあえず、ジーニアスによれば「世論を反映する」 reflect public opinion である。 センチュリーや桐原や旺文社を見ても、「反映する」は他動詞的に使うのか自動詞的に使うのか、能動形や受動形か、あまり使い方がはっきりしない。 reflect on ~で「熟考する」「回想する」の意味(旺文社1900では熟考、東京書籍では回想を紹介)。東京書籍のには例文あり。著作権のため本ページでは紹介しない。 名詞形には reflection と reflex がある。意味が微妙に違うので、必要な場合には英和辞典で確認せよ。 なお、単なる「視野」や「視界」のことは view である。だが、辞書でviewの項目を見ると、「見解」の意味が先に書いてある。少なくともジーニアス英和とセンチュリー英和はそうである。辞書よりも単語集で勉強しよう。 ---- 可能性 possibility, probability, likelihood 成功の見込み、成功の可能性 prospect 潜在能力 potential probability (プロバビリティー)は「見込み」「確率」の意味(旺文社1900)。数学の「確率」で probability が使われるので、もし確率ではない単なる「可能性」のことをいいたい場合は、別の言い回しが必要な場合もあるだろう。 関連語として、副詞 probably「たぶん」がある(旺文社、桐原)。 形容詞 probable (プロバブル)については It is probable that ~  「たぶん~だ」 の意味(桐原4500、旺文社に似た和訳)。 対義語 impossible (インポッシブル)「不可能である」も覚えておきたい。 ほか、prospect は、何か良いことの起きる「見込み」、成功の可能性のこと。 「可能性」を意味する likelihood (ライクリフッド)という単語もある(旺文社1900巻末)。副詞 likely 「ありそうな」の名詞形である。 possible (ポッシブル)について、 It is possible that 人 to do で「人が do するのは可能だ」の意味(桐原4500、東京書籍3000)。 capability (ケイパビリテイー)は「能力」である(桐原4500)。可能性は関係ない。 ability (アビリティー)は「能力」「才能」である(桐原4500)。可能性は関係ない。 「たぶん」を意味する副詞の maybe(メイビー) と perhaps(パハップス) と probably(プロバブリー) については、省略。書きたくない。 東京書籍3000が、ひとまとめで maybe や perhaps と probably を説明している。 東京書籍3000は紹介していないが、 likely (ライクリー)形容詞「ありそうな」、副詞「たぶん」という単語もある。 名詞および形容詞のpotential (ポテンシャル)は翻訳の都合で(名詞の場合なら)「可能性」と訳す場合もあるが、なるべく「潜在能力」 potential という訳で覚えましょう。 形容詞としての場合、「潜在的な」で potential を覚えましょう(桐原3000巻末)。 物理学の位置エネルギーのことを英語で potential と言いますので、科学的な専門用語でもあります。 桐原3000巻末のセンター試験特集によると、「潜在能力」などの意味ですが potential はセンター試験での出題をされた単語らしいです。 センター出題の背景事情として、ポテンシャルは物理学などで使う用語だという背景があります。 日本語でも、物理学の専門書などを見ると、普通に「ポテンシャルエネルギー」とか単に「ポテンシャル」などと言ったりもします。 ---- 計画 scheme, plan, project ~するつもり intend , plan 桐原4500 が scheme を「たくらみ」の意味だけ例文で紹介している。勘弁してほしい。 まず、旺文社1900 が例文で、政府の「新しい住宅供給計画」を The new housing scheme といってるように、比較的にきっちりとした計画のことである。 桐原・旺文社の単語集にもあるように schemeに「体系」とかの意味もあって、だからニュアンス的には、体系だった計画のような感じがある。 念のためジーニアス英和を見ると、scheme の意味として「政府の公共計画」、「会社の事業計画」などが挙げられている。 そして、そういう派生として、「陰謀」(旺文社)、「たくらみ」(桐原)を覚えるべきだろう。語源はともかく。暗記の負担を減らす理解としては、たとえば :陰謀は大規模・身の程知らず → 大規模な計画は scheme という → じゃあ陰謀も scheme でいいか 的な連想とかで覚えるのがラクかと。 高校生に語源の知識はいらないし、もし語源が「たくらみ」だというなら、そういう情報を先に教えるべきだし、念のためジーニアスで語源を見てもsdhemeの語源は『「形」が原義』とのことだし、あるいはもし有名大学が入試でscheme の「計画」の意味も出題せずにschemeの「たくらみ」を出題しているならその大学が批判されるべきだろう。 なので、ジーニアスもいってるように、scheme は plan よりも固い語である。 ジーニアス英和やセンチュリー英和にあるように 大綱とか図式とか、学問などの体系とか、教育体系とかも scheme という。 たとえばセンチュリー英和が教育体系なら an educational scheme だと言っている。 plan は「計画」をあらわす一般的な語(ジーニアス)。 project は、長期の「計画」を表す(東京書籍3000)。projectを「事業」「プロジェクト」などと訳す場合もある。東京書籍では「プロジェクト」という訳語を紹介している。 辞書では特にplan と project の違いは述べられていない。だが project の用例を見ると、橋やダムなど公共インフラの建設計画などがよく project で表現される。 「ダム建設の事業」 the project ro build the dam である(東京書籍3000。センチュリーに似た例文)。 「橋の建設の事業」なら a project to build bridges である(ジーニアス)。 別に公共インフラでなくてもよく、ビルの建設計画でも良い。 なお、大規模な工事などを「計画する」という意味で動詞 project もある。アクセントが名詞と動詞とで異なる。 名詞は、プ「ラ」ジェクトの「ラ」にアクセントがある。なお、日本語では「プロジェクト」と書かれるが、英語ではどちらかというと「ロ」ではなく「ラ」であり、プロジェクトである(センチュリー、ジーニアス)。 動詞は、プロ「ジェ」クトの「ジェ」にアクセントがある。 学生などの研究課題も project という、 計画する plan , intend 動詞 intend to ~ 「~するつもり」は、計画だが、やや欲求・意思に重点を置いている。 動詞 plan は、計画性に重点を置いている。 plan to ~ は「~することを計画している」と訳すのが普通。(「~するつもり」ではなく) plan a trip to Hawaii 「ハワイ旅行を計画する」(東書3000) plan to go to Ireland 「アイルランドに行くことを計画する」(桐原4500) 進学などの予定は、intend も plan も使う。 Bob intends to learn karate in Japan.「ボブは日本で空手を習うつもりだ」(東書3000) Most of these students intend to continue their education at university. 「ここの大半の生徒は大学へ進学するつもりだ」(桐原4500) べつに進学や就職でなくても、 She intends to go to bed early tonight.「彼女は今晩早くねるつもり」(桐原1900) Where do you intend to go to tomorrow? 「明日どこへ行くつもりだい」(ジーニアス) のように intend は今日とか明日の予定でもいい。 名詞形は intention 「意図」である。単語集には例文は無し。高校レベルを超える。(いちおう、東書4500に「意図する」のintend の例文あり。) ただ、どうしても「意図的」とか言いたい場合は、intentional とかintentinally みたいにその系統の語を使うのが安全そうである。 桐原5500 に deliberate 「意図的な」という語があるが(昔の上智大に出た単語らしい)、intention などとの使い分けが英和辞典を見ても言及されておらず、またネットで調べても情報が一致しない。あるサイトでは、欲求にしたがった意図だという主張もあれば、別のサイトでは熟考した上でも意図だという主張もあり、不一致である。 なお「配達」などの delivery とは語尾のvが違う。bとvの違い。 いちおう deliberate に「熟考した上での」という意味もあるが、しかし、あまり行儀のよろしくない行動にも deliberate の「意図的な」を使う例文もあるので(たとえば故意犯みたいな)。・ a deliberate insult 意図的な侮辱(ジーニアス) the fire was stated deliberately その放火は意図的だった(グランドセンチュリー) みたいな。 もちろん悪事だけでなく、良いことにもdeliberate を使ってよい。 a deliberate refusal よく考えた上での辞退(ジーニアス) ---- 陰謀(主に「共謀」) conspiracy たくらむ scheme 高校英語としては、陰謀で覚えるのは conspiracy と、あとはschemeで十分だろう。 ジーニアス和英辞典によると。「たくらむ」には、plot, conspire , scheme , contrive ,hatch がある。 これらの単語には、陰謀以外の意味で使われるものあり、 比較的に簡単な単語なら、 plot は、よく数学的なグラフに「点を打つ」とかの意味で使われる。 なんと高校の単語集には plot がない(桐原3000・4500・5500と東京書籍3000・4500を調べた)。点 point とか教えてるのに「点を打つ」plot がないとは、英語教育の界隈はどういう了見か。反省を願う。中学数学レベルの簡単な英単語も教えられないくせに conspiracy とか教えているのか。 一応、「x軸」 x-axis とか「y軸」y-axis とかは、検定教科書で見かける<ref>高等学校学外国語科用『CROWN English Expression II New Edition』、三省堂、2022年3月30日 発行、P145</ref>。 ジーニアス英和で plot を見ると、「(裏切りの)陰謀」「たくらみ」が最初の意味だが、なんだかなあ。いまどき plot なんて数学の座標で使うのが人生で最初だと思うが。 センチュリー英和の言うように、地図や図面などに位置を書き込むことがプロット。 なお、小説などの筋書きも plot といい、センチュリーはこの筋書きの意味をplotの名詞の項目で最初に紹介している(動詞のほうは、「たくらむ」だけ紹介)。 しかしセンチュリーのほうだと、動詞には、図面や地図に位置を書き込むことの動詞がない。 本当もう勘弁してほしい。英和辞典ともあろうものが中学校レベルの英語くらい書けないのか。 scheme は上述のような体系的な「計画」だし、 hatch は(鳥などが)「ひなからかえる」「卵からかえる」「卵をかえす」とかの意味。船などの昇降口のハッチ hatch とスペルが同じ。 contrive には、(ジーニアス英和によると)「考案する」・「うまくやりとげる」の意味もある。 conspire が、「共謀する」の意味。桐原5500でも、conspiracy の例文の主語が複数形になっているので、和訳には「陰謀」とあるが内容は「共謀」である。 ちなみに「陰謀」の名詞は、桐原5500が紹介しているのは、intrigue (イントリーグ)とconspiracy (コンスピラシー)である。 これだと意味が強すぎるので(政府転覆とか)、ちょっと何かをたくらんでいるぐらいの場合に、scheme とか plot とかを使うとよいのだろう。 ジーニアス英和で intrigue を調べてみたが、例文がなく、よくわからなかった。なお、名詞も動詞も intrigue である。 ---- 多様性 variety ,diversity 東京書籍4500は variety と diversity の違いの細かい説明をあきらめている。 diversity のほうが高尚な言い回し。 東京書籍の言うには、形容詞 variousが「いろいろ」「さまざま」。名詞 diversity が「多様性」である。 熟語 a variety of ~で「様々な」の意味(桐原4500)。 桐原4500および旺文社1900に至っては、そもそもdiversityの項目・ページではvarietyを紹介していない。 桐原4500 が「民族の多様性」 ethnic diversity という表現を使っている。 センチュリー英和がdiversityの項目で biological diversity 「生物学的多様性」という表現を使っている。 「生物多様性」のことを biodiversity または biological diversity という(旺文社1400)。 biodiversity は辞書(ジーニアス、センチュリー)に書いてある。 辞書のbio- の項目では、biological diversity は辞書では見つからなかった。 なお、ややこしいことに、diversity およびvariationには「差異」「相違」という意味もある。 和製英語のバライエティーおよにバリエーションは、やや意味が間違っている。 variation は、「差異」・「相違」・「変化」の意味(東京書籍4500および旺文社1900)。高校数学ではわかりづらいが、大学の数学で「変分法」という微分積分の発展的な分野のようなものがあって、これに variation という英語が相当している。( [https://kotobank.jp/word/%E5%A4%89%E5%88%86%E6%B3%95-131413 コトバンク『変分法』] )この変分計算では、関数中にある変数の代入値を少しだけ変化させたら関数がどう変化するかを考察しているので、英単語 variation の訳語のニュアンスに近い。 なお「微分」はdifferential、導関数はderivative なので、混同しないように(※ 大学受験に出ないので覚えなくて言い)。 桐原4500の例文にもあるが a diversity of ~ で「多種多様な~」の意味。 a diversity of wildlife で「多種多様な野生生物」と桐原4500が紹介。 なお余談だが、近年では国籍や性別(男・女のほかにも、さらにはLGBTなど)などの多様性のこともよく「ダイバーシティ」 diversity といい、よく人権などの関係した議論でこの用語護が出てくる。今後の公民科目などの範囲になるだろうから、本・英単語集のページでは深入りしない事にする。 ---- 十分・充分 sufficient ,adequate, enough sufficient ⇔ deficient 適切である suit, be adequate for, enough は形容詞にも副詞にも使われる。 sufficient と adequate は形容詞。 ジーニアス英和に、adequate の類語が sufficient , enough だと書いてあるが、ニュアンスの違いは見当たらなかった。 形容詞 sufficient 「十分な」は enough よりも固い語である。 だが、その用法だけではない。 強制ではないが、sufficient は、質・量ともに十分な場合に好まれて使われるニュアンスがある(センチュリー)。 一方、単に量が多い場合や、特に質が問われない場合などに enough を使うという、使い分けがある。 be sufficient to ~(動詞) 「~するのに十分である」 である(桐原、東京書籍)。 sufficient の名詞形は sufficiency 「十分足りること」である(桐原)。 対義語は insufficient 「不十分な」、または deficient 「不足した」(デフシュント)である(東京書籍)。 センチュリーいわく、sufficient では質も問われるニュアンスがあることも合わせれば、対義語との関係は、 (質・量とも)「十分な」sufficient ⇔ deficient(質・量が)「不足した」 である。 センチュリーの訳語を比較した範囲では、insufficient よりも deficient のほうが絶対量の不足という意味合いが強そうであった。そのためか、deficinet は「欠乏」と訳されることもある(センチュリー)。つまり deficient 「欠乏した」「不足した」などの意味である。 名詞形 deficiency 「不足」「欠乏」「欠陥」という単語もある(旺文社 deficit 項目、センチュリー)。 ほか、貿易赤字などの「赤字」は 名詞 deficit (デフィシット)である。 つまり、「赤字」 deficit である。 「貿易赤字」は a trade deficit である(旺文社、センチュリー)。 数学用語だが、「十分条件」は sufficient condition である(旺文社1400)。なお、「必要条件」は necessary condition である(旺文社1400)。 sufficient O(目的語) to V(動詞の原形) で、「Vするのに十分な量のO」 ~ be sufficient to V で、「~はVするのに十分だ」 be adequate for ~ は、「~に十分な」とのことだが(東京書籍)、しかしジーニアスを見ても例文がなく、よく分からなかった。 be adequate for ~には「~するのに適している」の意味もある(桐原)。 「適切である」を言いたいなら、動詞 suit (スート)ひとつで足りるだろう。 たとえば 「このソフトウェアはプログラミングに適切です。」 This software suits programming. のように(wikiオリジナルの例文)。 suit 自体は桐原4500・東京書籍4500・旺文社1900の3冊とも紹介しているのだが、 しかし「適切である」の例文は、東京書籍しか紹介していない。 しかも、待ち合わせの時間が「好都合である」の訳。 違う英文だが、 (待ち合わせの時間を聞かれた返事で)「金曜日が好都合です」 Friday suits me. のような使い方(オリジナル。ジー二アスに似た例文。センチュリーに似た例文)。 桐原が紹介している例文は背広のスーツだし、旺文社のは「訴訟する」の suit である。 ---- 不足 lack , shortage かつて受験英語などで「欠乏」lack ,「不足」shortageのような使い分けがあったが(実際、ネット検索するとそういう説明も出てくる)、しかしこの分け方は正しくない。なぜなら、英和辞典で lack の項目を見れば、単に不足している場合でも lack を使っているからだ。 lack と shortage の違いは、たとえば「同情に欠ける」とか「常識に欠ける」がlackである。 センチュリー英和を読むと形容詞 lacking の説明で、be lacking in common sense という例文で、「その学生は常識が足りない」という例文もある。 どうも、lack は、慣用句として、配慮が欠けている場合に使うのが英米では自然なのかもしれない。また、その言い回しが、配慮を欠けている事実自体を主張するおかにも、どうも不足の現状に対して非難や批判などのニュアンスも込めてlackが使われていそうである。 おそらく、辞書にあるlackの訳語の「欠乏」が間違っている。ジーニアスにもセンチュリーにも「欠乏」が書いてあるが、正しくは「欠如」(けつじょ)である。(ジーニアスに「欠如」が書いてある。)あるいは、辞書にはないが「欠落」あたりだろうか。欠乏の「乏」とは貧乏の「ぼう」である。 ジーニアスには、lackについて「十分にはないことをいう。まったくない場合はabsence」といっている。ジーニアスはせっかくここまで説明しておいて、なぜ「欠乏」という訳語を使い続けるのか。 欠席のことを be absent from (classなど)というが、上述のabsenceはその形容詞absentの名詞形。つまり、英語では「欠乏」と「欠席」とが同じ単語だという事。 absenceは、ゼロの状態だから、「ゼロでないけれど、大幅に足りない」みたいな表現には向かない。そういう深刻な不足を言いたい場合は、たとえば a serious shortage となるだろう。実際、センチュリ-のsortageの項目に例として a serious shortage (深刻な不足)や an acute shortage (深刻な不足)や a severe shortage (深刻な不足)などが 書いてある。<!-- 原著で訳語「深刻な不足」をそれぞれの単語に書いてあるので、けっしてwikiでひとまとめにしないこと。またニュアンスも微妙に違う。--> さて、食料やら金銭やらが物理的に足りない場合は、どちらでもいいが、辞書を見る限り shortage のほうがそういう物資の不足での例文が多い。 たとえば東京書籍4500にあるが water shortage である。 食料不足は、東京書籍4500では The shortage of foodだが、センチュリー英和では food shortage である。 労働者不足が the shortage of labors である(旺文社1400(簡単なほう))。 医師不足が a shortage of doctors である(桐原4500)。 冠詞 a と the の違いは文脈に応じただけのものなので、読者は気にしなくていい。 なお、lack は動詞の場合もある。 単語集を見ても、lackとshrtageの違いとか、書いてない。まったく。 ---- 直観と直感 intuitive(直観), 洞察 insight 英語というより日本語の問題なのだが、「直観」と「直感」では意味が違うので注意が必要である。 「直観」には、洞察力のようなニュアンスがある。 だから 直観の intuitive は、「直観的な」「直観力のある」などと訳す(東京書籍4500)。 名詞形 intuition だが、桐原5500の例文の和訳で(なお東大の過去問例文)「動物、中でも人間は起こりそうなことに関して鋭い直観力を発達させたと考えることができるだろう。」 We <nowiki>coudn't</nowiki> expect animals, especially humans, to have developed sharp intuitions about probably. とある。 英和辞典でintuitive などを見ても、ほとんど例文がないので(センチュリーには例文がなかった)、桐原のこの例文を学ぶのが良いだろう。 あるいは英和中辞典などを見れば例文があるのかもしれないが、さすがに高校英語でそこまでする必要はないだろう。 あと、東大は辞書を見ても満足に例文のない単語を大学入試に出しているわけだが、はてさて、見識が問われますなあ。まさか高校生に中辞典を買わせるつもりでもあるまいし。 もっとも、「洞察」「洞察力」については insight という別の専用の単語があり、普通に4500語レベルの単語集にある。 いっぽう、「直感」は、単なる勘に近い。和英辞典によれば、hunch とか scent が直感である。(高校の単語集にはない) センチュリー英和によれば hunch は「虫の知らせ」で、口語のニュアンスがある。 scent には、名詞 scent には「勘」の意味もあるが、「臭い」とか「嗅覚」とか「香水」の意味なので、動詞scent には「かぎつける」の意味もある。 hunch も scent もこういうふうに口語っぽい内容なので、まあ単語集には出ないだろう。 そのほか、名詞 instinct (本能)にも「勘」の意味があるが、どちらかというとinstinctは「本能」で覚えたほうがいいだろう。 ---- 結果 consequence , result 辞書にはconsequenceでは「結果の重要性を意識している。resultより固い語」とか書かれるが、 だが、東京書籍4500にはconsequenceは「通例望ましくない内容について用いられる」と説明がある。 実際、センチュリー英和で例文を見れば 「戦争の結果」In the consequence of the warだとか ジーニアス英和だが「結果として戦争になった」have grave consequence (「重大な結果をもたらず」※戦争の婉曲表現)とか、 あと形容詞だが「天候不順の結果の食糧危機」food shortage consequent on bad water とか、 そんな例文ばかりである。 どうやら consequenceは、結果の深刻性を感じてほしい的なニュアンスのようだ。 なお桐原4500および旺文社1900みても、そういうニュアンス説明は無い。 ---- 取得・獲得 acquire acquire は、(技術・知識などを)(努力して)「得る」の意味。(東京書籍4500など) 典型的な例文で、 acquire a new skill 「新しいスキルを身につける」 がある(東京書籍4500。旺文社1400にも近い例文)。 「外国語を習得する」acquire foreign languages という例文もよくある。(桐原4500。センチュリー英和aquireの項目) 辞書にはよくaquireの用法で「(知識などを)身につける」とあるが、しかし語学のようなレベルの「知識」である。 acquire には「習得」以外の用法もあって、 努力して大金や土地などを「獲得する」ことも acquire というが、単語集には例文がないので、説明を省略。桐原の単語集に「(努力して)獲得する」とだけ説明してあって、技術の習得の話をしてないのは、土地などの獲得を意識したものだろう。 ---- 「異国風」 exotic 形容詞 exotic (イグザティック)は、通例では、欧米人の目からみて「異国風」という意味であり(旺文社)、けっして単に異国風なだけでなく、加えて、めずらしくて面白かったり興味をひかれる性質のことである(ジーニアス、センチュリー)。 具体的にいうと、日本国内で言うなら、京都などの寺社は exotic だろう(特に出典は無い)。日本に存在していても、東京の高層ビル群などは exotic には写らないだろう。 日本語でもローマ字読みで「エキゾチック」と言う。日本でも、よく文学評論とか芸術評論とかで使われる単語なので、覚えておきたい。もっとも日本で「エキゾチック」と言う場合、東南アジアや中東やアフリカなどの観光的な光景なので、英語とは微妙にニュアンスが違うが。 さて英語では、動物や植物が「外来種」や「外国産」などの場合も exotic という。農産物だけでなく、言葉が外国由来の場合も exotic という。 旺文社の単語集で、動物園の例で exotic と言っているのは、そういうニュアンスもあるだろう。 桐原と東京書籍の単語集では、exotic が見当たらない。 辞書によると、「外国の」・「外国人」という意味もあるとのこと。言葉が外国由来の場合も exotic というので、それと関連づけて「外国人」なども覚えよう。 ---- 広さ broad, vast broad は、幅が「広い」。 典型的な例文が 「(道幅の)広い通り」 a broad street である(東京書籍4500および桐原4500)。 幅広い知識 a broad knowledge とか(ジーニアス)、「幅広い趣味」 a broad range of hobby とか(東京書籍4500)のように、物体以外の知的興味の広範さにもbroadを使う。 インターネットのブロードバンド broadband のブロードと同じ単語(東京書籍4500)。 vastは、面積が「広大な」である(東京書籍4500)。だが実際はセンチュリー英和では、ビル(建築物)や宇宙などもvastだとする例文を提示している。 broad の対義語は narrow 「狭い」。 体積が大きいのは huge 「巨大な」。(桐原4500。ジーニアス英和) なお、「体積」は英語で volume である(旺文社1400、桐原4500)。volumeの意味は、「体積。容積。音のボリューム。本などの一巻。」の意味である。 turn the volume up で「音のボリュームを上げる」である(旺文社、東京)。 「音量を下げる」なら turn the volume down である(東京)。 コンテナの「容積」とかも、volume である(旺文社)。 the volume of the container 「コンテナの容積」である。 科学や工業などの「容積」「体積」でなくとも、たとえば「交通量」the volume of the traffic とか(東京書籍)、「ごみの量」the volume of garbage とかにも volume は使われる。 ---- 娯楽 amuse , entertain センチュリー英和によれば amuse は笑わせる事などのような意味での「楽しませる」。 entertain は、知的な面白さに重点がある。 entertain でよくある例文が、話や音楽で聴衆を楽しませる系の例文(東京書籍4500およびセンチュリー英和)。 たとえば entertain the audience で「聴衆を楽しませる」(東京書籍)。 また、熟語 entertain A with B で「AをBで楽しませる」。 センチュリー英和によれば Now let me entertain you with music. で「それでは音楽でお楽しみください」。 entertain には、自宅で客を「もてなす」の意味もある。 よくある例文が、ホームパーティなどで友人をもてなす系。 entertain their friends at their home 「友人をパーティでもてなす」(東京書籍) entertain our friends at a party 「自宅で友人をもてなす」(旺文社1400) ただし、実際の例文を見ると、あまり違いは明確ではない。 名詞形のamusement もentertainment も、それぞれ「娯楽」の意味で使われる。 ---- 殺害 murder , kill murder (マーダー)は「殺害する」の意味の動詞、および名詞としての用法では「殺人」一般の意味である。「殺人犯」はスペルが murderer (マーダラー)であり、スペルが微妙に違う。混同しないように。 「殺人未遂」は an attempt murder である(東京4500)。 「殺人事件」は a case of murder である。 なお、attempt は、困難なことを「試みる」という意味の動詞および名詞(東京書籍)。ジーニアスは、入念な計画と実施の必要な試みが attempt だと説明している。 名詞としての attempt は「試み」などと訳す。 典型的な例文で、 attempt to escape 「逃げようと試みる」 がある(東京書籍3000、桐原4500)。 脱走計画だとかそんなのだけでなく、ジーニアスいわく、エベレスト登頂の「試み」でも attempt とのこと。 90年代、かつて英語単語集に「massacre」(マサカ)という「大虐殺する」の意味の単語がよく載っていが、現代の単語州には無い。「まさか、人を殺すとは!?」という語呂合わせでよく紹介されてたものである。昔の単語集には、ちょくちょくコラム的にゴロ合わせなどが紹介されていた。 英和辞典(ジーニアス、センチュリー)で確認したところ、massacre に「大虐殺」の意味はあるが、一個人の「殺害する」のような意味は紹介されていない。語呂が不正確である。 しかし、近年に「虐殺」でよく目にするのは genocide である。ルワンダ虐殺とか、歴史的に名前が残っている事件の虐殺は genocide が普通であろう。検定教科書でもルワンダの虐殺について genocide という表記を行っている<ref>高等学校学外国語科用『CROWN English Expression III New Edition』、三省堂、2018(平成30)年2月28日 文部科学省検定済、2022(令和4)年3月30日 発行、P75 </ref>。 kill や killerとの違いは、killは人間以外のものにも使う。人だけでなく、動物や植物、虫、植物なども、それらを殺したり、あるいはそれらに殺されたりする場合に、killである。 たとえば「魚を殺す」 kill fish である(東京書籍1800)。 それどころか、交通事故などで「死ぬ」場合も kill である。 be killed in ~(戦争や事故など)で「~で死ぬ」の意味。典型的な例文が「大勢の人がその戦争で死んだ。」 Many people are killed in the war. である。(桐原3000と旺文社1200に似た例文あり) killer については単語集にはないが、名詞として「殺人犯」や「殺すもの」の意味のほかにも、形容詞として「致命的な」の意味もあり、たとえば「致死的な病気」 a killer disease などの例文が典型的。 ---- 奪う・盗むなど 奪う deprive wikiオリジナルの例文だが、 The war deprived the children of the liberty. 「戦争が子供たちから自由を奪った。」 のように言う。 桐原4500に「戦争が、この子供たちからふつうの家庭生活を奪った。」 The war deprived these children of a normal home life. とある。 旺文社1900では「軍隊が国民から自由を奪った。」 The military deprived the citizen of their liberty. である。、 自由は別にliberty でなく freedom でもよく、たとえば東京書籍4500では、 「多くの子供たちが自由を奪われている」 A lot of children are deprived their freedom. とある。 熟語 be deprived of~ で「~を奪われている」である(東京書籍4500)。 また、deprive A(人) of B で「A(人)からBを奪う」である(旺文社1900。桐原4500)。 盗む rob , steal 動詞 rob は、ふつう、強盗とか 引ったくり とかスリに使う。スリかと思われる例文については、たとえば旺文社1900にある(電車で女性から財布を奪う例文)。 rob A(人) of B で「A(人)からBを奪う」である(桐原4500。東京書籍4500)。 東京書籍に典型的な例文「彼らは銀行強盗をした。」 They robbed the bank. である。 派生語として、「強盗」 robber がある。「強盗事件」は robbery である(桐原4500。東京書籍4500)。 スペルの似ている rid という名詞・動詞があるが、「取り除く」の意味である。 熟語で get rid of ~ で「~を取り除く」である。 rob と rid は意味がまったく違うので、混同しないように注意。 なお、こっそりと者を盗む「泥棒」はthief (シーフ)である(桐原4500)。桐原3000を読めば、こっそり盗む者がthief であるし、ジーニアス英和の thief の項目にもそう書いてある。 なお、複数形は thieves である。ナイフの複数形の活用と同様。さすがにthiefの複数形を筆記で入試に出すのは瑣末すぎるので出題されないだろうが、まあ参考に。 こっそり「盗む」は steal である。桐原3000を読めば、stealの意味は「こっそりと」盗む、と書いてある。 なお、スペルの似ているsteel は「鋼」(はがね)。 さて、「盗む」stealの活用は、 steal - stole (過去形)- stolen (過去分詞) である。 東京書籍4500の例文「泥棒が私のコンピュータを盗んだ。」 A thief stole my computer. が典型的な例文であろう。 主語が被害者の場合、have ~ stolen になり、「~を盗まれる」の意味である。 典型的な例文 「私は自転車を盗まれた。」 I had my bicycle stolen. がある。東京書籍4500と旺文社1400に、ほぼ同じ例文がある。 腕時計が盗まれるのも典型的で、センチュリー英和の桐原3000がそうであり、 「私は腕時計を盗まれた。」 I had my watch stolen. である。 なお、ジーニアスにあるが、バーグラー burglar は「押し込みの夜盗」。センチュリ-によると、burglar は「(押し入り)強盗」。さすがにここまでは入試に出ないだろう。念のため桐原4500・5500と東京書籍4500を読んだが、もちろんバーグラー burglar は無い。 ---- 気づく notice, realize, recognize, perceive 「きびしい」 harsh, strict, severe, rigid realize は、和訳では「気づく」などと訳される場合もあるが、どちらかというと realize の意味は「認識を改める」である。 典型的な例文で、「彼は自身の過ちに気づいた。」 He realized his mistake. みたいなのがある。 いっぽう、notice は単に、物事が目について「気づいた」という意味である。 なお、realize は英国では realise である。<!-- PC設定によっては realise でオートコレクト発動するが、これはイギリス英語をアメリカ英語では読み取れないため。 --> なお、realize には(計画や夢などを)「実現する」という、まったく別の意味の用法もある。 たとえば「私の夢を実現する」なら realize my dream である(東京書籍4500)。あるいは realize my ambition である(旺文社1900)。 リアリティ reality という単語があるが、日本では小説や英語など創作物などの迫真性などのことをいうが、英語でもそのような創作物の評価における reality の用法はあるが(センチュリー英和で確認)、しかしもっと一般に「警官は彼が述べたことが真実かどうか疑った。」のような文章における「真実性」にも reality が使われる(センチュリー永和で確認)。 reality はけっして創作物に限った表現ではない。 旺文社1900では reality の意味を「現実(性)」としている。 実際、ジーニアス英和を確認すれば、そういう用法もあり、「人生のきびしい現実」みたいな例文でrality をジーニアスは使っている。 旺文社1900にも、harsh の項目で、a harsh reality 「厳しい現実」を紹介している。 なお、real と true の違いで、 true は主に話が「本当の」という意味で使う(東京書籍3000)。 いっぽう、real には、材質などが「本物の」という意味がある。 だから、real money 「本物のお金」とか、real diamond (本物のダイアモンド)などで使われる。 harsh「きびしい」(発音は「ハーシュ」)も、単語集に普通に書いてある。 気候が「きびしい」とか、批判や対応が「きびしい」などのことを harsh という。 東京書籍4500に a harsh winter 「寒さのきびしい冬」という例文がある。 旺文社1900に、harsh environment 「きびしい環境」と言う例文がある。 (桐原4500語レベルではなく、)桐原3000いわく、天候の場合は severe(シビア) でも「きびしい」を表現できる。東京書籍4500で確認したところ、批判の過酷な場合の「きびしい」でも severe を使うこともある。 harsh と severe のニュアンスの違いについては、特に書かれていない。 なお、規則などが厳格で「きびしい」と言いたい場合は strict である。 strict には、説明などが「厳密な」の意味もある。高校の分詞構文の単元で、 「厳密に言えば」 strictly speaking, などを習うだろう。 ほか、形容詞 rigid (リジッド)でも「厳格な」を言える。単語集(旺文社1900、東京書籍4500、桐原5500)には、この厳格の用例が書いてある。 だが、それよりも物理学の「剛体」が rigid body として覚えたほうがいい。ジーニアスに、rigid は「剛体の」だと書いてある。 単に、「変形しづらい」みたいな意味での「固い」「堅い」のような意味が rigid である。 ジーニアスには、「変形しやすい」flexible の対義語であると紹介している。 規則の融通がきかないのが rigid だと、ジーニアスに書いてある。そういう意味である。 ほか、rigid には「顔がこわばった」「手足がこわばった」などの意味もある。 なお、rigid は発音注意の単語(旺文社)。 ほか、名詞形 rigidity 「厳格」「硬直」などの意味がある(旺文社、桐原5500、ジーニアス、センチュリー)。桐原だと「硬直」の意味が書いてないが、ジーニアスとセンチュリーの rigidity にしっかりと「硬直」が書いてある。 頑固オヤジみたいに「頑固な」「頑固である」と言いたい場合は stubborn (スタボーン)である(桐原、旺文社)。東京書籍は紹介してない。単語集にはないが、辞書で典型的な、「断固とした拒否(拒絶)」a stubborn refusal がある(ジーニアス、センチュリー)。そのほか、stubborn には軍隊などの(または軍隊などへの)抵抗が「不屈(ふくつ)の」という意味もある(ジーニアス)。 (厳格ではなく)「厳粛な」と言いたい場合は solemn だが(桐原5500)、あまり平易な例文が無い。 法律的な宣誓などが厳粛なことや、音楽などが荘厳なことまで、 solemn で表現できる(ジ-ニアス、センチュリー)。 「誓う」という意味の動詞 pledges(プレッジ)も、単なる約束 promise とは違い、厳粛 solemn に約束することであり、たとえば外交などの約束で使われる(旺文社1900の例文もそう、ジー二アスにもそういう例文あり)。その他、公約などで pledge 「約束する」を使う。または名詞として pledge には「公約」の意味もある。 ※ ほか、批評が低評価で「厳しい」は damning (ダムニング)だが(センチュリー)、範囲外。 さて、virtual の話題。 ジーニアスを見れば、「仮想現実」 a virtual reality などの例文もある。 旺文社1900を見ると virtualの項目で、副詞 virtually 「事実上の」などもあるが、例文はない。東京書籍4500および桐原4500には例文は無い。桐原5500に副詞 virtually の例文あり、早大の過去問。 なお、桐原5500のviatually の項目いわく、「実質的には(≒practically)」「ほとんど(≒almost, as good as)」である。 念のため桐原3000および東京書籍3000を見たが、virtual などの紹介なし。 practical は「練習」 practiceの派生語。practice には「練習」のほか、理念・理論などの「実践」という意味がある。よって形容詞 practical には「実践的な」「実用的な」「現実的な」などの意味があり、よって副詞 practically には「実質的には」「実際的には」などのような意味がある。 余談だが、昨今、日本の芸能界では「リアリティ・ショー」などが問題になっているが、しかし英和辞典で見ると該当する単語は reality TV である(ジーニアス英和、センチュリー英和、の両方で確認)。 recognize は「気づく」などと訳される場合もあるが、どちらかというとrecognizeは「見分けがつく」という意味である。 「足音でジムだと気づいた」とか(ジーニアス英和)、「帽子でジェーンだと気づいた」(センチュリー英和)とか、そういうのがrecgnizeである。 センチュリーから例文を抜粋すると、 I recognized Jane by ~ で、「~でジェーンだと気づいた」 のようになる。 一応、recognize には、新政権の「承認」などの意味もある。 辞書によくあるのは、新政権やイスラエルなどが周辺諸国から承認 recognize を拒まれるという内容の例文。 自分の間違いを認めたり認めないのも recognize である。 ジーニアスの例文では間違いを認め、 「彼は自分の間違いを認めた」He recognized that he was wrong. である。 センチュリーの例文では間違いを認めず、 「彼は自分の間違いをどうしても認めようとしなかった。」 He wouldn't recognize his mistake. である。 桐原4500ではrecognize を「認識する」、旺文社1900ではrecognizeを「識別する」とあるが、上述のようなそういう意味である。 perceive 「気づく」について。 名詞形 perception が「知覚」の意味である。この名詞形を覚えるべきである。 「知覚」とは、たとえば桐原のperceive の例文に「ネコは色を知覚することができない」とあるように、そういう意味である。 旺文社と東京書籍は「気づく」の意味の perceive 例文を紹介しているが、桐原は「知覚する」の perceive 例文を紹介するスタンスである。 perception については「認識」の意味もあり、桐原・旺文社にも書いてあるが、しかし「知覚」を覚えれば連想できるだろう。一方、認識から知覚を連想するのは難しいだろう。東京書籍では、perceptionの「認識」は紹介しておらず、「知覚」だけしか紹介していない。このように、知覚のほうが、この語 perception の本質であろう。 * cognitive 「認知の」 cognitive という形容詞があり、旺文社では「認知の」と紹介され、東京書籍では「認識の」「認知の」と紹介されるが、しかし辞書を見ても説明が少なく、よく分からない。桐原に至っては、cognitiveを紹介していない(桐原5500,桐原4500,桐原3000で確認)。 東京書籍でも、巻末で解説なしで、単語と例文だけの紹介である。しかし、旺文社1900での番号は 279/1900 と、かなり前半のほうである。 旺文社1900いわく「脳の認知機能」 the cognitive function of the brain 東京書籍4500いわく「認知能力」cognitive ability らしい。 どうやら、cognitive は心理学または脳科学などの専門用語っぽいニュアンスのようだが、しかし英和辞典では確認できなかった(ジーニアス英和とセンチュリー英和を見た上で)。 旺文社いわく、「軽度認知障害」が、mild cognitive impairment (MCI)とのこと。 ---- 過酷な terrible, severe, harsh ひどい terrible, awful terrible (テリブル)は翻訳の都合でときには「過酷な」と訳される場合もあるが(ジーニアス)、たとえば暑さがterribleなら「過酷な暑さ」と訳される場合もあるが、 しかし、very bad くらいが terrible のニュアンスである(ジーニアス)。 なので、 terrible は(程度が)「ひどい」と覚えるべきである。 実際、東京書籍4500も桐原3000も、 terrible の意味を「ひどい」としている。 東京書籍3000は「ひどい体験」をterrible な体験としている(著作権のため、本ページでは「体験」は和訳せず)。 こういうふうに使う。 ほか、副詞 terribly は、 たとえば 「とても疲れたよ」 I'm terribly tired. のように(ジーニアスに同じ例文)、強調するのに使う。 実はよい方向を強調するのにも terribly は使う(ジーニアス、センチュリー)。 (著作権のため、本ページでは例文は紹介せず) terrible は語そのものにveryのような強調の意味を含むので、terribleをveryで修飾できない。 同様に、delicious(とてもおいしい)、enormous(とても大きい)、huge(巨大な)、marvelous(すばらしい)、terrible(ひどい)、tremendous(ものすごい)、などの形容詞はveryでは修飾できない。これらの語を修飾するには、reallyやcompletelyなどを使う 名詞形 terror (テラー)は「恐怖」「テロ行為」という意味がある。 なので、terrible には「恐怖の」という意味もあるが、この場合は horrible (ホリブル)で表現するほうが誤解のおそれなく無難だろう。 名詞 territory (テリトリー)「領土」「なわばり」も覚えておきたい(桐原4500、東京書籍4500)。三省堂 CROWN I を見ると、もう高校1年で territory を教えている。動物などの「なわばり」も territory で表せる。 なお、「国境」は単に border で通じる。 American border みたいに、国名の形容詞のあとに border を言えば、それでアメリカ国境の意味になる。 severe と harsh は他の節で紹介したので省略。 「過酷な」と言いたい場合、まずは severe (シビア)の使用を検討するのがよいだろう。 痛みが「ひどい」場合は severe を使うほうが無難だろう。 a severe pain 「ひどい痛み」(ジーニアス和英) である。 形容詞 awful (オーフル)「ひどい」は、悪い意味だけでなく、よい意味でも使われる(センチュリーで確認)。桐原3000語レベル、東京書籍4500語レベル。 よって、awful は terrible とほぼ同じ意味。 もともと名詞 awe が「畏敬」(いけい)の意味である。 だが、awful は、なんだか口語的に「ひどい」「すごい」「おそろしい」みたいな意味になってしまっている。 ---- 全体の whole,total ---- 思う think, suppose think は「思う」と中学で習うが、辞書で調べてみると、意外とthinkは確信の度合いが高い。 センチュリー英和なども解説しているが、「推測する」といいたい場合は、think ではなく suppose を使うのが適切である。 つまり、「推測する」は suppose である。 推測よりも、やや確信の度合いが高い程度の場合に think を使うのが適切である。 名詞 supposition で「仮定」の意味。 まったく意味の違う用法だが、熟語 be supposed to ''do'' で、「~(do)することになっている」の意味。 よくある例文は、「彼は7時にここに来ることになっていた。」の類。 He was supposed to come here at 7 o'clock. である。だが、この過去形での「was supposed 」の文は、実際には彼は7時に来なかったことを含意している(ジーニアス英和より)。東京書籍4500に似たような例文があるが、しかし東京書籍4500では含意の件には触れていない。 センチュリー英和によると、be supposed to do は、「(慣習や法律などによって)...するものと考えられている。」とあるので、表面的な言い回しこそ控えめだが、実際の意図はやや強制的・義務的な主張のニュアンスが高そうである。 否定形 be not supposed to do にいたっては「~してはいけない」の意味である(東京書籍4500)。 ---- 証明・証拠 証明・証拠 proof ,demonstration evidence 証拠 役所などの証明書 certificate (裁判所などで)証言する testify (※高校必修範囲外だと思ったら、三省堂 CROWN I にあった) proof には、「証明」「証拠」の2つの意味があるが、なるべく「証明」のほうで覚えるべきである。 なぜなら、数学の「証明」のことを proof というからである(ジーニアスで確認)。 私たちは、高校卒業後もなるべく教育レベルの高い外国人の英文を読むべきであろう。そして教育レベルの高い人ならば、外国の中学高校の数学は習得しているはずなので、よって外国人の彼らには証明を proof という習慣がついているはずである。外国の中学高校レベルの数学の用語も知らない頭の悪い外国人の英文なぞ、読むに値しない。 なお、動詞 prove は「証明する」の意味である。 evidence が、証拠のひとつひとつのことである。ジーニアスによれば、proofは「evidence を積み重ねた最終的な証拠」のことであるとされる。 だが、それよりも、proofは「証明」であると覚える方がよいだろう。 また、少なくとも日本の学問の世界では、個々の実験事実や個別の統計のような、個々の証拠のことは evidence というのが普通である。英語でどういうのか知らないが。 桐原の単語集にあるが、裁判などの「証拠」も「証言」も evidence である。英語では、「証言」と「証拠」を分けずに evidence という。 単語集にはないが、どうしても発言による「証言」であることを強調したい場合は verbal evidence という(ジーニアス英和で確認)。 ジーニアス英和辞典で確認すれば、「証人」すらも evidence である。 prove to be ~ で「~だと分かる。」「~となる。」「~と判明する。」である。 辞書の例文が、事業などが prove to be a success 「成功となる」またはprove to be successful 「成功となる」である(ジーニアスとセンチュリーの両方)。東京書籍4500の例文もこの類。 桐原4500だけ He was proved to be innocent 「彼は無実だと判明した」である。 旺文社1900には、 prove to be ~ の例文は無い。 実はデモンストレーション demonstration 「証明」の意味がある。 一般的には、英語では、行動によって意志を表したり、あるいは、たとえば新製品の実演販売みたいに実演などによって説明すること等を demonstration という。 集団などのデモ行進も、同じ demonstration である。 センチュリーの例文だが、戦争反対のデモなら demonstration against the war である。 一般に、demonstration against ~で「~反対のデモ」である。 だから東京書籍にある「新空港に反対するデモ」なら demonstration against the new airport である。 能力の証明なども demonstrate であり、東京書籍に紹介されている。 旺文社1900でしか説明していないが、感情をあらわにすることも demonstrate である。だが、感情のデモは例文もないので、深入りする必要はないだろう。 動詞形は demonstrate である。 ジーニアス和英を見ると、実はdemonstraite やdemonstration には「論証する」などの意味もあり、旺文社1900が紹介しているが、しかし桐原も東京書籍も「論証する」の意味は紹介していない。 センチュリーは、証明についてのdemonstration の意味は、論証ではなく「実証する」であると説明している。 ジーニアスの例文を見ると、「哲学的論理」の論証の例文である。 demonstrate が「論証する」と言っても、どうやら、数学のような論証ではないようだ。 ---- 仮定や論理的思考など 仮定する assume, suppose 当然と思う assume 仮定 assumption, supposition 推測 supposition 「推論する」 infer 仮説 hypothesis 動詞 assume は、「仮定する」「想定する」「決め付ける」などの意味。 共通するニュアンスは、ジーニアスいわく、明確な証拠がなくても想定すること。 名詞形が assumption である。 assume that ~ で「~だと思い込む」(桐原)または「~を当然のことだと思う」(旺文社)である。 たとえば、旺文社の例文「私たちは日本の列車がいつも定刻どおりに運行することを当然と思う」が assume that の例である。 ジーイアスによると、三段論法の「前提」などで、assumption が使われるとのこと。 このため論理的な議論ではassume や assumption が使われると思われるので、覚えておきたい単語である。 しかし、suppose にも「仮定する」の意味がある。 だが名詞形 supposition が「推測」の意味である。なので、suppose はどちらかというと「推測する」のニュアンスが強い。 桐原の単語集にはsuppose は「推測する」の意味しか書いてないが(東京書籍に至っては「思う」しかない)、しかしセンチュリーを見ればsupposeの意味として「推測する」のほかにも「仮定する」も書いてあるのが実態である。なお、旺文社1900でだけ、例文なしで「仮定する」の意味も紹介してえる。 「仮説」と「仮定」は違う。 「仮定」とは、たとえば「仮に○○だとしたら、□□は××になるはずだ」の前半「仮に○○だとしたら」のこと。仮に定めるので「仮定」というわけである。 一方、「仮説」とは、「~の原因は、□□が××だからだ。なぜならば(以下略)」という原因をとなえる主張のうち、まだ真実かどうかの評価が確定してない主張のこと。 「仮説」は英語で hypothesis である。 なので「仮説」は証明あるいは検証するためのものである。 「仮説を証明する」は prove a hypothesis である(旺文社、ジーニアス)。 ただし、実際には派生的に hypothesis でも「仮定」の意味もある(ジーニアス、センチュリー出確認)。 だが、単語集では hypothesis の「仮定」の用法は紹介されていない。あまり知的な用法だとは思われていないのだろう。「仮定」を言いたいなら assumption で済むし、高度な学問をするなら「仮定」と「仮説」は分離すべきであるし。 infer という動詞があり、事実や根拠などをもとに「推論する」という単語である。 infer that ◯◯(文節) from ~ で「~を根拠に◯◯だと推論する」という意味である。 桐原5500も旺文社も、infer の例文では from で根拠を提示している。 そもそも日本語の「推論する」というのは、事実や根拠をもとに推理・推測することだと、広辞苑(1992年)にも書いてある。 広辞苑の例文にも「事実から推論する。」とある。 ともかく、このように「推論」は根拠とともに使うべき単語である。 infer で推論する内容は、べつに学問的な内容である必要はなく、たとえば「彼女の沈黙から怒っているのだと察した」とか(ジーニアス)、そういうのでも構わない。 infer にはこのほか、「暗示する」(= imply )という単語もあるが、imply という「暗示する」の意味の単語で代用できるので、説明を省略する。 名詞形は inference 「推論」「推理」であり(旺文社)、推論するという行為(旺文社、ジーニアス)または推論の結果によって得られた結論のことを言う(センチュリー)。 by inference で「推論によって」(旺文社)、「推測によって」(センチュリー)である。 ---- 扱う deal with ~, treat treat は普通、厚遇する「扱う」の場合に使う。つまり、treatは「厚遇する」である。 ただし、和訳の都合で、「厚遇する」だと表現が硬くなる場合によく「扱う」と訳される。 だが、「扱う」で覚えてしまうと類似語とのニュアンスの違いが覚えづらくなってしまうので、treat は「厚遇する」で覚えよう。 治療の場合にも treat を使う。 dea with ~は、「~を処理する」「~を契約する」などの意味である。 典型的な例文が「苦情を処理する」 deal with complaints である(東京書籍4500。旺文社1900)。 ジーニアスで確認したところ、 deal with にも厚遇の用法もあるが、本ページでは触れないとする。 deal は「分配する」「配る」の意味である(東京書籍4500でも紹介)。 トランプなどの札を「配る」のが dealである。 だからトランプの札を配る人をディーラー dealer とも言う。 deal には「商取引」の意味もある。だから、ある種の商品の「販売人」「販売業者」のことを dealer とも言う。桐原4500が「販売業者」としている。ジーニアスは「販売人」。 同じスペル deal で 「量」の意味がある。 a good deal of ~ で「かなり多量の~」である(桐原4500)。 a great deal of ~ で「かなり多量の~」である(桐原4500)。東京書籍4500では、 a great deal of ~ で「非常にたくさんの~」としており、数えられない名詞に用いるとしている。 桐原の例文では、 a good deal of snow 「かなり多量の雪」、東京書籍の例文では a great deal of time 「たくさんの時間」、と訳している。 ---- 分配・配分 distribute, deal 食料や出版物などを分配する場合、普通は distribute を使う(東京書籍4500)。東京書籍では「出版物」では「印刷物」としているが(例文でリーフレット leaflet を想定)、しかしトランプの札も印刷物であるので、このページでは「出版物」と表現した。 典型的な例文が distribute food to the ~で「~に食料を配る」である。 辞書によっては「金を配る」場合もあり、その場合は distribute money to the poor 「まずしい人に金を配る」である。(センチュリーを参考) 「子供たちにリーフレットを配る」なら、 distribute leaflets to the children となろうか(wikiオリジナル。東京書籍およびジーニアスの例文を参考に組み合わせ)。 東京書籍4500だけでなくセンチュリー英和でもリーフレット leaflets を配る例文である。 単語集にはないが、電気屋などで買えるテレビ信号などの分配器をよくよく見ると、ディストリビューターと言ったりしている。実際、ジーニアスで分配器 distributor である。 単語集にはないが、数学でいう確率分布などの「分布」も distribution である。しかし高校生に「確率分布」と言って通じづらい。 ジーニアスによれば、生物学などでの植物の「分布」も distribution である。高校生は植物のほうが覚えやすいだろう。 deal については「扱う」の項目で説明したとおり。トランプの札などを配ったりするのが deal である。 ---- 比例 ratio, rate, proportion 3:2とか 4:7 とか、とにかく個別の比や比率のことは ratio (レイショウ)という。 そういった個別の比ではなく、たとえば数学で「AとBとは比例関係にある」のような「比例関係にある」のことを形容詞で proportional と言う。 名詞 proportion は比例関係。 そういうのではなく、たとえば利子率など何かの比率のことは rate (レイト)という。 なお、利子率や金利は interest rate という。ここでいうinterest は、「興味」の interest と同じスペル。 桐原4500によると、「失業率」は the unemployment rate である。 東京書籍4500によると、「出生率」は the birth rate である。 proportion には、全体の中で占める「割合」という意味もある。 桐原4500および旺文社1400に熟語 at any rate 「とにかく」が紹介されているが、例文は無い。 実際には ratio にも比例関係の意味があったり、proportion で個別の比に言及することもあるが、ニュアンス的には上記の感じのはず。 例文は省略。著作権的な問題をクリアできそうな典型的な例文が見つからなかったので、読者が単語集などで読者が自身で調べてほしい。 * 合理的 rational, 「合理的な」は英語で rational である。これ単独だと覚えづらいが、実は比率 ratio と冒頭のスペルが同じだし、発音も「レイショウ」と「レショナル」でほぼ同じである。 なお、数学の「有理数」も rational number であり、同じスペルの rational である。 だからか和訳も気をきかしてか、有「理」数となっているわけであろう。(ここら辺の話題は、数学英語の専門書に書いてある、有名な話である。)明治時代あたりの数学者に感謝しよう。 そして、「有理数」とは、整数の比例で表される数のことである。(数学的な厳密性は置いておく。) つまり欧米人の数学のできる人は、「合理的な」=「整数の比例の」が同じ単語であると認識しているわけである。 こうやって考えると、「比例」ratioさえ知っておけば、そこから「合理的」 rational も普通に覚えられる。 なお、「非合理な」は irrational である。 さて、rational でよくある例文は、「合理的な決断」a rational decision である。東京書籍4500と桐原4500の両方に、「合理的な決断」 a rational decision が書かれている。 ついでに、「自然数」は a natural number である。単語集には「自然数」は書かれていないが。 「実数」は a real number である。 「自然数」も「実数」も、英語または対応するドイツ語あたりを、日本語に直訳しただけである。 なお、「論理的な」は logical (ロジカル)である。「論理」が logic なので、それから覚えよう。 reasonable (リースナブル)と言う形容詞には、「理にかなった」という意味があるが、しかし「値段が手ごろな」という意味もあるので、使いどころが難しそうである。 ---- 出席 attend, present 形容詞 present は、「出席している」の意味もあるが、名詞形 presence に「存在感」の意味がある。 attend が、会議や授業などに「出席する」である。 典型的な例文が、attend the meeting 「会議に出席する」である(センチュリー、東京書籍4500)。 だが、attend school で、毎日規則的に「学校に通っている」の意味である(センチュリー、東京書籍4500)。 学校や教会に規則的に通うのは attend を使う。「教会に通う」の例文なら attend church である(センチュリー)。 授業の出席のattendの例文が、辞書でも単語集でも見つからない。 授業の出席については、present を使うのが安全だろう。 なので、辞書にはないが、どちらかというとattend は、出席するために「~に出ている」の意味ぐらいで解釈したほうがよいかもしれない。 名詞 attention が「注意」の意味である。attention が「注意」なのも、「注意を向かわせる」みたいな意味ぐらいで解釈したほうが、出席の「~に出ている」くらい 旺文社1900いわく、pay attention to ~で「~に注意を払う」である(なお、ここでのtoは(不定詞ではなく)前置詞の用法)。桐原によれば、attend to ~ともいう(toは前置詞としての用法)。 あまり attend と present の概念の違いがハッキリしていない。実務の際は、勤務先の業界の慣習などに任せて使い分けのが良いだろう。 ---- 寄付 donate, contribute 単語集を見てたら、「勘弁してほしいなあ」とあきれたが、contributeには「寄付」の意味もあるが、現代のIT社会では普通はcontributeは「貢献する」の意味である。 「寄付する」はdonateである。 しかも、単語集には、contributeの項目を見ても、donateについては書いてない。donateの項目を見ても、contributeについては書いてない。 たとえばwebサーバなどのよく使われるOSのLinux(リナックス)の場合、寄付以外にも多くの協力活動があって(テストに参加するとか)、そういう諸々の協力活動の全体のことを contribute と言っているのが普通である。 そして、その協力活動の中のひとつに寄付もあって、その寄付が donate という言い回しである。 実際、debian(デビアン) というLinuxの一種のwebサイトはそうである<ref>[https://www.debian.org/intro/help Debian -- Contribute: How you can help Debian] 2022年5月1日に確認.</ref>。 ページ"Contribute: How you can help Debian"の中に、下記のようにいくつも項目があって、 <pre> Contribute: How you can help Debian Coding and Maintaining Packages Testing and Bug Squashing Writing Documentation and Tagging Packages Translating and Localizing Helping other Users Organizing Events Donate Money, Hardware, or Bandwidth Use Debian How your Organization can support Debian </pre> その項目のひとつとして"Donate Money, Hardware, or Bandwidth"があるという構成である。 もっとも、wikipediaのサーバを動かしているOSはDebianではなく Ubuntu(ウブントゥ)というイギリス製OSであるのだが、このUbunutの本家イギリス語版のwebサイトのページで寄付のページには contribute と書いてあるので<ref>[https://ubuntu.com/download/desktop/thank-you Thank you for your contribution | Ubuntu]</ref>、contributeで寄付を意味しても間違いではない。 よく、医療で「血液ドナー」とか何かの提供者のことをドナーdonorというが(旺文社1900)、これもdonateの派生である。 なお、donor の発音はドウナーである。旺文社1900では発音の注意をしている。 なお、ジーニアスとセンチュリーで確認したところ、blood donor とは単なる「献血者」のこと。クルマの「献血車」にあらず。 ジーニアス英和によれば、ドナーカード donor card も英語でそのまま通じる。 なお、桐原3000の donor 項目いわく、「血液バンク」は a blood bank とのこと(桐原3000)。 なお、名詞形は donation 「寄付」である。 単語集によると、make a donation で「寄付する」である(東京書籍、桐原)。 make a donation to our school で「学校に寄付する」。 make a donation to church で「教会に寄付する」 donate で使う場合、ジーニアス英和に donate a money to Red cross 「赤十字に寄付する」という例文があった。 debianのサイトでも donate a money と言っているように、普通は 「donate a 金または金額」のパターンである。 実際、センチュリー英和では donate $1,000 to a charity 「慈善事業に千ドル寄付する」である。 contribute で金銭を寄付する場合でも同様、 「contribute 金額 to 相手」のパターンである(桐原、東京書籍)。 contributeの単語集が金額の例ばかりであるが、センチュリーによれば a money で寄付してもいい。 センチュリーいわく contribute a lot of money to church 「教会に多額の寄付をする」である。 contribute には、なにか望ましくないことの「一因になる」という意味もあり、たとえば「二酸化炭素は温暖化の一因になる」とか(旺文社)、「砂糖は虫歯の一因になる」とか(センチュリー)、「喫煙がガンの一因になる」とか(ジーニアス)。 良いことの一因になった場合にもcontributeを使うが、ただし和訳の際、普通は「寄与した」と訳すだろう。 ---- 闘争と努力 struggle, strive 努力する endeavor , 不和と摩擦 strife, friction, conflict 紛争 strife, dispute 口論 quarrel, dispute 意見を戦わす dispute, tackle 「努力する」には、struggle と strive と endeavor があるが、高校生はまず struggle を覚えるのが良い。 strive だと、後述のように闘争の意味合いに解釈される可能性がある。 実際、単語集でも、struggle を先に紹介しており、strive はかなり後半で紹介する。 動詞 struggle は「もがく」「あがく」などの意味だが、「努力する」「奮闘する」のような意味もある。 病気や苦痛などから逃れるために「戦う」のような意味もある。 struggle to ~(動詞) で、「~するために努力する」である(東京書籍)。 struggle with ~ で「~と闘う」である。 struggle for ~で「~を求めて闘う」である。ジーニアスによれば、struggle for independence で「独立を求めて闘う」。旺文社によればstruggle for equal right で「平等権を求めて闘う」 名詞も struggle であり、「闘い」「努力」の意味である。 だが、生存競争を a struggle for existence という(旺文社1900にあり。ジーニアス、センチュリーで確認)。 あまり使い分け方ははっきりしないので、慣習に合わせるしかない。 単語集にはないが、権力闘争は a power struggle といったり(ジーニアス)、a struggle for power という(センチュリー)。 endeavor (エンデバー)は動詞で「~しようと努力する」、名詞では「(真剣で継続的な)努力」の意味だが(ジーニアス、センチュリー)、なぜか単語集には、あまり積極的に紹介されてない。endeavor は東京書籍では巻末おくりだし、桐原では5500おくりである。 アメリカの宇宙船の名前でエンデバーというのが昔あったので、特に悪い意味は無いだろう。 しかし、なぜだか、単語集はあまりエンデバーという単語を紹介していない。 動詞として使うときは endeavor to ~(動詞) 「~しようと努力する」 である(東京書籍、桐原、ジーニアス、センチュリー)。 strive という単語があり、これも「努力する」や「闘う」の意味である。桐原だと闘争の意味が書いてないが、東京書籍にきちんとstriveの「奮闘する」が書かれている。 これは比喩的な奮闘ではなく、後述するように名詞形で実際の戦争を扱う。 strive for ~で「~を目指して努力する」または「~を求めて努力する」の意味である。 旺文社1900には動詞 strive の項に、派生の名詞形 strife がスペルと和訳「争い」「不和」だけ紹介されている。 他の単語集には名詞形が書かれていないが、strive には実は派生の名詞形が2つあり、striving と strife である。 辞書にも、strife と strive の関係が書いてないが、明らかにstrife と strive はお互いに派生であろう。少なくとも旺文社1900は 名詞 strife は 動詞 strive の派生だという見解である。辞書のほうが頭悪い。 striving が「努力」の意味。 strife は「紛争」や「不和」など、ぶっそうな意味である。 辞書によると、政治闘争は a political strife である(ジーニアス、センチュリー)。 しかし、ジーニアスによれば、民族紛争などは conflict を使う場合もある。 山川出版の英語版・詳説世界史では自衛隊PKO派遣先の、いわば「紛争地帯」に相当する場所を conflict zone と言っている<ref>橋場弦 ほか監修『WORLD HISTORY for HighScool 英文詳説世界史』、2019年10月15日 第1版 第3刷発行、P.412</ref>。 一方、センチュリーだと、「その二国間には紛争がある。」There is strife between the two countries. とある。 ジーニアスによれば、家族紛争を a family strife という。 dispute には、「紛争」「口論」「議論」「意義を唱える」などの広い意味がある(桐原)。「意義を唱える」は旺文社の解釈。 「議論」を訳す場合でも、「議論を戦わす」のように(東京書籍、センチュリー)、意見の対立に主眼が置かれている。センチュリーにいたっては、感情的な対立があるとのニュアンスがあるとまで述べている。 だからか労働争議を a labor dispute ともいう(ジーニアス、センチュリー)。 いっぽう、単に意見や議論を戦わせるだけなら、動詞 tackle である(センチュリー、桐原)。ジーニアスにいたっては、tackle の意味で「戦う」の言葉は使わず、tackle は意見を「論じ合う」だとしている。 センチュリーは、「賃上げ(on a raise)をボスにかけあう」を動詞 tackle としている。文脈は違うが、旺文社でも「予算」がどうのこうのと、tackle で金を話をしている。 動詞としては tackle には「問題に取り組む」という用法もある(桐原、東京)。 典型的な例文は、 tackle the problem 「その問題に取り組む」 である(桐原、東京書籍)。 なお、tackle は、ラグビーなどの名詞「タックル」、動詞「タックルする」と同じ単語でもある。 肉体的な単なる「闘い」「闘う」は fight とか battle で良いだろう。 「不和」については friction 「摩擦」を使うも言い換えもある。物理学の「摩擦」 friction と同じ単語である。 「静止摩擦」は static friction である(旺文社1900の static 項目)。ジーニアス・センチュリーのstatic 項目では見つからなかったが、たしかに静止摩擦は static friction だたはずである。 なお、「静電気」は static electricity である(旺文社1900、ジーニアス static 項目、センチュリー static 項目)。 さて、friction の話題に戻る。東京書籍4500と桐原4500・5500には、friction が載っていない。旺文社1900にだけ friction がある。 外交の「不和」には、friction を使える(ジーニアス、センチュリー)。というか、英語で「貿易摩擦」を trade friction と言う(旺文社)。ジーニアス英和やセンチュリー英和で貿易摩擦を確認したかったが、見つからなかった。辞書でfriction で調べてもtradeで調べても、ジーニアスとセンチュリーでは見当たらない。 和英のほうでジーニアス和英を調べると、「貿易摩擦」は trade friction または trade conflict というとのこと。 外交の不和で strife を使うと戦争の恐れの高い不和だと誤解されかねないだろうから、貿易摩擦のようなお金の問題では friction で十分だろう。 さて、努力について、 effort という名詞があるが、しかしこれは名詞である。 なのでeffortで「努力する」と言いたい場合、東京書籍やジーニアスによれば make an effort のようになる。意外と難しい。 effort to ~(動詞)で「~するための努力」である。 東京書籍にあるが、make a great effort 「大変な努力をする」のように、great などの形容詞がつくこともある。 ---- 傾向 tendency, trend, inclination 流れ current , flow 「傾向がある」 tend(動詞), inclined (形容詞), ミスなど好ましくないことをする傾向がある be liable to ~ その他、好ましくない傾向がある be prone to ~ センチュリー英和を見ると、trend と tendency の違いが説明されている。 tendencyは、たとえばセンチュリーにある「赤ん坊は空腹になると泣くものだ」とか「弱い母音は消失する傾向がある」のように、本来的に、何かのおきる傾向のあること。 trend は「流行」や現在の「趨勢」(すうせい)や「風潮」などの傾向。ジーニアスを見れば「趨勢」や「風潮」の意味も書いてある。 なお、衣服の流行は fashion である(東京書籍3000、桐原3000)。一応、ジーニアスには、衣服だけでなく文学や芸術の流行も fashion ということもあると書いてあるが、しかしセンチュリーは採用していない。 なお、mode も衣服の「流行」の意味であるが、現代では廃れている表現だとジーニアスはいっているし、桐原と東京書籍の単語集に mode は無い。 しかし、旺文社1900にmode があり、「方式」「形態」などの意味である。後述の「携帯」の誤字ではなく、確かに旺文社1900のmodeの項目に「形態」と書いてある。 旺文社1900の単語集は入試準拠なので、おそらく教科書にはないが入試によくある表現なのだろう。総数1900のうちの844番目にmodeがあった。 旺文社1900のいうmode関連の派生表現のひとつで、携帯電話の「マナーモード」は silent mode である。 ほか、物理学の弦の振動などの「モード」もこの単語だったと思うが、辞書には無いので不明(ジーニアスとセンチュリーの両方とも確認したが見つからなかった)。 さて、tendency の話題に戻る。 さきほど trend は「趨勢」や「風潮」だと言ったが、だがジーニアスによると、現在の株価の傾向などで(トレンド trend ではなく) tendency を用いている例文もあり、実際には使い分けは明確ではない。 tendency の動詞形は tend であり、「傾向がある」の意味。というか、動詞 tend の名詞形が tendency である。 tendの意味も、本来的に "~をする傾向がある" という意味での「傾向がある」である。 tend to ~(動詞)「~する傾向がある」の形でよく使われる。 ほかにも、 tendに「世話をする」という意味もあるが、だがこれは、名詞 tender「やさしさ」の動詞形だとみなすべきだろう。 ややこしいことに、動詞 tender は「提出する」「支払う」の意味である。だが単語集に動詞 tender がないので、無視しよう。 一方、trendについて。 センチュリーによれば、「新しい流行」 a new trend とか使う。 東京書籍に the current trend 「現在の流行」という例文もある。 東京書籍によれば、「最近は小型車が売れている」的な意味の流行も trend である。 また、旺文社によれば、「最近は高齢者には運転をやめさせるのが傾向である」というのも trend である。 旺文社の例文を考えれば、和訳が「傾向」であろうが、内容が最近の風潮なので、trendを使うのが正しいわけだ。 形容詞 trendy 「流行の先端を行く」の意味である。 * 「流れ」 current, flow flow は「流れる」と言う意味の動詞だが、名詞では川などの「流れ」を言う。 current は、「流れている」という意味の形容詞だが、名詞では「海流」や「電流」などの「流れ」も言う。 川も海流も同じ水の流れなのに、なぜか使い分けをするのである。 東京書籍3000でも桐原3000でも、flowの例文で、川の流れを扱っているので、そういう単語だと納得してもらうしかない。 英語というのは、あまり論理的ではなく、慣習などで使い分けが決まっている部分もある。 東京書籍に書いてあるが、気体の流れも液体の流れも flow である。 普通科高校では習わないが、工業高校などで流量計などの機器を扱う際、その流量計を英語で「フローメータ」などという。また、その計器で測定する流れのことは普通は「フロー」flow と読んでいる。 風の流れや川の流れという言い方ではなく、わざわざ「気体」「液体」と東京書籍が言ってるのは、たぶん、そういう流量計などを見越しての表記だろう。 実際、ジーニアスを見てると、「液体・気体の流出量(流入量)」という意味もかかれている。東京書籍はおそらく英和辞典のflowのこういう意味を参考にしたと思われる。 さらっと「流量計」と言ってしまったが、流体力学では流出量も流入量も区別せず、まとめて「流量」(りゅうりょう)と呼び、それ(つまり「流量」)を flow と言うのである。 実際、ジーニアスでは、たとえば人口の「流入」もflow であるし、センチュリーでは(石油らしき)ガロン単位の液体の「流出」もflow である。 そのほか、お金の「流れ」については、経済学ではカレントもフローもどちらとも使う表現なので、深入りしない。 さらに混乱させるが、discharge 「解放する」・「釈放する」、「解雇する」「解任する」の意味の単語(東京書籍の巻末)にも、実は「流れる」の意味がある(ジーニアス)。「アマゾン川が大西洋に注いでいる」という例文で、discharge を使っており、ここでは flow into と同じだと、ジーニアスは言っている。 煙などの排出も discharge であり、いったい流出なのか流入なのか、はっきりしない。 専門用語などで flow と区別したい場合、discharge を使うこともある。 だから、たとえば流体力学で、理論値と実測値との違いの比率のことを discharge coefficient といい、よく「流量係数」とか「流量係数」とか言う。分野によって和訳が違うので、和訳は気にしなくていい。証拠に英語版ウィキペディアの記事 [[:en:w:discharge coefficient]] (流出係数)があります。 あと、discharge には名詞の用法もある(ジーニアス)。東京書籍には動詞の用法「解放する」以下略しか書いてない。 そんなことよりも、「解放」「釈放」の意味を、液体の排出などと関連づけて覚えよう。なんか解き放たれて自由に動ける的なイメージが discharge である。 なお、日本でも、よく、解雇や解任のことを、比喩的に「自由の身」みたいとか「長い夏休み」みたいに言います。なので、そこから派生的に、discharge の複数の意味を把握できます。 洋の東西を問わず、人間の言語センスは似たようなもんです。(あるいは、もしかしたら日本人が英語discharge を真似たのかもしれません。) 「頭脳流出」は a brain drain という(旺文社1900、ジーニアス、センチュリー)。ややダジャレっぽい語感もするので真に受けるわけにはいかないが、drainの基本的な意味は「流出する」である。(なお、このように brain には「脳」の意味のほかにも「頭脳」の意味もある(桐原3000)。) だが drain には、体力などを「消耗させる」という意味もある(旺文社、ジーニアス、センチュリー)。 drain my strength 「体力を消耗させる」 である(センチュリー。ジーニアスに似た例文)。 体力が流出していくイメージか。 台所の「排水口」とかも名詞 drain である。屋内の下水などに向かって流出させる側の台所の排水口が drain である。 その他、排水管が drain である(ジーニアス)。 * 傾向 tend, inclined まず、tend は動詞。 inclined (インクラインド)は形容詞。 なので be inclined to ~(動詞) で「~する傾向がある」 のように使う。inclined to do を使いたい場合、be動詞が必要。 一方、tend は動詞なので、be動詞なしで、 tend to ~(動詞) 「~する傾向がある」 である。名詞形はtendency 「傾向」である。 実は動詞 incline (インクライン)「傾ける」という単語があって、「傾ける」「その気にさせる」の意味である(東京書籍)。 坂(slope)などの物理的な「傾き」やその角度なども 名詞 incline である(ジーニアス)。 桐原は inclined などは紹介していない(桐原4500および桐原5500を確認)。 単語集にはないが、「話を聞こうと耳を傾ける」incline my ear to ~ 、みたいな表現にも incline を使う(センチュリー)。というか、おそらくこの英語表現が先にあって、それに合わせて日本で「傾聴」みたいな表現が生まれた可能性。 また、このように incline には、好意などによって、「関心を向ける」のような意味もある。 このためか、名詞形 inclination (インクリネイション)には「傾向」の意味のほかにも、「好み」の意味もある(旺文社)。 ただし、必ずしも inclination は「好み」とは限らず、たとえば「彼は太りやすい」のような体質や(ジーニアス)、「この車は横滑りしやすい」とか(センチュリー)、そのほか性質や、性向なども inclination である(ジーニアス)。 どちらにせよ、とりあえず inclination の中心的な意味は「傾向」だと覚えておけば問題ないだろう。 単語集にはないが、坂や屋根などの物理的な「傾き」やその傾斜の角度なども inclination という(ジーニアス、センチュリー)。 liable (ライアブル)は、好ましくないことをする傾向や、好ましくない状態になりがちな傾向のある場合に使う(ジーニアス、センチュリーで確認)。なお旺文社では発音注意している。 和訳では liable は単に「~しがちである」と訳す場合があるが(桐原4500、旺文社1900)、「好ましくないことをする傾向」だという条件をしっかりと理解しておこう。、 be liable to ~(動詞の原型)で「~(ミスなどの行動)をしがちである」 のように訳す。 ほか、典型的な例文 be liable to illness 「病気にかかりがちである」(旺文社、ジーニアス) がある。なおこの場合、to が不定詞ではなく名詞に対する前置詞に変わっている。 なお、「ミスをする」make a mistake または make mistakes である。なお、桐原3000およびジーニアスでは、make a mistake 「間違える」と訳している。 なので、ともかく be liable to make mistakes 「ミスをする傾向がある」 である(旺文社)。 形容詞 prone (プロウン)は、望ましくないことについて「~の傾向がある」の意味(ジーニアス、センチュリー)。 病気になりやすいとか、怒りやすいとか、そういうのも prone を使える。例文は辞書を見て(著作権の都合)。 単語集には、なぜか、望ましくないことに使う前提が書かれていない(旺文社、東京書籍の巻末)。 だが、辞書には前提が書かれている。 単語集にある典型的な例文は、 be prone to error 「間違いを起こしやすい」 である(旺文社、東京書籍の巻末)。 to は前置詞でもよく、動名詞 to でもよい。つまり、prone to の後ろにくるのは、名詞 でも 動詞の原型 でも良い。 earthquake-prone 「事故多発地域」の意味である(センチュリー、旺文社)。 ---- mistake と error ジーニアスによると、 mistake は不注意や勘違いによる間違い。 error は、計算の誤りや、裁判の誤審など。 ・・・とのこと。 また、センチュリーいわく 「不注意な間違いをする」make a careless mistake とのこと。 だから mistake は、「勘違い」とか(ジーニアス)、「誤解」「思い違い」とかで(ジーニアス、センチュリー)覚えたほうがいいかもしれない。 mistake を「誤り」「間違い」と訳しても間違いではない(ジーニアス、センチュリー)。そういう訳がジーニアスにもセンチュリーにもある。 ---- 現在の current , present, modern current は、形容詞「現在の」が入試ではよく出るが、しかし名詞では「流れ」の意味である。 海流とか電流とかの流れにcurrentを使う。 東京書籍およびジーニアスが紹介しているが、「暖流」は a warm current である。 ついでにジーニアスが紹介している「寒流」は a cold current である。 current は、まず名詞「流れ」を覚えるべきであり、形容詞「現在の」はその派生として覚えるのが良いだろう。 ジーニアスで調べた語源でも、「走っている」→「流れている」→「現在通用している」というような意味の変遷らしい。 さて、current 関連の名詞として、単語集にはないが、電流の直流 D.C. とは direct current の略である。 交流 A.C. も Alternating current である(ジーニアスで確認)。 通貨はcurency (カレンシー)である。 単語集にはないが、国際的に安全な通貨のことを経済学ではハードカレンシーといい hard currency と書く。) 「現在の」を意味する形容詞には、current のほかにも present がある。 present は、たとえば英文法の「現在形」や「現在進行形」などの「現在」も present である。 「現在」のpresent と 「贈り物」の present とスペルも発音も同じである。また、「出席している」の形容詞 present と同じ単語である。 present と current のニュアンスの違いは、辞書では特に言及されてないが、current には「流通」や「通用」のような意味合いもあるというところだろうか。 * 現代 modern と contemporary なお、modern は、「近代の」「現代の」という意味であり、歴史的なニュアンスで使う。 modern も単語集にあるので、覚えよう。 単語集にないが、たとえば「近代文学」modern literature のように(センチュリーで確認)。なお、「現代」はmodern times という。 桐原4500にあるが、(科目名ではない意味での)「現代社会」は、modern society である。 動詞 modernize は「近代化する」「現代化する」の意味である(東京書籍4500および桐原4500)。 しかし、contemporary という単語も存在し「現代の」という意味であり、しかも、旺文社いわく「現代日本文学」は contemporary Japanese literature である。 東京書籍4500いわく、contemporary と modern の違いは単に、芸術様式の話題では contemporaryが「現代の」の意味で使われるとのこと。 だからか、東京書籍・桐原・旺文社の3つともすべてに単語 contemporary art 「現代美術」がある。 その他、contemporary には「同時代の」と言う意味もあり、東京書籍いわく、「ピカソとダリは同時代の人」という内容で、語法 be contemporary with ~ を使っている。 * temporary temporary は「一時的な」の意味の形容詞。 典型的な例文が 「一時的な仕事」 a temporary job である(東京書籍、旺文社)。 なお、ジーニアスとセンチュリーでは、同じ a temporary job を「臨時の仕事」と訳している。 対義語は permanent である。 つまり、 temporary ⇔ permanent である。 なお、いわゆる「アルバイト」は、英語で part-time job である(ジーニアス和英「アルバイト」で確認)。side job ともいう(ジーニアス和英)。 日本語の「パート主婦」のような、勤務時間の短い意味合いは、英語のpart time jobには無い。 そもそもアルバイトはドイツ語に由来する言い回しだし、しかもドイツ語では「仕事」という意味らしい(本書は英語の教科書なのでドイツ語には深入りしない)。 「永久歯」を permanent teeth という(ジーニアス、東京書籍)。 東京書籍いわく、「終身雇用」を a permanent job というとの事だが、しかしジーニアス英和やセンチュリー英和では確認できなかった。 ---- 強制 force, enforce, compel , oblige 義務 duty 辞書によくあるcompel の典型的な例文が「病気のため仕方なく~せざるを得なかった」的な例文。こういうときにcompelを使うようである。 辞書によると、compel はforce よりも意味が弱く、oblige (オブライジ)よりも意味が強い、 普通、oblige (オブライジ)は「義務づける」と訳す。 単語集にはないが、思想の用語で「高貴たる者の義務と責任」と言う(英語ではなく)フランス語で noblesse oblige ノブレス・オブリジュ という単語があり、社会的エリートが兼ね備えるべき義務感のことを言う。 さて、英語では、名詞形 obligation が「義務」の意味。センチュリー英和で確認したが、法律的な「義務」も、道徳的な「義務」も obligation である。 桐原4500では obligationの意味に「義理」を加えて、「義務」「義理」がobligation だとしている。 旺文社1900では、 obligationの意味に「責任」を加えて、「義務」「責任」がobligation だとしている。まあ、「高貴なる者の義務と責任」が世界各国エリートの基礎教養なので、知的な英文ではそういうニュアンスで obligation が使われることも多いのだろう。 東京書籍4500 には、oblige の紹介は無い。 force は「強制する」の意味。 さて、「軍隊」「武力」も force である。 軍隊によって「~が強制された」という場合、どうすればいいのだろうか? 桐原4500では、force「強制する」の例文での「軍隊」を troop という単語で表現して、forceの同音意義語の問題をうまく回避している。 桐原の例文が「政府軍が反乱軍に降伏することを強制した。」と言う例文である。 なお「政府軍」は the government troops である。 反乱軍は the rebels である。「降伏すること」は to surrender である。 troop とか rebel とか、索引に無い単語ばかりである。 enforce は、強制一般の意味もあるが、法律によって強制する、というニュアンスがあり、例文もそういうのが多い。だがラグビーでエンフォースという用語がある。ラグビーの説明はしたくないので説明は省略。 センチュリーの英語によると、警察が市民に法を強制したりするのが enforce である。 桐原4500によると、法律を施行するのが enforce である。警官が法律を守らせる場合も、the police enforces the law のように、目的語は法律になる。 旺文社1900および東京書籍4500にも、似たような警官と法律の enforce 例文がある。 こういう事情もあってか、旺文社は1900はenforceの意味を「施行する」「実施する」としている。 桐原は、enforceの意味を「施行する」「遵守させる」としている。 なお、死刑執行で誰かを「処刑する」のは英語で execute (イクセキュート)である。 「死刑執行」「処刑」は execution である(桐原5500で「死刑執行」、旺文社1900)。 execute には、計画・命令などを実行したり、仕事を「成し遂げる」などの意味もある(ジーニアス、センチュリー)。ジーニアスによると「最後までやる」が原義のほうの意味とのこと。 処刑の意味は、処刑で「片付ける」的なニュアンスだろうか(特に言及されてはいない)。 summary execution で「即決処刑」である(ジーニアス)。 要約を意味する単語 summary には、形容詞として「略式の」という意味もある。 計画などの実行で使われるといっても、ただし、こういう固い語なので、技術の必要な難しい計画などの実行で使われるのが普通である(ジーニアス)。 また、このことからか、企業の重役のことをエグゼクティブ executive ともいう(旺文社、桐原5500)。executive には名詞「重役」の意味のほか、形容詞「経営上の」「行政杖の」などの意味もある(旺文社、桐原5500、ジーニアス、センチュリー)。 さて、「義務」「強制」概念の話にもどる。 義務教育も法律で強制されているが、しかし旺文社の例文によると、義務教育には oblige を使っている。 センチュリーを読んでたら、未成年の子供が起こした事故の弁償も oblige である。 桐原だと「大臣は半年に一度、報告書を提出することを義務づけられていた。」の義務づけが was obliged to send in a report である。 まあ、大臣はエリートだからだろう。 センチュリーで「世論の批判のため引退を余儀なくされた」の「余儀なく」もoblige である。まあ政治家という、国家権力者の一員たるものの義務と責任的な意味合いだろう。 しかし東京書籍4500は、compel の例文で「世論が大臣を辞職に追い込んだ。」を 使っており、センチュリーに反している。 まあ、とくに統一的な用法は無いのだろう。 なお桐原は、「その法律が雇い主に、(※ 社員の)健康保険を掛けることを強いる」をcompel としている。「(※ )」内はwikiでの追記。 単語集にはないが辞書によくある典型的な例文が、病気で「~を余儀なくされる」をcompelで表現することである。 センチュリー風に He was compelled by illness to ~なら「彼は病気で~を余儀なくされた」である。 ジーニアス風に His illness compelled him to ~ なら、直訳すれば「病気が彼に~することを余儀なくさせた」だが、無生物主語の和訳が高校の授業で嫌われるので、「彼は病気で」と訳す。英文学とかだと無生物の主語とか普通にあると思うし、普通の日本語でも文学・文芸でなくとも「病気が彼に~を余儀なくさせた」とか通じると思うし、なのに、かたくなに無生物主語の和訳を認めない高校英語教師や塾講師などはどういう了見なのだろうか。理解しがたい。 ジーニアスは、本人の納得の上で余儀なくされる場合を oblige といい、そうでない場合つまり「本人の意思に反してさせる場合はforce や make を用いる」としている。 しかし、ジーニアスの例文では、税金を払う義務も oblige としている。 判断基準が不明である。 やはり、高貴たる者の義務と責任を基準に考えるのが良いだろう。 * 義務 duty, obligation 「義務」「義理」は英語で duty である。ジーニアスで確認したところ「義理」の意味もある。 on duty で「勤務時間中で」。 off duty で「勤務時間外で」 duty は、職務上の義務でも使われるが、道徳的な義務でも使われる。 その他、duty に「関税」の意味あり。桐原4500によれば、「ワインの関税」 duty on wine である。「免税店」は duty-off shop である。 obligation との違いとして、ジーニアスは obligation は「外的な事情から生じる義務」としているが、どうだろうか。ノブレス・オブリジとか、そうではないと思うが。 そう覚えるよりも do one's(myなど) duty で「~の義務を果たす」などの慣用表現で覚えるほうがよいと思う。なお、東京書籍4500と旺文社1900に、例文中に do one's duty がある。 obligation にはそういう平易な慣用表現は無いと思うので。 ---- 「分類する」 sort, classify 「分類する」の使い分けは、あまりハッキリしない。 単語集の例文などを見ると、どうやら書店や図書館などで書籍を「分類する」は classify を使っているようだ。 旺文社では「本は作家の名前によって分類されている。」 The books are classified according to the author's name. 東京書籍では「本はテーマによって分類されている。」 The books are classified according to subject. である。 ジーニアスでも、受動形でなく能動形でだが図書館での本の分類に classify を用いている。 なお、(英和ではなく和英辞典の)ジーニアス和英によると、ごみの「分別」は separate である。 sort には名詞で「種類」という意味もあり、ほぼ、「種類」の意味での kind と似た意味である。 a kind of ~ 「~の一種」の代わりに、a sort of ~ で「~の一種」と言う場合もある。 しかし、別の用法で sort of で「多少の」「いくらかの」という意味もあるので、文脈から判断すること。 class には「等級」と言う意味もあるので、「等級づけをする」なら classify のほうが望ましいだろう。 余談だが、classify には「機密の」の意味があって、旺文社1900で document を見ると、 leak classified document 「機密文書を漏洩する」 という例文もある。 動詞 leak は、液体や秘密などが「漏れる」とか「漏らす」の意味。東京書籍と桐原の3000語レベルにも4500語レベルにも書いてない。桐原5500に書いてある。 桐原5500の例文は秘密を「漏らす」ほうの内容。 なお、文書ではなく情報の「機密情報」については旺文社 leak を見ると、 a secret information と言っている。 桐原4500では、「機密情報」を confidential information と言っている(桐原4500のmake関係の熟語のmake use of ~ の項目)。 2010年にWikiリークという、各国政府などの機密情報をネット公開する海外サイトが世界的に話題になったからか、単語集では leak の例文が機密の漏洩ばかり。だが、もちろん液体などが漏れる場合にも普通に leak は使われる。 なお、wikibooksなど当wikiプロジェクトは、wikiリークとは全く別の組織。「wiki」とはソフト名の一種なので、まったく別の組織でも、wikiソフトを使っていると組織名がwikiなんとかと、似たような名称になることもある。 なおleakの名詞形は leakage であり、「漏れ」「漏出」「漏洩」の意味(旺文社1900)。だが、単語 leak 自体でも名詞の意味もあり、同じような「漏れ」という意味(桐原5500)。 「秘密」については、secret や classify の他に、confidence (カーンフィデンス)という単語もある。 だが、このconfidence は意味が「信頼」「自信」「確信」「秘密」と幅広い。 「信頼」と「自信」と「確信」については和訳でも同じ「信」の文字があるから、まあ連想できるとして(信頼の対象が自己になれば「自信」。「確信」とは、信じている自分への自信。など)、問題は「秘密」である。 信頼しあっている間柄での秘密、的なイメージで覚えるのが良いだろう。 形容詞 confidential の意味なら「内密の」というのがセンチュリー和英にもある。 だが、名詞の「秘密」のことを「内密」とは言わないので、confidence は「秘密」と訳すしかない。辞書もそうなっている。 ジーニアスによれば、「秘密文書」は confidential documents とのこと。 ---- 確認 check, confirm , confident check が「チェックする」である。 英語のチェック check はいろんな意味で使われ、意外と難しいので、日本語でそのまま「チェックする」と意味を覚えてしまうのが良い。東京書籍1800の単語集を見ても、checkの意味の説明で「チェックする」とそのまま書いてある。 check は「確認する」ことにも使われるし、確認したことを証拠に残すためのチェックマーク( ✓ )の記述にも使われるし、「点検する」ことにも使われるし、「照合する」にも使われるし、チェスの王手(いわゆるチェックメイト)にも使われる。このように意外と難しいからか、桐原4500では4500レベルとしてcheckを紹介している。 confirm が「確認する」「身元を証明する」である。(東京書籍4500) チェックについては、チェックリスト check list が英語にもあることを知るべきだろうか。 工場労働など屋内での社会人の点検業務では、可能なかぎり、忘れのないように点検内容を一覧表の list リストにして、それにチェックマーク( ✓ )を入れることで漏らさずにチェックをするという方法がある。 なお、チェックマークを入れるための視覚欄(大きめな □ )のことを、チェックボックス check box といい、これも英語にある(ジーニアスで確認)。 こういうチェックリストやチェックボックスの存在を知っていれば、check の「点検する」や「照合する」の意味も覚えやすいだろう。 語学の勉強というのは、こういうふうに英語以外のビジネス知識なども必要なのである。 checkを「チェックする」と覚えればいいと言ったものの、ただし上述のチェックボックスやチェックリストのように、仕事でも知的な仕事なら check という英語は使うので、覚えておく必要があるだろう。 桐原4500では、「医者が患者の血圧を調べる」という内容の例文でチェック check を使っている。check はそういう専門性の高い用途にも耐えうる単語でもある。 ほか、小切手も check といい、同じスペルだが、説明を省略する。ホテルなどのチェックイン check in , チェックアウト check out も同じ単語だが、説明を省略する。 IT系でも、よく会員制webサイトの登録画面などで説明書きを読んだか確認するためのチェックボックスが、海外サイトではよく使われる。 社会人になって就職するなどして、品質検査の方法などを習っていないので、あまり「チェックとは何か?」とか深入りしても、埒(らち)が あかない。 confirm は、高校生には馴染みがないかもしれないが、IT系では意外とよく、会員制webサイトのパスワード登録の画面などとして、海外サイトではよく使われる。 身元証明の典型的な例文で、誰々の「身元を証明する」という例文があり、 たとえば東京書籍4500では 「彼女の身元を証明する」confirm her identity がある。 旺文社の例文を少し改造して(「郵便局員が私の身元を確認した」という内容)、「彼が私の身元を確認した」なら He confirmed my identity となるだろう。 「裏づける」の典型な例文が、裁判などでの「新たな証拠が彼の話を裏づけた」であり、東京書籍によれば、 「新たな証拠が彼の話を裏づけた」 The new evidence confirmed his story. である。 桐原4500にも、現在完了形であるが、ほぼ同じ英文がある。 confirm の名詞形は confirmation である。旺文社1900にだけ紹介されている(桐原4500と東京書籍4500はconfirmationを紹介していない)。 confident については、別の項目で説明した。confidence は意味が「信頼」「自信」「確信」「秘密」と幅広い。 単語集に共通の例文が見当たらないので、辞書などを購入して読んでほしい。 * 検査 なお、和英辞典で「検査」を見ると、testやinspectなど色々な単語がある。 testはどちらかというと「試験」である。 血液検査が blood test であり、聴力検査が hearing test だし、日本語では「検査」でも英語では test だったりする場合もある。 「テスト」と聞いて、日本の学校の学力試験しか思いつかないのなら、改めよう。英語では普通に、医療や工業などの検査でも test は使われるからである。 inspect は、査察官や検閲官をinsepector と言うので、そういうニュアンスもあるので、検閲・査察のニュアンスが強く、日本の「検査」には1対1には対応しない。 東京書籍と桐原の単語集には inspect がないので、気にしなくていい。米英の行政の事情を知らないと inspector などは理解できないだろう。日本の高校生には不要な知識であろう。inspector という、そういう高校で習わない行政用語があるという事だけを知っておけば十分だろう。 なお、実は旺文社1900に inspect と inspector がある。inspector には「検査官」の意味のほか、「警部」の意味もあるとのこと。 だが、そもそも、英語の文脈においける「警部」とは何かという問題がある。ジーニアスでinspectorを見ると、米では「警視正」、英では「警部」とのこと。まあ、警察組織の現場職での上のほうの人、ぐらいの意味だろうか。 なお、「捜査員」は investigator である。これだけだと難しそうだが、米国のFBIこと「連邦捜査局」が the Federal Bureau Investigation である(旺文社)。 「捜査する」は investigate である。 典型的な例文が 「警察がその殺人事件を捜査している。」 The police are investigating the murder. である(桐原、ジーニアス)。 なお、federal (フェデラル)は形容詞としては「連邦の」という意味であり、名詞としては「連邦」の意味である(ジー二アス)。 もうひとつの典型的な例文が、 「警察がその自動車事故の原因を調査している。」 The police are investigating the cause of the car accident. である(東京書籍、センチュリー)。事故なので、捜査ではなく「調査」。東京書籍でも「調査」になっているし、センチュリーでは「調べている」としている。 なお、「探偵」と「刑事」は detective である。英語では、「探偵」と「刑事」が同じ単語なのである。 動詞 detect の意味は、東京書籍いわく、何か見つけづらいものを「探知」「発見する」などの意味である。センチュリーいわく、隠されているものや悪事などを見つける場合に使うことが多いとのこと。 単語集にはないが、「探知機」が detector である(ジーニアスで確認できる)。ジーニアスいわく、金属探知機は a metal detector である。 この例のように、 detect で発見するのは別に犯罪事件の犯人でなくてもよく、たとえば桐原の例文では病院でのガン(癌) cancer を「発見する」ことを detect としている。 センチュリーいわく「ガス漏れを見つける」は detect a gas leak である。 センチュリーいわく、嘘を見破るのも detect である。東京書籍いわく、「スパイを見破る」は detect a spy とのこと。 locate という「位置する」と言う意味の動詞がある。名詞形 location が「位置」 の意味である。 この locate には、なにかの場所を「突き止める」という意味もある。 東京書籍が detect の単語の次に、locateの例文で「アジトを突き止める」を紹介しているが、著作権の都合があるので本ページでは紹介しない。 なお、アジトは a safe house である(東京書籍)。またアジトとは、犯罪組織や反乱組織などの「隠れ家」のこと。 なお、「隠れる」は hide である。 太陽が雲に「隠れる」みたいな平和的な「隠れる」も、犯人が「隠れる」も、 hide である(センチュリーで確認)。 「太陽が雲に隠れる」 The sun is hidden by clouds である(ジーニアスとセンチュリーに、ほぼ同じ例文)。 なお、「隠れ家」「隠れ場所」には、hide-out という言い方もある(ジーニアスいわく「隠れ場所」)。旺文社では hide-out を「隠れ家」「潜伏場所」と紹介。 hide の活用は hide - hid - hidden/hid である。 さて、conceal という、「隠す」という意味の単語があり、物や秘密を「隠す」場合に使われる。 辞書を見た限り、conceal には、人が隠れるような用法はない。 単語集を見ると、conceal の例文で、感情を「隠す」ような例文もあれば(旺文社)、爆弾が「隠されていた」という例文もある(桐原)。 隠された秘密を「暴く」のは reveal や uncover がある。 ---- 暴露(ばくろ) reveal, uncover, disclose reveal は、意図的に秘密を暴いた場合のほかにも、不注意などで秘密が漏れた場合にも用いる。旺文社の例文も秘密が漏れた場合である。 名詞形 revelation である。 よくある例文は、 「真相を明らかにする」 reveal the truth である(東京書籍に和訳・英文とも同じ文。センチュリーでは「真相を漏らす」と訳)。 そのほか、単語集にはないが、物理的に隠れているなどして見えなかったものが見えるよう現れる事も reveal というが、単語集にないので無視する。 なお、光や危険などに「暴露する」ことは expose である(桐原)。 暴露(ばくろ)は「ばくろ」と読む。「ぼうろ」(×)ではない。 disclose 意図的に秘密を暴いたり、あるいは自分や自組織の秘密を公表したりする場合は、 disclose のほうが適切かもしれない。 固い言い回しなので、暴露や公表や自白などの対象となる秘密は、たとえばセンチュリーでは「彼はスパイであったこと」だとか、「その男の正体」だとか、 あるいはジーニアスでは「真実を新聞に暴露する」とか、なんかそんな感じの秘密ばかりである。 名詞形「公開」「暴露」は disclosure である。 「情報公開」は disclosure of information である(ジーニアス、旺文社)。 東京書籍4500および桐原4500には disclose が無い。 uncover 「真相を明らかにする」 uncover the truth のように使う(東京書籍)。桐原4500には例文なし。東京書籍は巻末おくりなので、解説なし。 uncover の語源は、見れば分かると思うが「カバーを取る」である(ジーニアスで確認)。 なので、単語集にはないが、容器などの「フタを取る」も uncover である(ジーニアス、センチュリーで確認)。 そして単語集(旺文社)にあるが、遺跡などを発掘するのも uncover である(旺文社)。遺跡を埋めている土などをフタに見立てて覚えよう。 ---- 不安 anxiety, alarm 恐怖 fear、 horror 警報 alarm 警戒 alert 警告 warning, caution 旺文社1900によると、alarm の出題番号が549 で、alarm が「不安」「恐れ」を第一義で紹介されており、anxiety (「不安」「心配」)の形容詞 anxious の583番よりも alarm のほうが早い。 勘弁してほしい。 まずalarm は普通、警報器のことである。実際、東京書籍3000では、alarm は「警報器」「目覚まし時計」の意味でしか紹介していない。 桐原4500ですら、「驚き」「恐怖」の意味を紹介しているが、しかしalarmの第一義はあくまで「警報(器)」というのが桐原のスタンスである。 とはいえ、旺文社は大学入試の出題順に紹介しているだけである。つまり、日本の大学入試がロクでもないのだろう。 なお、ジーニアスによると、alarm の第一義は「驚き」「恐怖」である。なお、語源はイタリア語の「武器を取れ」all'armeである。 なるほど、alarm アラームの語尾 -arm が「武器」 arm と同じわけである。 現代では、普通、「驚いた」は be surprised at などを使うだろう。 どうしても「驚き」「恐怖」の意味で使いたいなら、死の恐怖のある文脈で使うと、頭良さそうに見えると思う。 ジーニアスの例文でも、「シカは驚いて逃げていった」の例文で in alarm という用法を使っている。狩人や肉食動物などによる死の恐怖を感じたシカ的な用法。 しかし、ジーニアスによれば、恐怖の意味での alarm は「fear より固い語」である。 fear (フィエア)は「恐怖」「不安」である。まずfear は「恐怖」で覚えよう。4500語レベルではなく、桐原3000と旺文社1400にfearはある。あと東京書籍4500。 典型的な例文が、「高所恐怖症です」であり、ジーニアスと東京書籍にそういう例文がある。 I have a fear of heights. 「私は高所恐怖症だ。」 である。 単語集にはないが、辞書によくある例文が「恐怖で顔が真っ青になる」であり、 turn pale with fear 「恐怖で顔が真っ青になる」 である。センチュリーが pale (ぺイル)である。 ジーニアスだと、white を使い、 turn white with fear 「恐怖で顔が真っ青になる」 である。 なお、形容詞 fearful で「恐ろしい」「恐れている」の意味。 なお、horror で、戦場での死の恐怖も表現できる。日本語の「ホラー」のような幽霊やら悪魔などのオカルト限定のような制限は無い。 fear とスペルの似ている fare(フェア) は「運賃」「なりゆき」であり、意味がまったく違う。 ほか、スポーツの「フェアプレーの精神」などの意味の「フェア」は fair であり、スペルがまったく違う。なお、この形容詞 fairは「公平な」の意味である(桐原4500など)。 商店の安売りなどの「フェア」は、「お祭り」という意味の 名詞 fair であり、フェアプレーの単語とは同音異義語である(桐原4500)。ジーニアスによると、英語以外の言語に feria (フェリア?)という「祭日」を意味する単語があるらしい。商店の安売りの他、ジーニアスによれば「博覧会」や「見本市」も fair である。 米国の外交問題についての専門雑誌で「Foreign Affairs」というのがあるが、affair (アフェアー)とは「出来事」「関心ごと」の意味である。affair は別に恐怖とは関係ない。「Foreign Affairs」は戦争の話題が多い雑誌だが、しかし雑誌名は「恐怖」とは全く関係ないので誤解しないよう。 なお、ジーニアス和英の affair の項目によると、「時事問題」は current affairs である。 「浮気」とか「不倫」とかも affair と言う。恋愛雑誌やらで時々「アフェア」とか言う単語があるのは、この意味だろう。 なお、「外交」を一言でいうと diplomacy (ディプロウマシ)である(桐原4500など)。「外交官」が diplomat である。形容詞 diplomatic は「外交の」である。 さて、「警報器」alarm の典型的な例文が 「火災警報器」 a fire alarm である。これは東京書籍も桐原も紹介している。 なお、スペルの似ているアラート alert は、alert は名詞では「警報」「警戒」の意味だが、形容詞では「警戒している」の意味がある。(桐原5500、旺文社1900) また、形容詞でalert は「油断しない」の意味もある(東京書籍4500)。 単語集の「警戒している」の例文では、よく警察官や兵士などの警戒が出てくる。 警察官の場合なら、 The police officer is alert ・・・ で、「警察官は警戒している」の意味になる。 つまり、 ~(人) be alert の語順になる。 warning は「警告」である。翻訳の都合で「警報」と訳したほうが自然な場合もあるが、warning の意味としてまず第一に覚えるべきは「警告」である。 東京書籍で「洪水」 flood を見ると、「洪水警報」 flood warning がある。辞書 warning では確認できなかったが(ジーニアスとセンチュリーで、warningとfloodの両方を確認)、しかしセンチュリーいわく「空襲警報」が air-raid warning なので、たぶん洪水警報も合っているのだろう。 warn は「警告する」であり、医師が患者に「酒を飲みすぎないように警告する」とか(センチュリー)、嵐の接近を警告するとか(センチュリーとか)、そういうニュアンスである。 warn ◯◯(人) of ~ で「◯◯(人)に~を警告する」である。 記法を変えれば、 warn A of B 「BについてAに警告する」 です(桐原、旺文社、東京書籍)。 東京書籍が紹介していますが、 warn me of the enemy 「敵がいるぞと私に警告する」 です。 なお桐原は、喫煙の危険性(risk)を警告する例文です。ジーニアスは、旅路か何かの危険(danger )を警告する例文です。危険という概念で統一的に説明できそうですが、直接的に言い回しを覚えたほうが早いでしょう。 of はよく「~の」と中学で教わりますが、それだと意味が通りません。 さて、inform 「(情報などを)知らせる」という単語にも、 inform A of B 「BについてAに知らせる」 という語法があります。 桐原が inform him of the result 「彼に結果を知らせる」 のような例文を紹介しています。 なお、典型例の言い回しは、 Please inform me of the change in ~ 「~の変更を私に知らせてくれ」 です(旺文社、センチュリー)。 ともかく、warn A of B は inform A of B と関連づけて覚えましょう。 桐原がそういう覚え方を進めています(warn と inform を同一ページで教えている)。 ただし、東京書籍のようなcrisis (危機)など関連語の紹介は、桐原では同一ページにないですが。どの単語集も、一長一短です。 なお、東京書籍3000には、なんと inform の項目がありません。information はあるのですが。 なお、information は数えられない名詞なので複数形が無いので、「2つの情報」は two pieces of information と表す。「ひとつの情報」は a piece of information です(東京書籍3000)。 桐原は、remind A of B(思い出させる) や convince A of B(納得させる、確信させる) や inform A of B と warn A of B や suspect A of B (疑う)などをまとめて、 「関連の of」という概念を提唱しています。 ただ、そう解釈しなくても、 このうち、「警告する」warn と「思い出させる」remind も情報提供の一種ですので、 「情報提供の of 」とでも言える概念で、 remind A of B と inform A of B と warn A of B をまとめられます。 だとすると、暗記するのは残りの convince A of B (Bを納得/確信させる)と suspect A of B (B(容疑など)の疑いをかける)だけに減らせます。 このうち、 convince は、他人に何かの納得をさせる際に、説得などの情報提供が行われるでしょうから、広い意味での「情報提供の of 」と言えるかもしれません。暗記の負担がこれで減ります。 だとすると、残りは suspect A of B 「AにBの疑いをかける」です。 この場合、なんの情報提供もしていません。 また、of B の部分は形容詞的な意味です。 made of ~ で、「~を材料に作る」とかの意味であり、完成品を一目で見て材料が分かるなら made of です。 材料が、完成品を一目みてもわからない場合は made from ~ です。 この suspect A of B と made of B の共通する「of B」で、「性質の of」とかの概念を考えてもいいかもしれません(英語学でどうかは知りません。自己責任で)。 ほか、英文法で、「It is 形容詞 of 人」と「It is 形容詞 for 人」の使い分けなどがあります。人の性質を言う場合は「of 人」です。これから類推する方法もあるかもしれません。 まあ、最終的には suspect A of B 「AにBの疑いをかける」を直接的に覚えるしかありません。 warn ◯◯(人) against ~ing で「◯◯(人)に~しないように警告する」である。 たとえば、よくある例文が、「彼は道路を横断しないように私に警告した」(ジーニアス)あるいは川を渡らないように私に警告した(東京書籍)、であり、 He warned me of against crossing the river. 「彼は川を渡らないように私に警告した」 である。 動詞および名詞の caution は、動詞としては、たとえば医者などが肝硬変の患者に「酒を飲むな」と注意・警告するときの「注意する」「警告する」が caution である(桐原5500)。東京書籍4500の例文も、薬の取扱いの注意を caution としている例文。 ただし、辞書では、警察などの警告・注意もcautionである。このため、warningとの区別は、なかなか難しい。 ジーニアスが言うには、cautionのほうがwarningよりも軽いとのこと。 形容詞 anxious (アンクシャス)は「心配している」「不安に思っている」である。 be anxious about ~ で「~を心配している」である。 He is anxious about ~ なら「彼は~を心配している」である。 よくある例文が、「彼は試験の結果を心配している」であり、東京書籍とジーニアスにそれに似た例文がある、 He was anxious about the result of exam. 「彼は試験の結果を心配している。」 となろう。(wikiオリジナル) ジーニアスだと、母親視点の「息子のテスト」だが、まあこういう例文がよくる。 be anxious for ~ は「~を切望している」である。 桐原の「新しいコピー機が欲しくてたまらない」なら be anxious for new copy machine である。 ジーニアスだと(私は)「新しいコンピュータが欲しかった」なので、 I was anxious for a new computer. 「新しいコンピュータが欲しかった。」(※ ジーニアスanxious例文から引用) である。 名詞形 anxiety で「不安」「心配」「切望」である。東京書籍4500には「切望」が書いてないが、しかし桐原4500と旺文社1900には切望が書いてある。 なお、 eager (イーガー) は「熱望している」である。切望 anxious とは、ややニュアンスが違う。 ---- 武器・兵器 weapon, arm 大量破壊兵器は weapons of mass destruction であり、略称は WMD である(桐原4500、旺文社1900、ジー二アス)。 また、核兵器は nuclear weapons である(桐原4500、旺文社1900、東京書籍、ジー二アス)。 だいたい、arms だと、「腕」(うで)と まぎらわしい。 兵器には、なるべく weapon を使うのが無難だろう。 なお、動植物の角(つの)や爪(つめ)や刺(とげ)なども、weapon である(ジー二アス)。 weapon は、日本では「兵器」と訳される場合が多いが、しかし英語では weapon は広く攻撃のための道具を表す用語である。 単語集にはないが、山川の英語版・世界史にあった単語で、 rearmament が「再軍備」である(ジーニアス)。ナチスによるドイツの「再軍備」みたいな文脈で rearmament を使える。 ほか、disarmament が「軍縮」である。啓林館 Vision Quest I(P.111) が「軍縮」disarmament を紹介しています。 なお、名詞 army は「陸軍」「軍隊」の意味です(桐原3000、旺文社1400(緑)、東京書籍4500)。 「海軍」は navy (ネイビー)です(東京書籍、桐原)。 「空軍」は air force です(東京書籍、桐原)。 「軍事の」は military です(東京書籍、桐原)。 陸軍と海軍も空軍もまとめて「軍隊」と言いたい場合、army だと陸軍とまぎらわしいので、military force という場合もあります(東京書籍)。 ただし、「軍事力」も military force です(桐原)。 このため、翻訳などの際は、文脈にあわせて、うまく訳してください。 軍「隊」との混同を嫌ってか、単語を power を使って「軍事力」は military power という用法もある(ジーニアス military、センチュリー power)。 ほか、「軍隊」を the armed forces と言ってもいい(桐原、forces ) 「兵士」は soldier (ソルジャー)です(東京書籍、桐原)。 東京書籍いわく、さらに「将校」(しょうこう)は officer (オフィサー)です。 とはいえ、「将校」(しょうこう)と言っても、何のことだか分からないのが普通の高校生でしょう。 軍隊の上層部や、将来的にそうなる見込みの高い軍隊の大学を出た軍人や、あるいは同程度に一定以上の階級の高い指揮官のことを、将校と言います。 最下級の階級である兵士は当然、将校ではないです。 「兵士長」とか「軍曹」とかの現場の下の方の中間管理職も、ふつうは将校とは言わないです。ただし、文脈によっては、「軍曹」なども将校という場合があるかもしれません。 『「将校」という単語くらい知っとけや。日本史の勉強すれば出てくるんだからさ~』というのが、東京書籍の心のさけびでしょうか。 戦後の自衛隊ではあまり「将校」とは聞かなくなりましたが、海外の軍隊の説明だと今でも使います。 戦前でも、よく二・二六事件とかで「青年将校」がどうのこうの、という解説を読みます。こういう英語を知っていると、英語力だけでなく日本史などの知識も披露できて、頭よさそうに見えます。 桐原いわく「兵役」(へいえき)は military service です。 「英語を勉強するなら、こんくらい知っておけや」という桐原の心のさけびです。 まず、諸外国でもヨーロッパなどで今でも徴兵制、つまり兵役があります。2020年代でも、スイス、オーストリアは徴兵制があります。 ここでいう service とは、公共の下僕のような意味もあるかと思います。 たとえば「召使い」は英語で servant (サーバント)ですが、なんと単語集に書いていません。 桐原の単語周いわく、serve は「仕える」とか「提供する」とかの意味です(桐原4500)。 今ではネットのサーバー server とか、派生の名詞が使われています(ジーニアス、センチュリー)。 ただし、ネットの情報提供については、「プロバイダー業者」などというように provide が「(情報などを)提供する」の意味で好んで使われる場合もあります(桐原)。 交通インフラや電力インフラなどの公共インフラなどの提供も service です(ジーニアス)。慈善事業も service です(センチュリー)。 「兵役」(へいえき)は military service を覚えるときも、そういうのと関連づけて覚えましょう。 ---- 安売り・特売 フェア、セール、バザール sale のみ高校英語 商店の安売りなどの「フェア」は、「お祭り」という意味の fair であり、フェアプレーの単語とは同音異義語である。ジーニアスによると、英語以外の言語に feria (フェリア?)という「祭日」を意味する単語があるらしい。商店の安売りの他、ジーニアスによれば「博覧会」や「見本市」も fair である。 なお、セールは英語でも sale で「安売り」(桐原3000、東京書籍3000)や「特売」(旺文社1200)や「バーゲンセール」(東京書籍3000)の意味がある。sell とは別に、sale (セール)「販売」という単語がある(東京書籍3000、桐原3000)。 なお、セールスポイントは英語で selling point である(旺文社1200(黄色)、ジー二アスで確認)。 セールスポイントは和製英語。 なお、単語集にはないが、セールスマン(販売員)は英語でも salesman であるが、男女平等の観点から salesperson という表現が米英では好まれるだろう(ジー二アス)。 salesman は、外交販売員(日本でいう「セールスマン」)にも使われるが、英語では単なる店員も salesman で表せる。 複数形 sales で「売り上げ高」の意味もある(桐原3000)。なお桐原では「売上高」3文字ではなく「売り上げ高」5文字の表記。 単語集にはないだろうが、バザーとの違いについて触れる。 ジーニアスによると、英語の bazaar は、慈善などの目的のために特別に催される市場である。だから教会などがバザーするわけである。しかし、イランなど中東の商店街のことも bazaar である。英語の単なる「雑貨屋」のことも bazaar という。 バザーを「安売り祭り」みたいな意味で使うのは、どうやら和製のようだ。 啓林館 Vision quest( P.62 )で、ディスカウント discount 「値引き」、バーゲン bargain 「お買い得品」などが紹介されていました。 ---- 必要不可欠 不可欠な essential, vital, indispensable 必要な necessary 搾る squeeze, extract 搾取する squeeze, exploit 桐原4500に vital の意味は「生命の」とあるので、まずこれで覚えよう。 また桐原4500いわく、vitality の意味は「生命力」である。 入試では vital の他の意味の「不可欠だ」「活気のある」などが問われるかも知れないが、まずはvitalの単語のイメージが生命力であることをつかもう。 vial → 「生命に必要」→「不可欠」という連想、 および vital → 「生命力にあふれる」→「活気のある」という連想、 で覚えれば、暗鬼の負担が減るだろう。 旺文社1900の例文で、「防衛戦略が国家の安全保障にとって不可欠だ」という例文で「不可欠」を vital としている例文がある。 これだって、「国家の生存に必要」→「国防に不可欠」みたいなイメージで把握できるだろう。 なお、桐原4500は「自転車が生活に不可欠」で不可欠がvital、東京書籍4500は「外国語が教育に不可欠」で不可欠がvital、という内容。 ともかく、vital は「活気のある」という意味もあるが、「生命の」とか「不可欠な」のような意味もある。 別の単語の話をする。 もし、単に「活気のある」「元気はつらつな」と言いたい場合は、形容詞 vigorous (ビゴラス)という単語でも一応は表現できる。東京書籍は「活発な」「力強い」と紹介しており、「活発な運動」 vigorous exercise という例文がある(東京書籍4500巻末)。ただ、辞書で 名詞形 vigor (ビガー)や 形容詞 vigorous の用例を見ると、「激しい(スポーツなどの)運動」とか「猛烈な抗議」とか、やや意味合いが強い用例も多いので、注意が必要であろう。 Z会のTOEIC対策本では、同じ vigorous exercise という単語を、「激しい運動がもとで、疲労で倒れた」という内容の文章で用いている<ref>松本茂 監修『速読速聴・英単語 Core 1900 ver.4』、Z会、2014年3月10日 ver.4第7刷発行、P.382</ref>。 このように、vigorous exercise は、いい意味でも悪い意味でも使う。 肉体的に元気のあるだけでなく、精神的にも「精力的な」という表現でも vigorous が使える。 なお、「猛烈な抗議」などの猛烈でも vigorous あるいは名詞形 vigor を使う(ジーニアス、センチュリー)。 protest a plan with vigor 「計画に猛反対する」(センチュリー) make a vigorous protest 「猛烈な抗議をする」(ジーニアス) である。 essential は「不可欠な」という意味。 だが、「エッセンシャル・オイル」essential oil という芳香性の油を考えれば分かるように、なんだか抽出物みたいなイメージ。 名詞形 essence 「本質」「エキス」で覚えるほうが理解しやすいだろう。 (なお、名詞 extract にも「エキス」「抽出物」「抜粋」の意味がある。extract は動詞として「抽出する」の意味もある。(東京書籍が動詞を紹介。旺文社は名詞も紹介。桐原は紹介せず)。動詞と名詞とで発音が異なる。名詞は エキストラクト。動詞は イクストラクト。「抽出」「摘出」の行為自体は extraction という名詞である(旺文社)。) あるいは、「必須アミノ酸」が essential amino acid である(ジーニアスで確認)。 抽出ついでに言うと、abstract も「抽出」という意味(桐原4500巻末)。abstract には「抽象的な」の意味もあるが、まずは抽出の意味で覚えよう。というか日本語でも、「抽象的」の「抽」の文字は、「抽出」の「抽」の字である。なお、冒頭のab-は、ここでは分離を意味する接頭辞。absent「欠席の」のabとabstractのabは同じ意味(桐原4500)。 エッセンシャルの話に戻ると、たとえば、生物学書の『キャンベル エッセンシャル生物学』 "Campbell Essential Biology" という500ページ以上ありそうな分厚い生物学書がある。(なお、amazon米国版では何故かこの本が18歳以上が購入禁止なのでリンクは紹介しない。) エッセンシャルというのは、そういう感じの意味。 桐原では、「食事は不可欠だ」みたいな例文でも essential を使っている。 なお、「食事」は英語で meal (ミール)である(essential の文に合うかどうかは知らない)。 食事しないと死ぬので、生命維持の観点では vital でもあるが、しかしそういう死を防ぐためのものでも essential で言い表す場合もある。 さて、単語集によくある例文が、「~は健康に欠かせない」 be essential for good health  であり、東京書籍と桐原がそうである。 東京書籍だと「運動は健康に欠かせない」、桐原だと「食事は健康に欠かせない」的な内容である。 運動 exercise なら、 Exercise is essential for good health. 「運動は健康に欠かせない。」(東京書籍4500より引用) である。 「搾る」の extract を squeezeのニュアンスの違いについて。 extract は「抽出する」が第一の意味のようなものである。 -tract が「引っ張る」という意味でもあることから想像できるように(センチュリー)、extractは、目的物を、自分の方向に向かってこさせるイメージである。 だからextractで果汁を「しぼる」のは、その手段にすぎない。 だから、濃縮エキスの抽出のような、搾るだけでは不可能なことも、extract なら出来る。 ほか、薬品などを使って何かの成分を抽出するのも extract である(ジーニアスで確認)。 ほか、歯科医が歯を抜くのも extract である(センチュリー、ジーニアス)。 パソコンのファイルの圧縮・展開でいう「展開」も extract です。 いっぽう、extract には「抜粋する」の意味や、抜粋して「要約する」という意味もあります(センチュリー)。 抜粋すると情報量が減るのに、圧縮ファイルを展開すると情報量は増えます。 妙に感じるかもしれません。 しかし辞書でextract を調べると、秘密などの情報を「聞き出す」「暴き出す」のような意味もあります(センチュリー)。圧縮していて読み取れない情報を「暴き出す」ようなイメージでしょうか。 もっとも、最近のパソコンでは、オペレーティングシステムが高度なので、圧縮されたままでも読み取りのできる場合もありますが。 逆に、圧縮・展開の「圧縮」は compress です。 日本でも、機械などの空気圧縮機でいうコンプレッサーなどの外来語で有名です(ただし、高校生には目にする機会(チャンス)がないかもしれません)。しかし意外なことに単語衆にはcompressはありません。 高校・中学でIT教育が必履修になるなどしてもう年月も経ってますので、どうせあと10年か20年したら「圧縮」・「展開」などIT用語も英単語に加わるでしょうから、先手を打って、このページにまとめておきます(ならないとしても、もしその場合は実務では役立たずなので未来の高校英語の単語衆に価値ないので、価値ない単語集に従う必要ないです。私たちが目指すべきは、大学合格する英単語ではなく、仕事で使える英単語です。仕事を無視した英単語学習をしても最終的に淘汰されるだけの弱肉強食です)。 英語だと、たとえばジーニアスでは、自動車エンジンにおける空気の圧縮のことを compress で表現しています。 なお、空調機のエアコンの「コン」はコンディショナーの略ですので、混同しないように。 センチュリーを見ると、コンピュータ用語のファイル圧縮も compress だと書いてあります(センチュリー、ジーニアス)。 ほか、綿(わた、めん)などを圧縮して小さくするのも compress です(センチュリー)。 ややこしいことに、compress にも、話を「要約する」という意味があります(センチュリー、ジーニアス)。 いまどき、「要約」はsummary でしょうから、compress は綿やファイルなどを「小さくする」(つまり圧縮)の意味で覚えるのが良いと思います。 まとめると、 ファイルの「圧縮」は compress です。 ファイルの「展開」は extract です。 さて、「しぼる」の話題にもどります。 squeeze は、にぎるように力を内側に押し付けるイメージである。だから squeeze で、資金を「圧迫する」なども表現できる。 では、具体的に extract と squeeze のニュアンスの違いを見ていこう。 「エキス」や「抽出する」のextract について。 extract juice from a orange で「オレンジからジュースをしぼり出す」「オレンジの果汁を搾る(しぼる)」 の意味(センチュリーや旺文社)。 文脈によっては、oranges ではなく an orange でも構わない。ジーニアスでは、レモンの複数形 lemons から果汁を搾り取っている。 「搾る」は、squeeze もある。 果物などをしぼって果汁をとるのが典型的で、 squeeze a lemon 「レモンをしぼる」 が典型的(センチュリー、旺文社)。 果汁を明示したい場合 「オレンジから果汁をしぼる」squeeze juice from an orange と言える(東京書籍4500の巻末。ジーニアスだと lemon で似た例文)。 squeeze lemon juice on ~(食品など) で「レモン果汁を~にかける」である(桐原4500、ジーニアスに似た例文)。 「労働者をしぼりとる」「労働者を搾取する」のような表現でも、squeeze を使える(桐原5500、センチュリー)。 なお、いわゆる「ブラック企業」のような会社(労働者を低賃金で長時間働かせる工場など)は、英語では sweatshop (スウェトシャプ)といい、「搾取工場」などと訳される(旺文社1900)。sweat (スウェト)は「汗」という意味の名詞である(桐原4500)。東京書籍4500は sweat および sweatshop を紹介せず。 なお、動詞 exploit 「搾取する」である(旺文社1400(緑)、桐原4500)。 典型的な例文が、 exploit one's workers 「労働者を搾取する」 であろう(ジー二アス、東京書籍、旺文社に似た例文)。 ほか、exploit には、たとえば地熱発電や自然資源などといった資源などを「開発する」の意味や(旺文社1400、桐原4500)、機会などを「利用する」という意味もある(東京書籍4500)。 家計のやりくりなど、なんらかの資金のやりくりなどで、お金をなんとか「絞り出す」というのにもsqueeze は使える(センチュリー)。 ただし、ほかの意味で squeeze には予算などを「圧迫(あっぱく)する」という意味もある(ジーニアス、センチュリー)。 資金のやりくりと、資金の圧迫では、ほぼ逆の意味になるので、読解のさいには文脈からどちらなのかを読み取ろう。 squeeze には「押し入る」「押し込む」や、人ごみや席などへの「割り込む」「割り込ませる」という意味もあり(センチュリーが押し入りと割り込み。ジーニアスは割り込み のみ)、旺文社が「押し入る」を紹介している。「圧迫する」から「押し入る」などを連想しよう。 indispensable 「不可欠な」は桐原5500巻末や旺文社1900本文と東京書籍4500巻末が紹介しているが、これを直接に覚えるよりも前に、まず、銀行などの「現金支払い機」dispenser (ディスペンサー)を覚えよう(ジーニアスで銀行の「現金支払い機が dispenser だと確認)。 動詞 dispense は、「分配する」とか、機械が「出す」という意味である(ジーニアス、センチュリー)。 なので、コーヒーなどの自動販売機も dispenser である(センチュリー)。 で、形容詞 dispensable は「それほど必要ではない」「なくても済む」の意味である。 「自分はなくても済むので(dispensable なので)、他人に分配できる(dispense できる)」→「分配する機械がデイスペンサー」とでも、こじつけて覚えよう。 で、in- はここでは否定の接頭辞なので、 indispensable 「必要なので分配するわけにはいかない」→「つまり、必要不可欠」→単に「必要不可欠」と言えば済む のように indispensable を覚えるのが、関連の語彙も覚えられて一石二鳥だろう。 旺文社1900だけ、indispensable の項目で、派生語の dispense 「分配する」「施す」「~なしで済ませる」を紹介している。 桐原5500は、indispensable の類義語で、essential や integral を紹介している。 be indispensable for ~(ないと困る物) 「~は必要不可欠である」 のように使う(旺文社1900、東京書籍4500)が、文脈によっては for でなく別の前置詞や接続詞の場合もある(桐原4500)。 ---- 要約 summary, brief summary (サマリー)が「要約」の一般的な語でしょう(特に出典は無い)。 要約のまとめ方や業界によって、outline (アウトライン)や brief (ブリーフ)など、別の言い回しのほうが好まれる場合もあります。 「要約する」の意味が、extract 、compress 、summarize などの単語があります。要約のことを summary (サマリー)と言います。サマリーの動詞形が summarize (サマライズ)です。 ほか、brief も、名詞では「簡潔な説明」の意味、動詞では(読みやすいように手短かに簡略化された説明にする、という意味での)「要約する」の意味です。 桐原4500が brief を「要約」の意味で紹介しています(桐原4500)。 in brief 「手短かに」 の意味です(桐原、旺文社)。 また、 keep it brief 「手短かにする」 です(東京書籍、旺文社)。it の部分は、必要に応じて適した目的語に変えます。 名詞形 briefing は、「簡潔な説明」の意味もありますいが、「事前の打ち合わせ」の意味でも使われます(旺文社)。 compress と extract は、現代ではコンピュータ上の処理で使うし、現代の商業の著作物の大半はパソコンで作られているので、やや使用の歳には注意が必要かもしれません。 summarize のほうがいいかもしれません。 一方、 summarize もまた、辞書や単語集では「要約」を名詞 summary と簡単に言いますが(桐原4500、旺文社1900)、実はサマリー summary と日本語の「要約」は微妙に違います。 英語では、1~2行ていどの短文で短くまとめることを summary と言うこともよくあります。brief だと「記者会見」など別の意味に誤解されるからか、本来なら "brief" というべき単なる1~2行ていどの事実報告でも英米では summary でそういう1行程度の事実報告を言い表す場合もあります。 brief だと、たとえば press briefing が「報道向け説明会」で使われたり(ジー二アス)、briefing session が「定例記者会見」だったり(ジー二アス)、ややニュアンスが「要約」とは異なります。全体像を理解しやすくするよりも、brief は短時間に発表することがニュアンスにあります。 summary execution で「即決処刑」である(ジーニアス)。 要約を意味する単語 summary には、形容詞として「略式の」という意味もある。execution は「処刑」の意味です。 この例のように、summary は日本の「要約」とは、ややニュアンスが違う場合もある。 さて、米英の外交官の著作した回顧録(かいころく)の出版物で読んだのですが、 外交官は、定期的に サマリー summary という1~3行ていどの事実関係の報告を本国によく送るするらしいです。 日本語では、新聞やテレビのニュースにおける「短信」(たんしん)が短いので、近いでしょうか。 大使館の職員でもありますから記者会見(ブリーフィング)とは区別する必要もあるでしょうから、brief ではなく summary でそういう短いを言うのも合理的でしょう。 なお、「回顧録」(かいころく)は英語で memoir (メモワール)です(旺文社1900、ジー二アス)。単語集では、旺文社1900にのみあり、受験英語としてではなく英検準1級対策として紹介されている語です。桐原4500・5500および東京書籍4500にはありません。 外交官とか、この手の報告では、分析は極力交えず、事実だけを報告します。分析は、別途、本国のほうで行ってもらうのです。こうすることで、外交官は情報収集にのみ専念できます。 外交官は滞在先が友好国とは限りませんし、(自国以外との)紛争当事国などの場合もあります。もし友好国でない場合、もしかしたら滞在先の警察や軍隊によって通信が盗聴されたりしているかもしれません。そういう環境で、あまり分析を外交官側で行うべきではないでしょう。 なので、ともかく summary のほか、日本語には「要約」の他に適切な表現があまりないので、summary の訳は「要約」で通じますし、辞書や単語衆にも「要約」だと書いていますし、「まとめ」でも構いません(旺文社)。 「要約」のほか、ジーニアスには「概略」や「大要」、センチュリーには「概要」や「大略」なども書いてありますが、しかし上述のように、1~2行ていどに縮めて報告する書類形式というビジネスなど実務での背景がありますので、いちばん短い感じのしそうな「要約」が無難な表現でしょう。 実際、単語集にも、名詞 summary は「要約」で紹介されています。 これから紹介するのは高校範囲外の単語ですが、英語では、1行要約ではなくて、せいぜい5~8行くらいの文章で要点を列挙して書いたのは outline (アウトライン)などと言います(※高校の範囲外)。 アウトラインを書く場合も、できえば箇条書きにするなどして(ジーにアス)、全体構造を見やすくする必要があります。 ジー二アスには行数の条件は書いてないですが、普通、箇条書きされた説明は、長くて5~8行ていどのものでしょう。1行の箇条書きとか意味不明ですし、100行の箇条書きとか論外です。 ジーニアスいわく、そういう箇条書きされたものが本来のアウトラインとのことです。ジーニアスでは「概略」「概説」、センチュリーでは「概要」「あらまし」を outline 訳にしています。 outline の訳語を覚えるよりも、『箇条書きする等して手短かにまとめたものを「アウトライン」という』と覚えたほうが応用が利くでしょう。 仕事の報告での情報のやりとりなどで、もし1行要約だと短すぎて情報不足なときに、アウトラインによる報告が役立ちます。そういう使い分けをするのが大事です。 もしかしたら英米人のなかには、そういう使い分けをしない人もいるかもしれませんが、そういう人はレポートの書き方を知らない人であり、つまり知的レベルの低い人なので、相手する必要はないです。 まとめると、summary が「要約」の一般的な語だとみなせるでしょう。 要約のまとめ方や業界によって、outline や brief など、専用の言い回しのほうが好まれる場合もあります。 ---- 重要 crucial, important 決定的な crucial , decisive 4500語レベルの単語集に crucial (クルーシャル)と言う単語があって「決定的な」「主要な」という意味である。 だが、decisive という「決定的な」の意味の単語がある。(東京書籍4500に単語だけ紹介されている。旺文社1900の巻末の章に、単語だけ「決定的な」「断固とした」と意味が紹介されている。桐原4500にはない。桐原5500にある。) ジーニアスいわく、「決戦」は a decisive battle である。 ジーニアスの例文では、decisiveは「将来を決定する」という意味もあると説明している。 東京書籍4500の crucial 項目の例文で、「そのオーディションに合格することは私の将来にとって決定的な意味をもっている」とある。 ジーニアスでcrucialを見たら、「重要である」という意味であり、例文が「我々が決勝戦に勝つには、彼の支えが重要である。」の「とても重要である」が crucial である。なお、「決勝戦」はその項目を見る限りは the final match である。 crucial の意味で、桐原と東京書籍には「決定的な」と書いてあるが、正直、decisiveのような断固とした気迫が足りない。「決戦」で負けると死ぬが、オーディションで負けたり「決勝戦」で負けても死ぬわけでもあるまい。 あまり論理的ではないが、decisive は、おそらくスペルが同じく"d"から始まる determination 「決心」「決意」の影響を受けてきたのだろうか。 動詞 decide と動詞 determine の違いについては、別セクションで語る予定。 crucial の意味は「非常に重要な」(桐原)で十分だろう。旺文社1900に至っては、「決定的な」の意味は紹介せず、crucial では「重要な」として紹介していない。 まあ、important よりかは重要度が高いつもりのニュアンスでしかないだろう。 旺文社1900では「書類を確認する際は注意することが重要である。」でcrucial を用いている。 桐原4500では「国際貿易はこの国の発展に非常に重要だ。」で crucial を用いている。 まあ、センチュリーcrucial の例文にあるように「彼のホームランは我々の勝利を決定的にした。」でcrucial を用いているように、命をかけるほどでもない野球の試合でも決定的な瞬間はあると思うので、そういう場合は crucial を使うのも良いだろう。 桐原5500にcrucial で「命にかかわる」の意味を紹介しているが、しかしジーニアス英和およびセンチュリー英和では確認できなかった。 そもそも vital という「生命維持に必要な」の意味の形容詞がある(センチュリーで確認)。 そもそも「重要」という概念自体、言葉の割には、vital のような生命への必要不可欠さが足りない。 ---- 外国の alien, foreign 米国の外交問題についての専門雑誌で「Foreign Affairs」というのがあるが、affair (アフェアー)とは「出来事」「関心ごと」の意味である。affair は別に恐怖とは関係ない。「Foreign Affairs」は戦争の話題が多い雑誌だが、しかし雑誌名は「恐怖」とは全く関係ないので誤解しないよう。 「Foreign Affairs」は直訳すれば「外交の関心事」みたいな意味の雑誌名であろう。 なお、日本の「外務省」も英語版ホームページでは Ministry of foreign affairs である<ref>[https://www.mofa.go.jp/index.html "Ministry of Foreign Affairs of Japan" ] 2022年5月4日に確認. </ref>。 海外旅行とか海外出張とかでは必要な単語のひとつなので、頭の片隅に入れておこう。 ministry とはイギリス英語で省庁のこと。ただしアメリカでは、省庁を department と呼んでいる。 つまり日本政府は、「省庁」についてはイギリス英語を採用。 デパートなんて百貨店っぽい。なお百貨店は英語で department store である。 なおイギリスでも、新設の省庁については department を用いることもあると、ジーニアスは説明している。 さて、「省庁」の呼び名には、あまり深入りしてほしくない。 それより重要なのは、「大臣」 minister である。 大臣のことを minister という。単語集では「大臣」minister の項目に書いてあるが、「外務大臣」は foreign minister である。 今の単語集にはあまり書いてないが、昔はよく「総理大臣」は英語で the prime minister だと高校で習ったものである。いちおう、東京書籍の例文中に「総理大臣」the prime minister がある。桐原には書いてない。 説明の都合上、先に「省庁」 ministry を紹介したが、覚えるなら先に「大臣」minister から覚えたほうが良い。 語源としても、ラテン語で「従者」とかのことをミニステルと言うので、先に「大臣」→「省庁」の順番で単語ができたと考えるほうが合理的である。ジーニアスにも、ラテン語とは買いてないが、「召使い」がminister の語源だと書いてある。 prime については、主要という意味での「第一の」という意味である。センチュリーにある訳語だが、「第一位の」というのがニュアンスに近いだろう。 primeの語源はもともと、カトリックの日課の「最初の」礼拝のこと(ジーニアスで確認)。 primeはこういう意味なので、単に一番目であるだけでなく、さらに重要性の高いものに使われるというニュアンスがある。 ただし、実際の用例では、国家一番や世界一番でなくとも、たとえば肉が美味しい場合でも「極上の肉一切れ」 a prime cut of meat という風にも使う(ジーニアスで確認)。センチュリーにも似た例文がある。 「全盛期」、「絶頂期」という意味もあり、 in prime of his life(またはcareer) 「彼の人生(またはキャリア)の全盛期」みたいにも使う。 「全盛期」には、ほかに短い類義語が無さそうである。和英辞典で「全盛」を見ると、prime のほかに pride とか summer があるが、しかし英和でそれらの項目を確認しても、ニュアンスが違う。pride のほうは、pride of place という語句で「最高位」「最上位」という意味だし、summer は人生における「壮年」などの比喩でしかない。 名詞 foreigner は「外国人」 である。ただ、英語ではこの言い方は差別的な意味合いがあるとのこと。桐原3000いわく、なるべく、たとえば「カナダ人」 Canadian など具体的に言うべきとのこと。 alien alien (発音: エイリアン)は「宇宙人」という意味があるので、なんとなく、あまりよくないイメージを読者は持ちがちかもしれないが、しかしジーニアスで確認すると、法律上の用語で「外国の」「異国の」という用法がある。 センチュリーによると、市民権をもたない外国人のことを alien と言うとのこと。 alien は、名詞も形容詞も同じスペルの alien である。 名詞 alien は「外国人」「宇宙人」の意味。 形容詞 alien は「外国の」「外国人の」の意味と、「異質の」「なじみがない」の意味。 よくある例文が「その習慣には、なじみがない」で、習慣 custom に alien で「なじみがない」という内容の英文を東京書籍とジーニアスで見かけた。 語法は、 ~(習慣など) is alien to □□(人々) で、 「~(習慣)は□□(の人々)には、なじみがない」の意味。 たとえば、 alien to us なら「私たちにとって、なじみのない」という意味(ジーニアスおよび桐原)。 ---- 国内の domestic, internal (※範囲外) 「国内総生産」GDPは gross domestic product のことである。domestic violence は「家庭内暴力」である。 「国内の」という意味での domestic が、「外国の」 foreign の対義語である。 domestic ⇔ foreign さて、 「国内の」 を意味する形容詞 internal は、「国内問題」というとき internal affairs という(ジーニアス、センチュリーで確認)。 なお、数学の図形の幾何学の、「内角」も internal angle である(ジーニアスで確認)。 internal には医療などで「内服の」や「体内の」などの意味もあるが、共通の例文が確認できなかったので、説明を省略する。 なお外角は external angle または exterior angleである(ジーニアス和英で確認。英和にはない。和英)。 なお、「幾何学」は geometry (ジオメトリー)である(旺文社1900)。なお「地理学」はgeography (ジオグラフィー)である(桐原4500、東京書籍4500)。「地形」や「地勢」などもgeography である(東京書籍)。 geo- (ジオ)というのは「地球の」とか「地理の」という意味だが(ジーニアス)、幾何学にも使う。おそらく、古代のヨーロッパでは幾何学の知識を活用して、地図などを作成していたのだろう。 「ユークリッド幾何学」は英語で Euclidean geometry である(旺文社1900、)。「ユークリッド幾何学」というのは、日本では中学の数学で、図形の証明として習う、あの理論の体系のこと。「タレスの定理」とか「中心円の定理」とか、あそこら辺が「ユークリッド幾何学」。紀元前のギリシアの数学者エウクレイデスの名前にちなんで、英語読みでユークリッドになる。 なお、X-Y座標を使って計算する座標幾何学は、ユークリッドではなく「デカルト幾何学」という別の理論体系。デカルトは中世フランスの数学者。デカルトあたりが、座標幾何学の理論を整備しはじめたので。 さて、形容詞 interior は「内部の」という意味の形容詞だが(ジーニアス)、しかし普通は家や自動車の内壁に対して interior を使う(ジーニアス)。 ジーニアス英和の interior によると、幾何学の「内角」を interior angle で表してもいいとのこと。旺文社1900も東京書籍4500も、建築物の「室内の壁」を the interior walls としている。なお、東京書籍は「内部の壁」と和訳。 ---- 生産量 output, production 「生産」を意味する production に、「生産高」の意味もある(ジーニアス)。なお、単語集では、prodcution の「生産高」の意味までは説明していない(東京4500、桐原4500、旺文社1900を確認)。 increase production で 「生産量を増やす」である(ジーニアス)。センチュリーでも、文章は違って完了形などになるが、「映画製作が減少」という内容の文で production を生産量の意味で使っている。 より平易に output でも「生産高」を言える(旺文社、ジーニアス)。 工場などの生産高から(ジーニアス)、芸術などの産物まで(センチュリー)、output で表現していい。 production や produce には、「大量生産」のようなニュアンスがある(東京書籍)。 なお「大量生産」は mass production である(センチュリー)。 なお、テレビ番組や音楽作品などの生産から、その生産された作品なども production である(ジーニアス)。 output の対義語は input である。 つまり input ⇔ output である。 input で、名詞としtrは、仕事や活動などへの資材や労働力などの「投入量」、コンピュータへの「入力」を意味する。また動詞としては、「投入する」や「入力する」の意味である(ジーニアス、センチュリー)。 旺文社の単語集には、inputに投入量の意味がないが、しかし辞書で「投入量」を確認できる。 同様に、対義語のoutput は、仕事や活動などの「生産高」や、コンピュータからの「出力」である。動詞としても同様に「産出する」(ジーニアス)や「結果を出す」(センチュリー)や「出力する」である。 input には、仕事・活動などへの援助としての情報提供やアイディア提供などの意味もある(ジーニアス、センチュリー)。 東京書籍や桐原の単語集には input や output が見当たらなかった。だがこれからのIT時代、必要になる単語であるので、ぜひとも意味を理解しておきたい単語である。 ---- 「外国」と「海外」 外国へ abroad 海外へ overseas 「外国に」「外国へ」は abroad であり、副詞である。 「海外に」「海外へ」は overseas であり、副詞である。 overseas は字ヅラだけ見れば、海を越えて外国に行くことだが、アメリカでは実際にはヨーロッパへ行くことに使われる事が多い(ジーニアス)。 travel overseas で「海外へ旅行する」である(旺文社)。 travel abroad で「外国へ旅行する」であるが、東京書籍では「海外へ旅行する」と訳している。 from overseas で「海外から」である(旺文社)。 abroad の典型的な例文が、 「私は外国へ(一度も)行ったことがない。」 I have never been abroad. である(東京書籍、桐原)。東京書籍と桐原で、同じ英文。桐原のほうには和訳で「一度も」がある。 ---- 結果 result, outcome, consequence 桐原4500と東京書籍4500の後半にoutcomeの単語の紹介があるが、良書とも解説を諦めている。 単に 結果のことを result だけでなく outcomeとも言うと、知っておくしかない。 consequenseは、単に「結果」を、固い言い回しにしただけであるが、東京書籍4500によると、「通例望ましく結果にconsequenceを用いる」とこのこと。 センチュリーと東京書籍に「深刻な結果」 a serious consequence と言う例文がある。 副詞 consequently は「その結果として」「したがって」の意味。 ---- 考え concept, notion ,ほか(idea, thought ,など色々ある) concept は、たとえば相対性理論の考えだとか、割と抽象的なことに使う。桐原4500いわく、「アインシュタインの相対性理論の概念」は Einstein's concept of relativity である。 notion は、そこまで抽象的でなく、たとえば人生観(ジーニアス)とか宗教観(センチュリー)とか。 ジーニアスでは「人生は航海だという考え」の「考え」を notion としている。 旺文社だと「概念」と言ってるが、無視していい。 概念というより「観念」だろう。 あるいは「観念」という用語をしらない高校生に向けて「概念」と書いたのかもしれないが、そんな底学力層のことは読者は気にしなくていい。 その他、ジーニアスで「意見」、センチュリーで「意向」だと言ってるが、両辞書で説明が一致しないので無視する。 ---- 「規範」と「基準」 規範 code 基準 normal (学校などの)規律、しつけ discipline 普通 normal, ordinary 「行動」と「指導」と「行儀」、「実践」 行動 conduct(指導のニュアンス)、behavior (行儀のニュアンス)、practice(理論・理念の実践) 習慣・慣習 practice 、 custom、クセ habit codeには「規範」「暗号」「法典」などの意味がある。 まず、codeの規範について。 ドレスコード dress code は「服装規程」のことである。「ドレスコード」「服装規程」とは、たとえばクラシック音楽コンサートホールとかの上流階級っぽい施設に入場しようとするとき、どんなに金を持っていても、もし服装が短パンとかジーパンとかだと入場を断られることがある。 成人男性の場合なら、背広とかのフォーマル formal な服装とかでないと、そういう場所には入場できないのである。そういうのをドレスコードと言う。 商業施設に限らず、たとえば冠婚葬祭(かんこん そうさい)とかの行事でも、その内容に見合った服装が求められる。 旺文社1900の例文が例文としてドレスコードを紹介しており、まさに大学進学を目指す階級にふさわしく、とても良い。 ダジャレだろうけど、第二次世界大戦の日本のGHQ占領期の言論統制のことをプレスコード press codeという。普通に科目「日本史B」とか「日本史探究」で、第二次世界大戦の日本のGHQ占領期の言論統制のことをプレスコードと言うと習う。ついでに覚えよう。英和辞典には press code は見当たらず、どうもGHQの造語っぽい。 ドレスコードの場合、codeは訳では「規則」や「規程」ではあるが、マナー的なニュアンスもある。 ジーニアスで確認したが「不文律」 code of silence という単語がある。 「行動規範」 は a code of conduct である。 ここら辺の表現が、上流階級に求められるマナー的な code であろうか。 その他、ビジネスライク名表現だが、「業務規程」 code of practice というのもある。 なお、「行動規範」 は a code of conduct のついでに言うと、「行動」conduct も類義語があり、behavior が類語後である。なお、旺文社ターゲット1400(中級の難度の本)が、conduct と behave を同じページで紹介している(おそらく旺文社もこれを類義語だと見なしているのだろう)。 道徳的な「行動」に conduct を使うことも多い.音楽の「指揮者」をコンダクター conductor と言うのも、これだろう。 The orchestra was conducted by Seiji Ozawa. そのオーケストラは小澤征爾によって指揮された。(東京書籍4500) とか conduct the orchestra オーケストを指揮する(桐原3000) とか典型。 高校英語では出ないだろうが、物理学の電気伝導のことを conduct という事もある。conduct には、指導とか伝導とかのようなニュアンスがある。 道徳的な「行動」に conduct を使うことも多いが、必ずしもそうとは限らない conduct interview インタビューを行う(東京書籍4500) conduct research 調査を行う(旺文社1400) のように調査研究を行うのに使う場合もある。 behave は、動詞「ふるまう」だが、ニュアンス的には「行儀」のニュアンス。 behave oneself で「行儀よくする」(桐原3000、旺文社1400) I can't stand His behavior. 彼のふるまいには我慢できない. (東京書籍4500) 東京書籍の例のように、behavior そのものには、指導的なニュアンスは無く、行儀が悪い場合にも使うようである。 conduct は動詞。「行う」、「指揮する」。「指揮者」は語尾が異なり conductor である。 behavior は名詞で「ふるまい」「行動」。behaveは動詞で「ふるまう」。 ほか、practice に、理念や理論などの「実践」の意味があり、単語集にもあります(桐原4500、旺文社ターゲット1900)。 practical 「実践的な」「実用的な」という単語もあるので(東京書籍4500、)、これと関連づけましょう。ほか、思想用語ですが、プラグマティズムという語があり、米国的な実用主義のことです。なお、プラグマティズムはドイツ語やギリシア語が語源なので、高校生には深入りは不要。 熟語で put ~ into practice で「~を実践する」 put his new ideas into practice 「彼の新しいアイデアを実践する」(旺文社1900、ジーニアスに似た例文あり) the idea to put his ideas into practice 「彼のアイデアを実行するチャンス」(桐原4500) とか典型です。なお桐原3000にもpracticeがありますが、3000では練習の意味しか書いてません。 practice his religion 「宗教を実践する」(ジーニアス、桐原5500をもとに作成したオリジナル) She practices vegetarianism. 彼女は菜食主義を実践している。(東京書籍3000そのまま) ほか、 practical experience 「実地の経験」(東京書籍4500、桐原4500) が典型です。 対義語は theoretical 「理論上の」です(東京書籍4500、桐原4500)。セオレティカルと、語尾がティカルになります。セオ「リカル」ではないです。セオ「レティカル」です。 「実用的な車」 practical car (東京書籍4500)、実地の経験ある大工 practical carpenter (三省堂グランドセンチュリー) たぶん大工が高校範囲でないので、東京書籍が気を利かして car 「車」に置き換えたのだろうと思います。 なお、理科などの実験は experiment です(東京書籍3000、旺文社1900)。 旺文社1900だとpracticeとexperiment が同じページに書いてあり、おそらく、類義語のようなものと見なしています。 practice には「練習」の意味があります。というか、先に「練習」の意味のほうを、多くの中高生用の学校用の単語集では習います。 exercise にも「練習」の意味がありますが、上記のように practice は宗教や思想にも使うので、なんかニュアンスが少しだけ重いです。 また、単語集には無いですが、practiceには「慣習」の意味もあります。「練習」などの派生的に覚えましょう。 宗教とか地域文化とかそういう単語で practice が使われている場合は、宗教の実践なのか、それとも宗教の慣習なのか、どちらなのか判別が面倒です。このため、入試では要求されないでしょう。あまり特定の宗教に深入りするのも入試的にアレですし。 慣習・習慣 practice 、custom、habit custom は、社会の習慣でも(東京書籍4500、旺文1900)、個人の習慣でも使う(桐原3000で個人の習慣を紹介)。 社会の慣習の意味の場合、custom と practice の区別は難しい。 custom やhabitは、意外と難度の高い単語と見なされており、東京書籍4500や旺文社1900など上級レベルの単語集でも紹介されてる。 habit は個人の習慣。個人の「癖」(くせ)が habit である。 このためか旺文社1900および東京書籍4500では対比として custom を「社会的な慣習」としているが、しかし実は個人の習慣にも custom を使う(桐原3000)。 the custom of visiting shrine on Wew Year Day 「神社を新年に参拝する風習」(旺文社1900) the custom of giving year-end gift 「お歳暮を贈る慣習」(東京書籍4500) もちろん日本以外の外国にも custom を使ってよく、 another country's customs 「他国の慣習」(桐原3000) habit で入試で典型的なのが、個人の食習慣。 well-balanced eating habits 「バランスのとれた食習慣」(旺文社1900) the habit of eating between meals 「間食の習慣」(東京書籍4500) She has a habit of playing with her hair when she's nervous. 「彼女には緊張すると髪をいじるくせがある」(桐原3000そのまま) ※辞書を見ても他にろくな例文が無いので、そのまま紹介 habit of ~ing で「~する習慣」である(旺文社1900)。 She has a habit of speaking quickly when she is angry. 「彼女には起こったときに早口で話すくせがある」(東京書籍4500そのまま) つまり単語集の典型例として、 He / She has a habit of ~ing ○○ when he/she is □□. 「彼/彼女には□□したときに〇〇を~するくせがある」 この桐原の例のように、無意識の「癖」にhabit を使う。 だが、他にも、喫煙とか麻薬とかそうのの悪癖にも habit を使う(ジーニアス)。この悪癖は入試には出ないだろう。辞書を見ても、麻薬とかそういうのの habit ばかりなので、桐原の髪の例文をそのまま紹介させてもらった。 しかし、良い習慣にも habit を使っても良い(東京書籍4500など)。 healthy habits 「健康的な習慣」(東京書籍4500) habit of rising early 「早起きの習慣」(ジーニアス)、habit of getting up early 「早起きの習慣」(グランドセンチュリー) 「習慣」の意味で practice を使う場合、地域などの集団の慣習。宗教とか風土とか。 ※ 入試範囲外だが汚職などの悪風の場合も、practiceを使う(ジーニアス)。 マナー以外にも code は使い、「民法」は the civil code , 「刑法」は the criminal code である。 だが、「lawで十分じゃん?」と思ったのか、東京書籍4500ではcodeの項目を見ても「暗号」しか紹介していない。なお、桐原4500の例文が、アメリカの各州の刑法 criminal code の違いの話題(いわゆる「州法」)。 おそらく東京書籍は、マナーの話をしたいなら manner で済むだろう、という発想だろう。なお、manner も英語であり、東京書籍4500にもmannerが書いてある。 「暗号」については、典型的な例文が 「暗号を解く」 break a code である(東京書籍4500, 桐原4500)。 normal (ノーマル)は、日常的には「普通の」「平均的な」という意味である。 だが、学問としては、労働などの「基準量」の意味を覚えておきたい。 日本では最近はすたれた言い回しだが、ソ連語の由来で「ノルマ」という、たとえば1日あたりの、しなければならない労働の最低量として「ノルマ」という語があった。 単語集にはないが、辞書で normal の意味に、数学の「直角の」という意味もある。おそらく、古代ギリシア人あたりが、角度の基準として直角(90度)を採用したのだろう。 なお、数値的な「平均の」を言いたいなら、 average である。形容詞「平均の」も名詞「平均」も average である。桐原4500では、normal のページといっしょにaverage も書いてある。 normal の対義語 abnormal は「異常の」「異常な」の意味である。 逆に考えれば、normal の意味は、「通常の」「正常の」でもある。桐原のnormal に「正常な」が書いてある。東京書籍の副詞 normally に「通常は」が書いてある。 ordinary 「ふつうの」「平凡な」は、よく「生活」と結びついて、ordinary life 「ふつうの生活」(東京書籍の訳)または「平凡な生活」(桐原の訳) ordinary はこのように、並外れた部分がないというニュアンスがある。 逆に対義語の extraordinary は、「並外れた」の意味である。 「異常気象」は extraordinary weather である(東京書籍、ジーニアス)。 単語集にはないが、「臨時国会」も an extraordinary Diet session (ジーニアス)あるいは an extraordinary session of Diet (センチュリー)のように言えることも、覚えておきたい。なお、Diet とは、日本の「国会」のこと。外国の国会の呼び名は違っている場合も多いので、外国の国会のことを言いたい際には、その国ごとの呼び方を調べること。 そのほか、ルールに従わせるための統制や、そのための訓練のことなどを、 discipline という。 子供の「しつけ」や、学校の規律などが discipline である。 ジーニアスいわく 「学校の規律」 school discipline である。 また、センチュリーいわく「学校での規律」は discipline in school である。 子育てや教育にかぎらず、たとえば行政などの「金融統制」は financial discipline である(ジーニアス)。 そのほか、単語週では旺文社1900しか紹介していないが、大学での「学科」や「学問分野」のことも discipline という。辞書には普通に「学科」も「学問分野」も書いてある(ジーニアスで確認)。なお、実は旺文社では「学問分野」しか書いてないが、説明の都合で段落冒頭では「学科」も加えて紹介した。 ---- 通訳と翻訳 「通訳する」「解釈する」 interpret 「翻訳する」 translate 「通訳」とは、普通、口頭での翻訳のこと。 だから翻訳サイトの「グーグル翻訳」も、べつに口頭でのやりとりではないので、英語では google translate なわけである。 「通訳者」は interpreter である。 「同時通訳」は simultaneous interpretation である(旺文社 simultaneous、ジーニアス、センチュリー)。 simultaneous は「サイマルテイニアス」と読む。シミュ~とは読まない。 名詞形の「通訳」「解釈」は interpretation である(旺文社)。 東京書籍と桐原だと「解釈」の意味しか紹介していないが、しかし上述のように「同時通訳」でも interpretation は使われるので、「通訳」の意味も覚えるべきだろう。 なお、数学の「連立方程式」は simultaneous equation である(ジーニアス)。 simultaneous の部分が「連立」である。 「方程式」は equation である。 翻訳者は translator である。 [[カテゴリ:英語]] 9y3yr02x39it11003kulvz7945qv8bd 246699 246670 2024-04-14T11:47:57Z すじにくシチュー 12058 解決 settle ,solve 議論 argument, debate, controversy wikitext text/x-wiki ==== ※ 分割用タイトル ==== ---- 設立 constitute と establish と found found という動詞がある。動詞「見つける」find の 過去形foundとは別に、原形で「設立する」のfoundという動詞がある。 「設立する」は活用が、 原形 found - 過去形 founded - 過去分詞 founded と変化をする。 foundの意味は「設立する」。「創設者」を名詞 founder と言うのを記憶の土台にすると、覚えやすいだろう。名詞 foundation で「基礎・基盤」や「建設・設立」などの意味。化粧でファンデーションとあるが、あれは和製英語ではなく、れっきとして foundation cream という英単語がある(ジーニアス英和で確認)。 ちなみに金融などで「ファンド」といわれる単語は fund (原形がfund )というまったく別の単語。組織などの「資金」「基金」が名詞でfundである。動詞 fund は、組織などに「資金を出す」こと(旺文社1400)。 なお、「基金の基金を集める」は raise a fund である(旺文社1400。ジーニアス)。また、raise money で「資金を集める」である(東京書籍4500。桐原4500)。 constitute は、議会や制度などを「設立する」。 なお、センチュリー英和によると、「議会を設立する」 constitute an assembly とのこと。 establish は、組織を「設立する」。たとえば桐原4500に「早稲田大学を設立する」という例文で establish が紹介されている。 ジーニアス英和によると、政府・学校・会社などを「設立する」のが establish である。 センチュリー英和によると、国家・政府などを「樹立する」のも establish である。 だが、それよりもestablishは、単語集にはないが、評判などを「確立する」の意味で覚えるほうが良い。 たとえば、センチュリー英和やジーニアス英和にあるが、国家体制など既存の「体制側」や「支配層」のことを establishment という。 いっぽう constitute には、こういったニュアンスはないだろうから。 set up set up は「創業する」「創設する」の意味である。 このほか、set upには、テント(a tent)や看板(a sign)などを「立てる」という意味もある。 センチュリー英和にもあるが、コンピュータの初期設定のことを set up という。 ---- 主張 claim と insist と argue と contend 議論する argue, discuss センチュリー英和によると、claimは、当然の権利として「主張する」、あるいは事実であるとして「主張する」の意味。 claimとinsistのどちらにも、「要求する」の意味がある。 だが、claimの要求は、権利としての要求である(東京書籍4500)。 いっぽう insistの要求は、単に強く要求しているだけである。 insistは、特に、強く「主張する」意味である。 ジーニアス英和およびセンチュリー英和では、無罪の主張でinsist on が用いられている。 日本語の、批判のような意味での「クレーム」は、和製英語であり、センチュリー英和のclaimの説明によると、英語にこの意味はない。 なお、「文句を言う」は英語で complain である。 :(※ たぶん範囲外?)海外旅行などで「荷物の受け取り」のことを baggage claim という<ref>『ビジネス・コミュニケーション』、実教出版、令和2年12月25日 検定済、令和4年1月25日発行、P140</ref>。このように、日本語の「クレーム」と英語のclaim は、だいぶニュアンスが違う。 記号「!」 のことを exclamation (イクスクラメイション)というが、これも動詞 exclaim (イクスクレイム)「さけぶ」の名詞形である。 なお、荷物 baggage は集合名詞なので たとえば複数の荷物を言うときは、 ~ pieces of baggage になる<ref>『ビジネス・コミュニケーション』、実教出版、令和2年12月25日 検定済、令和4年1月25日発行、P153</ref>(桐原3000)。 発音注意であり、baggage 「バギッジ」である。 なおbaggageはアメリカ英語。イギリス英語だと luggage 「荷物」になる。 一方、「カバン」bagは具体的なカバンのことをいうので、普通に数えられるので、bagの複数形は bags である<ref>『All aboard! English Communication I』、東京書籍、令和3年1月29日検定済、令和4年2月10日発行、P145</ref>(桐原3000)。 さて、claim する人(主張者)のことは claimant である。 ただし、権利の主張などは、insistとclaimのどちらでも良い。 argue は、理由をあげて「主張する」の意味である(東京書籍4500)。argue that ~ で「~だと主張する」の意味である。argue with ~(人) で「~(人)と言い争う」の意味である(桐原4500および旺文社1400)。 なお、argueには、用法によっては、やや非友好的に「議論する」ニュアンスもある。ジーニアス英和にも、argue は「discussよりも非友好的」と記述がある。 たとえば検定教科書 "Standard Vision Quest I" でも、 argueは「言い争う」といった意味であると紹介する一方、discuss は「議論する」であると紹介している<ref>高等学校外国語科用『Standard Vision Quest English Logic and Expression I』、啓林館、令和3年3月5日検定済、令和3年12月10日発行、P71</ref>。 ただし、実際には argue には「説得する」などの意味の用法もあるので、ニュアンスの違いはあまり明確ではない。 センチュリー英和に、弁護士の「弁論」をargueとした例文があったが、もし法廷闘争での敵対陣営同士の「弁論」ならargueのほうが、ふさわしいだろう。 なお、「口論する」は quarrel である<ref>高等学校外国語科用『Standard Vision Quest English Logic and Expression I』、啓林館、令和3年3月5日検定済、令和3年12月10日発行、P71</ref>。 contend は、(東京書籍4500いわく)「強く主張する」とか、(桐原5500いわく)「論争する」とかの意味。 桐原5500の例文にあるが、contend in court で「法廷で争う」。 旺文社1900によると名詞 contention で「主張」「論点」の意味。 旺文社1900とセンチュリー英和が紹介しているが contend that ~ で「~だと主張する」。 旺文社1900 で熟語 an issue of contention (「議論の対象となる問題」)が紹介されてるが、しかしジーニアス英和でもセンチュリー英和でも確認できなかった。 * 異議を唱える challenge challenge には課題や競技相手などに「挑戦する」の意味もあるが、議論などで相手に「異議を唱える」の意味もある。 たとえばジーニアス英和からの抜粋だが、 I challenged her. 「私は彼女に異議を唱えた。」 旺文社1900からの抜粋だが、 He challenged the common belief. 「彼は常識に異議を唱えた。」 センチュリーからの抜粋で、 He challenged my statement. 「彼は私の言うことに異議を唱えた。」 challenging で「やりがいのある」。東京書籍3000に例文がある。辞書を見ても、あまり例文が無いので、当ページでは紹介しない。 なお単語集にはないが、ジーニアスによると、競技などで challenger 「挑戦者」 ⇔ defender 「選手権保持者」(防衛側) である。defender の項目で調べると書いてある。 競技では、challenge は試合を「申し込む」などの意味である。 たとえば、東京書籍3000の例文だが、 Dan challenged me to a game of tennis. 「ダンは私にテニスの試合を申し込んだ。」 また、センチュリー英和に似たような例文 I challenged Betty to a game of tennis. 「私はベティにテニスの試合を申し込んだ。」 がある。 ---- 防御 defend , guard , protect まず、「ガードマン」は和製。 guard だけで「警備員」の意味がある。特に、警備員であることを強調したい場合、 a security guard という(東京書籍、旺文社)。 a security をつけずに「警備員」と使用してもいい。桐原3000の英文は銀行の「警備員」に、 a security をつけていない。 さて、defend は動詞。guardは名詞および動詞。protectは動詞。 なお、guardian とは、未成年などの「後見人」のこと。旺文社1900ではguardian を「保護者」「後見人」と紹介している。 そのほか、センチュリーでは、たとえば世界平和の「守護者」とか、そういう意味の「守護者」のことを guardian という。そのほか、ジーニアスには guardian の意味のひとつに「保護者」と書いてある。 protect は、病気などから「守る」場合にも使えるが(東京書籍3000)、ジーニアスによると人間などの相手でも使っていいようである。 辞書や単語集では「保護する」と訳される場合もある。 名詞 protection は「保護」の意味。 辞書によると、関税によって国内産業を「保護」することも protect である。また、風雨からの保護の「雨よけ」「風よけ」も 名詞 protection である。 さて、ジーニアスによると、「家族を守る」でprotect one's family である。ジーニアスでは文脈は述べていないが、普通の感覚では、病気とかではなく犯罪などから家族を守ることだろう。 日光(sunlight, sun)から目を守ったり(ジーニアス、センチュリー)、肌を守ったりするのも(桐原4500)、protectである。 たとえば、 protect one's eyes from sunlight 「日光から目を守る」 である。 protect 〜 from B で、「〜(守られる対象)をB(危険側)から守る。」である。 なお、子育てなどでいう「過保護」は英語で overprotect である(桐原5500)。 ---- 汚染 pollute と contaminate 違いは不明確。 桐原5500にcontaminate がある。polluteは桐原・東京書籍の4500にある。 一応、ジーニアス英和および桐原5500には、「毒物や放射能」による汚染を contaminate としているが、彼らがそういう説を言っているだけ。クラウン英和はその説を採用していない、 実際にクラウンの例文を見ると、車の排気ガス汚染で、contaminate という動詞を用いている。 :Car exhaust contaminate the air. 車の排気ガスは大気を汚染する。 という文がクラウン英和にある。 しかし東京書籍4500では、工場の煤煙による大気汚染が pollute である。 クラウン英和にある大気汚染 air pollution のように、そういう用語が既にあるので、実務では業界の用語ごと覚えるしかない。 ※高校生としては、不正確かもしれないが、とりあえず「汚染」はすべてpolluteで覚えておいて、実務などで「この場合はcontaminete を使え」と修正された場合にだけ contaminate を使うのが良いだろう。 ---- 傷(きず) wound, injured, harm, hurt 動詞 wound は、刃物・銃などで「傷つける」、「負傷させる」。桐原3000だと「傷つける」、東京書籍4500だと「負傷させる」。 ジーニアス英和hurtの説明によると、戦いでの負傷には wound を使うとのこと。 hurt は、感情なども含む「傷つける」。偶然か英米人のダジャレかどうか知らないが、心のheart と、心を「傷つける」 hurt とで発音が近い。関連付けて覚えよう。 センチュリー英和だと、hurtには、「傷による苦痛に重点がある」とのこと。 名詞 injury が「けが」という意味。これが「けが」の基本的な単語である。 さて、~ be injured で「~が、けがをする」の意味である。 ~ be injured in ・・・ で「~(けが人)が,・・・(原因)でけがをする」である。 単語集によくある典型的な例文が、 「彼はその事故でけがをした。」 He was injured in the accident. である。 単語集では、自動詞 hurt で「痛む」の意味があり、東京書籍4500で例文を紹介。一方、桐原4500は例文なし。 「おなかが痛い」(※東京書籍4500)とか(靴擦れで)「かかとが痛い」(※センチュリー)とかでも、hurtを使っていい。 桐原4500に名詞 hurt で、「傷」の意味が紹介されている(例文なし)。東京書籍4500にはなし。 hurt には「けが」・「傷」・「苦痛」の意味がある。 「傷」の意味では、injuryとほぼ同義だと、ジーニアス英和が言っている。 hurtとpainの違いが気になるが、あいにく辞書には書いてなかった。 ややしいことに「痛み」を意味する名詞 pain には、「苦労」の意味もある。苦痛ではなく苦労なので、いい意味でも使われる。 なお、painは名詞の用法が基本的な意味だし、名詞の意味は「痛み」。 hurt は動詞の用法が基本的な意味だし、動詞の意味は「傷つける」。 辞書を見ると、実は動詞のpainもあるが、これは「痛む」の意味である。(「傷つける」ではない)painはあくまで「痛み」に関する単語 名詞 harm は「害」の意味。なお、harmful で「有害な」の意味の形容詞<ref>高等学校英語 検定教科書『FACTBOOK English Logic and Expression I』、令和3年5月 文部科学省検定済、令和4年2月25日発行、P111 </ref>。 東京書籍およびジーニアスによると、日光や光によって「目をいためる」のは harm である。 飲酒や喫煙などの「害」がharm 。桐原4500に喫煙の害。センチュリー英和に飲酒の害。 このように、比較的に痛みを伴わないものにも使われる。(センチュリーにもそう書いてある。) だが、「目をいためる」ように、実際に痛いこともある場合にも使われるので、まあ傾向の程度。 ネットでときどき「有害コンテンツ」という用語があるが、「有害コンテンツ」も英語で harmful contents である<ref>高等学校外国語科用『Standard Vision Quest English Logic and Expression I』、啓林館、令和3年3月5日検定済、令和3年12月10日発行、P121</ref>。 ほか、旺文社1900のsubstance ’物質)の項目が言うには、飲食物などに含まれていたら困る「有害物質」は harmful substances である。 さて、動詞 suffer が「苦しむ」という意味だが、 be suffering from ~ で、「~(原因)で、苦しい(つらい)」的な意味。 東京書籍 be suffering from a toothache 歯が痛くてつらい 桐原 be suffering from a backache 背中が痛くて苦しい などと訳している。 ジーニアスによると、 「風邪をひいている」 be suffering a cold のように痛み以外でも使っていい。ほか、「英国はインフレで苦しんでいる」 be suffering from inflation のように使ってもいい。 ---- やわらげる relieve, ease 苦痛などを「やわらげる」は動詞 relieve である。 典型的な例文で、(風邪薬などで)「頭痛をやわらげる」 relieve a headache がある(東京書籍4500およびセンチュリー)。 誰が風邪薬を飲んで誰の頭痛をやわらげるのかによって、飲んだのが「私」だったら relieve my headache になったり、教材ごとに主語による多少の違いがある。 どちらにせよ、単に柔らかいわけでもなく、単に軽減するわけでもなく、苦痛などを減らすのが relieve である。 relieve A of B(苦痛など) で、「AからBを除いて楽にする」の意味。 熟語 get rid of ~ 「~を取り除く」と関連づけて覚えよう。実際、桐原4500がそういう構成である。 名詞形は relief であり、「安心」「緩和」「救援」などの意味である(単語集にある)。単語集にはないが、野球のリリーフも同じrelief である(センチュリーで確認)。 sigh with relief で「安堵(あんど)のため息をつく」である。sigh (発音「サイ」)は、動詞としては「ため息をつく」、名詞としては「ため息」である。 例文は、 She sighed with relief. 「彼女は安堵のため息をついた」 である(東京書籍4500 項目 sigh。旺文社1900 項目 sigh)。 ともかく、「安心」的なのが relieve のイメージなので、be relieved to ~(動詞) で「~で安心した」という形容詞的な用法になる。 というか、辞書ではジーニアス英和でもセンチュリー英和でも、 relieved を形容詞として紹介している。 ease (イーズ)という動詞および名詞がある。これも動詞ease は「やわらげる」「取り除く」の意味である。これは形容詞の「簡単な」 easyの、名詞計および動詞形である。 名詞 ease は「容易さ」「気楽さ」「軽減」の意味である。 This medicine eases the pain. 「この薬は痛みをやわらげる。」 のように使う(東京書籍および旺文社に似た例文)。 ジーニアスによると、頭痛 headache をやわらげるのに ease を用いてよく、旺文社によると胃痛 stomach pain をやわらげるのに ease を用いている。 このような薬による「取り除く」「やわらげる」の意味での ease は、ジーニアスによると、relieve とほぼ同義語とのこと。 ---- 取り除く remove, eliminate remove は、「取り外す」の意味に近い。 たとえばパソコンのUSBスティックメモリなどを「リムーバル・メディア」などというが、取り外したあとに、別に捨てるわけでもなく、消去するわけでもない。 このように、remove は単に「取り外す」「取り除く」というニュアンスである。 名詞 removal (リムーバル)「取り外し」という単語も存在しています(東京書籍4500)。 形容詞 removable(リムーバブル)「取り外し可能な」という単語もあります(東京書籍4500)。 「リムーバル」はけっして形容詞 removable(リムーバブル)「取り外し可能な」の誤記ではないです。間違えないように。 一方、eliminate は、取り除いたあとに、処分することを念頭に置いている。または、取り除いたあとに、再度の取り付けの意思がないものに使う。 なので、eliminate で取り除かれるものは、ゴミだったり、あるいは犯罪などの社会悪だったりする。 または、解決すべき問題を片付けることも eliminate である(東京書籍)。 だから eliminate の訳語は「取り除く」である。外すのではなく「除く」に、そういうニュアンスがある。 eliminate (A) from (B) で、「AからBを除去する」である。fromの後ろにあるBが、抹消されるべき対象である。 こういう単語なので、単語集にはないが、ジーニアスを見れば、敵軍などを全滅させる事も eliminate と言うこともある。 なお、生物種の「絶滅」は extinction (エクスティンクション)である。 熟語 get rid of ~ は、そこまであれこれと考えていない。remove的にも使われるし、eliminate 的にも使われる。あるいは、remove と eliminate の中間だと思っておけばいいかもしれない。 さて、 exclude は、「除外する」である。 これよりも、形容詞の exclusive エクスクルーシブの意味「排他的な」のほうが分かりやすいので、そちらを説明する。 exclusive 「排他的」とは、最初から内部に入れない、という意味である。 だからexclude は、最初から中に入れないように「締め出す」という意味もある(桐原で確認)。 excludeの「除外する」の意味については、可能性などを「除外する」という意味もあり、ジーニアスの例文だと、たとえば「明日、雨が降る可能性は除外できる」みたいな割と平和的な「除外する」にも exclude を用いることもできる。 そのほか、exclude は、見当などの際に「考慮に入れない」という意味もあり(ジーニアス、センチュリー、旺文社で確認)、たとえば旺文社の例文では「税金は価格から除外されている」という意味の英文で exclude を受身計で用いている。 なお、対義語は include であり、「含む」という意味である。 たとえば「税込み 5ドル」は <nowiki>$5,</nowiki> tax include である。 典型的な例文は、 「料金は税込みですか?」 Does the price include tax? がある( ジーニアス(ただしpriceでなくrate)、 東京書籍(ただし「料金」でなく「価格」と和訳) )。 また、-clude とは「閉じる」の意味である。 だから、たとえば conclude は、話を閉じるので「結論づける」「締めくくる」の意味。conclusion は「結論」の意味。 ---- 消去する erase , delete (※ 範囲外)火を消す extinguish 鉛筆で書いた文字を消しゴムで消すのが erase である。 また、消しゴムをアメリカ英語で eraser (イレイサー、イレイザー)という(東京書籍1800、旺文社1900)。なおイギリス英語では rubber である。 黒板ふきも eraser である(旺文社、ジーニアス、センチュリー)。 コンピュータのデータを消すのは、erase も delete も使われるが(ジーニアスで確認)、しかし現代では delete でデータ消去を表すのが普通である。 実際、パソコンのキーボードにも delete キーがある。 旺文社の例文も、メールの削除を delete で表現している。 なお、東京書籍と桐原の単語集には delete は見当たらない。 昔なつかしいテープのデータを消去するのには、erase が使われるようである(ジーニアス、センチュリーにerase でテープのデータを消す用法あり)。 erase で消すのは、文字のほかにも、感情を「消す」などの表現でも使われる(ジーニアス、)。 「記憶を消せればいいのに」みたいな表現でも erase を使う(旺文社、ジーニアス)。 辞書にはないが、delete はもともと動詞で「削除する」「消去する」の意味であるが、現代ではパソコンのデリートキーを表す名詞として、delete が名詞としても使われる(旺文社1900)。辞書のほうが遅れている。旺文社1900が正しい。 なお、名詞形 deletion 「消去」「削除」という単語もある(旺文社、ジーニアス、センチュリー)。 高校範囲外ですが、火を「消す」は動詞 extinguish (イクステングィッシュ)です。 extinguish は一見すると見慣れないですが、実は高校範囲の単語「絶滅」 extinction (イクスティンクション)の動詞形です。 extinction のスペルのままでは動詞の意味は無いです(センチュリー、ジー二アス)。 消防士による「消火する」から(ジー二アス)、たばこの火を「消す」まで(センチュリー)、extinguish で表現できます。 なお、extinct は形容詞「絶滅した」「消滅した」です。 ほか、生態系の「絶滅危惧種」は an endangered species である(桐原4500 species、ジー二アス endangered)。東京書籍と旺文社には、species の項目自体はあるが、絶滅危惧種はない。 なお、植物の「種」(たね)は、seed という別の単語である(東京書籍4500、桐原3000)。 典型的な例文は、 「農場に種をまく」 plant seeds in the field である(東京書籍4500、桐原3000)。 plant は「種をまく」という意味の動詞。 field は「農場」である。 動詞として seed 「種をまく」という用法もあるが、旺文社以外1200は紹介していない。少なくとも、桐原3000と東京書籍4500には、動詞の用法が紹介されていない。 ---- 疑い suspect ,doubt doubt ~は、「~が信じがたい」の意味。 → don't think に近い たとえば doubt if ~で「~かどうか疑わしい」。doubt that~で「~でないと思う」である。 suspect ~ は、「どうも~のようだ」のような意味(ジーニアス英和) → think に近い 旺文社1400にあるdoubt 例文で、 doubt ifの例文「私は神が存在するかどうか疑わしく思う」I doubt if god sexists. および doubt that の例文 「私は神は実在しないと思う」I doubt that god exist. が覚えやすいだろう。 suspect~ の 目的語(~)の部分は、原因や容疑などがくる。 例文として「食中毒を疑う」 suspect food poisoning とか(東京書籍4500)、 容疑者は名詞 suspect である。 このほか dubious と言う「疑わしいと思う」(桐原5500)という単語があるが、辞書の例文が不足していてよく分からなかった。単語集では桐原5500に書いてある。 ---- 治療と回復 「治す」 heal, cure , 「~'''が'''回復する」(自動詞)は recover 「~'''を'''回復する」(他動詞)は restore 「気分の回復」は refresh 「(健康などを)取り戻す」は regain 医療や薬などによって、けが や病気を「治す」一般的な語は cure である。 外傷を治す場合は heal が好んで使われる。 cure ~(人) の語順である。 けが を治す場合、 cure ~(人) of □□(けが・病気) の語順である。 典型的な例文が 「その薬が彼の病気を治すでしょう」 The medicine will cure him of his disease. である(ジーニアスの例文を改造し、「あなたの病気」から「彼の病気」に変更)。 桐原にも似た例文があり、 This medicine will cure him of the disease. 「この薬が彼の病気を治すだろう。」 とある。 his disease か the disease かなどの多少の違いはあるが、まあこんな感じの英文になる。 get rid of ~ などと同様に、ofの後ろには取り除かれるべき物が来る。 heal も同様、 heal ~(人) of □□(けが) の語順である。 だが、東京書籍4500および桐原4500いわく、 heal the wound 「けがを治す」のように、ofを使わずに使われる場合もある。 recover は「回復する」である。 recover from ~ で「~から回復する」である。 動詞 restore は、 「秩序を回復する」 restore order のような例文が辞書で典型的(ジーニアスとセンチュリーの両方にある)。 さて、旺文社 store 項目によると、パソコンなどで、データをバックアップすることは store である。 そして、単語集にはないが、バックアップをもとに設定データなどを自動的に「復元する」ことを restore という事がよくある。 辞書によると、古い建築物や美術品などを復元することも restore である。 東京書籍4500では、教会を修復するのを restore としている。その教会が古いかどうかは東京書籍4500には書いてない。 桐原では、桐原5500にrestoreが書いてある。 けがの回復ではなく、ちょっとした疲れやノドの渇きや気分などを、軽い飲食物や短時間の休養などで回復させるぐらいの場合は、動詞 refresh (リフレッシュ)で表せる。 旺文社1900がrefreshを紹介している。桐原・東京書籍は紹介せず。 ジーニアスいわく、冷たい水を飲むのも refresh である。 refresh は主語や述語の語順のつかいかわけが難しいので、例文を省略する。 センチュリーいわく、入浴で疲れをとるのも refresh である。また、ジーニアスでもセンチュリーでも、アルコールで気分を回復するのが refresh である。 そのほか、ジーニアスによると、コンピュータなどのディスプレイ上の画像が更新されるのも refresh である。これからのIT時代は覚えておきたい。 regain one's health で「健康を取り戻す」という慣用表現である(ジーニアス、旺文社1900)。 旺文社1900にしかなく、番号 1502 / 1900 の単語。少なくとも桐原4500・5500と東京書籍4500にはない。 He regained his health. 「彼は健康を取り戻した」 のように使う(センチュリー)。 「意識を取り戻す」 regain consciousness もよく使われる(ジーニアス、旺文社1900)。 たぶん She regained consciousness のように使う(旺文社に似た例文)。 また、この用例から分かるように、健康的なものを取り戻す場合、普通は主語が自身の健康を取り戻すのに regain を使う。 「自由を取り戻す」(センチュリー)とか「都市を取り戻す」(ジーニアス)とかの政治的なことも regain である。 ---- 蓄え store , stock store は「店」という意味の名詞でもあるが、「蓄える」という意味の動詞でもあり、さらに「蓄え」「蓄積」などの意味の名詞でもある。 なお、storeを「店」の意味で使うのはアメリカ英語。イギリス英語では店はshopである。桐原3000にも東京書籍3000にも書いてある。storeは3000語レベル。 stock は「在庫」や「株式」という意味の名詞でもあるが、「蓄え」「蓄積」などの意味の名詞でもあり、さらに商品を「店に置く」「仕入れる」などの意味の動詞でもある。桐原と旺文社は、「仕入れる」の意味まで単語を紹介している(ただし例文なしで単語のみ)。 stockは4500語レベル。 しかし単語集では、ややこしいので、stockについては、「株式」「在庫」の意味の名詞だとしてしか、紹介していない。しかし実はstockも動詞の用法があるのである。 センチュリーによると、食料の「蓄え」は、stock でも store でもよい。 たとえばセンチュリーのstockの例文は「我々の食料の蓄え」Our stock of food である。センチュリーのstoreの例文は(リスが冬に備えての)「食料を蓄える」lay in a store of food である。 このように、どっちでも食料 food を蓄えられるので、区別がつかない。 storeは別にリスのような動物限定というわけでもなく、たとえばセンチュリーで図書の「蔵書」 a book of store などの表現もある。 storeが店での商売関係というわけでもない(もし商売に限定だすると、図書の蔵書とかリスの食料とか、説明がつかない)。 なので、stock に「株式」「在庫」の意味があると覚えるしかない。 桐原および旺文社いわく、 be out of stock で「在庫が切れている」 の意味。桐原は例文も紹介。旺文社は例文なし。東京書籍は紹介せず。 例文は桐原も東京書籍も旺文社も、在庫の例文である。 単語紹介だけでが、桐原いわく「株式市場」stock market 旺文社いわく「証券取引所」the stock exchange である。 語源を調べてみても、 stock の語源は木の「棒」stick と同じだと書いてあるだけで、stock と storeとの区別には役立たない。 さて、単語集にはないが、パソコンなどのハードディスクなどの貯蔵量のデータ記録デバイスのことをストレージ storage という。 ついで、単語集にある情報だが、 storage は、「貯蔵庫」や「保存庫」の意味で、東京書籍4500の巻末にだけ、解説なしで、単語と例文だけ書いてある。 辞書を確認のため見たが、ジーニアス英和は家具の「保管」を storage といい、センチュリー英和は単に「倉庫」を storage といい、あまり共通性はなさそうなので、深入りしない。 ---- 愚か(おろか) 形容詞 foolish, stupid, silly, ridiculous などがある。 このうち、 foolish, stupid, silly, は、「愚かだ」「馬鹿げている」の意味。 このうち silly は口語調。 <nowiki>Don't be silly.</nowiki> で「馬鹿げたことを言わないで。」という典型的な例文があり、東京書籍4500でも紹介されている。 名詞foolが形容詞になったのが foolish である。 stupid は、辞書によると、foolish よりも、けなしの意味が強い。口頭では使わないほうが安全だろう。 ridiculous は、「不合理で馬鹿げている」という意味。センチュリーによると、ridiculousには、あざけりや物笑いの意味もあるとのこと。 単に「不合理だ」の意味なら、 absurd を使う。桐原5500にabsurdが書いてある。なるべくabsurdを使うほうが高尚だろう。 センチュリーによると、absurdは、不合理さ・非常識さを強調している。 ---- 移行と移転と移動 migrate, transfer , 解決 settle ,solve 議論 argument, debate, controversy 桐原4500に名詞形migrant (移住者)が書いてありますが、英語では動詞 migrateとは「移住する」や、渡り鳥の「渡る」のことです。 しかし単語集にはないですが、そのほかにもmigrateには、IT用語では古いシステムに入っていたデータやプログラムを新しいシステムの中へと「移す」ことや、開発環境などのシステムを新システムへと「移行する」という意味もあります<ref>[https://www.otsuka-shokai.co.jp/words/migration.html マイグレーション | IT用語辞典 | 大塚商会]</ref>。 なお似た言葉にreplaceがありますが、これはサポート切れなどで古くなったりして(obsolete)使えなくなったソフトウェアなどを現在の稼働中の使えるバージョンのものに「置き換える」(replace)ことを意味します。 英語では、「『移住』にシステム環境『移行』の意味もある」と覚えることが本質的な理解でしょう。 なお、スペルの似ている immigrate に、(外国から)「移住する」の意味があります(桐原4500)。またなお、桐原4500にも書いてあるが、空港などの入国管理が名詞 immigration である。英会話の教材などでよく immigration が出てくる。 immigrate と migrate の意味の違いを把握するため、辞書の説明に逆らって、私たちは migrate は(環境を)「移行する」で覚えましょう。 これが、moveやtransfer と、migrate との違いです。 なお transfer に「転勤する」「転勤させる」の意味があります(桐原4500)。 「転勤させる」ほうは他動詞なのでtransferでもいいのは分かりますが、「転勤する」と「移住する」の区別が難しいです。まあ、おそらく他動詞からの類推か、慣用的にtransfer が定着しただけでしょう。 なお、辞書にありますが「転校」や(プロ選手などの)「移籍」もtransferです。 高校生物の遺伝に関連する細胞物質のひとつで、トランスファーRNA (transfer RNA)というのがあります。こういうのと関連づけて覚えましょう。 また、列車・バスなどの乗り換えも transfer です。 スペルの似た単語で、transport という動詞および名詞がありますが、動詞 transport は「輸送する」です。 transfer 「乗り換え」はおそらくtransport 「輸送する」との関連で定着した表現でしょうか。 単語集にも辞書にもないですが、インターネット用語で HTTP というのがありますが、これは「Hypertext Transfer Protocol 」の略です。データなどを「転送する」のも transfer です。 センチュリー英和によると、銀行口座に「振り込む」もtransfer とのことなので、おそらく「送金する」のようなニュアンスでしょう。 なお、ジーニアス英和およびセンチュリー英和によると、法律用語で、財産などを「譲渡する」もtransferです。 transition という名詞が別にあります。transition は、移行期にあるものについての「移行」のことです。桐原4500 では「議会制民主主義への移行」、旺文社1900では「自動運転車への移行」を例文にしています。 なお、人が「定住する」は settle ですが、人が「移住する」の意味もあります(東京書籍3000)。settle には「解決する」という意味もあります(桐原4500、旺文社1900)。 揉め事(もめごと)などを法的に解決するときに settle を使う。 settle the dispute 「紛争を解決する」(桐原4500、ジーニアス) ※ ジーニアスは settle a dispute 「紛争にけりをつける」 このように、和訳は少し違ってもいい。 なお、 We settled the international dispute. 「我々はその国際紛争を解決した。」(東京書籍4500) settle in Hawaii 「ハワイに移住(定住)する」(※ 何か予備校か英検の単語集に書いてあった例) They settled in California. 「彼らはカリフォルニアに移住した。」(東京書籍4500) settle the legal problem 「法的問題を解決する」(旺文社1900) 名詞形は settlement で「解決」「入植」の意味。settle には「移住」の意味もあるので、settlement には「入植」の意味もある。 ジーニアスいわく、警察が「解決する」のは solve である。 settle と solve の区別が難しい。 The police solved the crime. 「警察はその犯罪を解決した」(ジーニアス) 学校の問題や学問の問題などを解くのは solve である。(ジーニアス) グランドセンチュリーいわく、solve は謎(なぞ)を解くのに重点がある事が多い。(しかし上記の警察の例とか微妙だが。)settle は、論争などを解決すること、との事(グランドセンチュリーがそう言っている)。solve の意味のページで、グランドセンチュリーがそう説明している。 本当かどうかは知らない。 桐原4500も例文で settle an argument 「論争を解決する」(桐原4500) とそのまま「論争」を使っている。 東京書籍も同様 They finally settled the argument. 「彼らはついに論争を解決した」 「論争」も名詞 argument のほか、形容詞 controversial 「物議をかもす」なんてのもあり、国公立をふくむ大学入試に出る(東京書籍4500の報告)。 旺文社1900いわく、controversial 「論争のまととなる」「論争好きな」は英検準1級に出てくる単語とのこと。 つまり、一部の大学は、私大だけでなく国公立大も含め、英検準1級の内容を出してくる。 「議論」もまた、argument, debate, controversy など、類義語がいくつもある。 この区別はちょっと高校生には無理そう。辞書を見ても違いが分からなかった。 argument, controversy には、特に、論争の対立などに重点が置かれてそうだが、証拠が無い。 弁護士に解決を依頼するときは settle である。(旺文社1900) settle down で「落ち着く」(桐原4500、旺文社1900)  ※ 例文は単語集に無し ---- 決定 determine ,decide 辞書にはないが、determine は、断固とした決意で「決心する」「決定する」である。 形容詞 determined がセンチュリー英和によると断固とした決意の意味なので、動詞determineのほうもそういうニュアンスである。 あと、ジーニアス英和にあるが、判決を下すのも determine である。 あと、予備知識がないと気づかないだろうが、東京書籍4500にある例文のように、専門家などが原因などを「特定する」ことや、判定するのも determine である。 実際には、あまり断固としてなくても determine が使われるような例文もちらほらとあるが、あくまで派生的な用法だと思うべきだろう。 だから名詞形 determination は、「決心」「決意」と覚えるべきだし、実際に桐原4500や東京書籍4500でそういう和訳である。 be determined to ~(動詞) で「~する決心をする」 である。受身形で「決心する」になる。 たとえば He was determined to ~ 「彼は~する決心をしていた」 のように使う。また、完了形にせず、過去形のままで使う(桐原4500の例文、ジーニアスの例文など)。 能動形でも「決心する」の用法もあるが、普通は上述のように受身形で使う(ジーニアス)。 検定教科書で三省堂 CROWN Iを読んでいると、高校1年でもう be determine to do を扱っている。 対する decision は、和訳は「決定」である(東京書籍4500)。桐原によるとdecisionは「決定・決断」だが、しかし上述のように、どちらかというとdesicionは比較的に「決定」のニュアンスのほうに近いだろう。 resolve でも「決意する」だが、東京書籍4500だと彼女をデートにさそう「決心」という例文であり、まったくもって断固とした必死さが足りない。 そんなのよりも、会議などの「議決」のことを resolution というのを覚えたほうが良いだろう。桐原4500に「決心」「決議」と単語の和訳だけ書いてある(例文はなし)。 ---- 減少 decrease, decline , reduce, diminish 静かな silent(沈黙に重点), quiet まず、高校英語で増減を表す場合につかう典型的な単語は、increase (「増える」「増やす」の意味)および、対義語の decrease(「減る」「減らす」の意味)である。 たとえば、三省堂『CROWN II』「英語表現」教科書では、パラグラフ・リーディング/ライティングの説明で、留学生に関する分析の文章を扱っているのだが、留学生の「増加/減少」<!-- 「/」は原著が全角文字なので、それに合わせた。 -->にそれぞれ increase/decrease という表現を使っている<ref>高等学校学外国語科用『CROWN English Expression II New Edition』、三省堂、2022年3月30日 発行、P81</ref>。 この例のように、 increase (増加)と decrease (減少)は対になって使える便利な表現であるので、まずはこれを覚えよう。 熟語というほどではないが、 ~(主語) increased by □□(数値) percent. で、「~が□□%上昇した。」である。たとえば上記のパターンで、東京書籍4500では「その商品の売り上げ」Sales of the product だし、旺文社199では「日本の実質GDP」Japan's real GDP である。桐原3000には数値上昇の例文なし。桐原は昔から単語集では定番だが、しかし桐原だけでは勉強できないこともある。 increase で増える数値はなにも百分率(パーセント)でなくてもよく、たとえばジーニアス英和では、「体重は2キロ増えて60キロになった」 increased by two kilograms to 60 kilograms. という例文もある。 on the increase で「増大して」の意味。なお、ここでの increase は名詞。 東京書籍4500では「自動車事故が増加している。」 Bike accidents are on the increase. センチュリー英和では「大都会における犯罪は増加しつつある。」 Crime in big city is on the increase. ジーニアスは on the increase の例文なし。このように、ひとつの英和辞典だけでは勉強できない。 別に on the increase を使わずとも、現在増加中のものは現在完了進行形で書いてもよく、桐原3000がそうであり、 「車の台数が増え続けている」 The number of cars have been increasing. である。 ジーニアス英和にある説明だが、よく、The number of ~ increased. で「~が増えた。」と言う例文があるが、「The number of 」を省いて直接「 ~ increased. 」のように言ってもいい。 実際、東京4500の例文「自動車事故が増加している。」 Bike accidents are on the increase. でも、 the number of は無い。 on the increase のbe動詞が単数形(is)なのか複数形(are)なのか食い違いがあるが、英和辞典を見ても、とくに言及はされていない。 increasingly で「ますます」の意味が紹介されているが(東京書籍4500。旺文社1900)、しかし例文は無い。 価値や能力を「高める」場合、enhance (エンハンス)という動詞が使われることもある。だが、辞書でも例文が少なく、あまりいい例文が見当たらないので、説明は省略。旺文社1900だと、603/1900の位置でenhanceを紹介している。だが東京書籍4500では、巻末ちかくで enhance を紹介である。桐原に至っては、4500語レベルではなく桐原5500の後半ちかくでenhanceを紹介である。 なお、遺伝学の用語でエンハンサーというのがあり、サイト『脳科学辞典』によると「 エンハンサーとは、遺伝子の転写量を増加させる作用をもつDNA領域のことをいう。プロモーターからの距離や位置、方向に関係なく働く[1][2][3]。サイレンサー(遺伝子の転写を抑制するDNA領域)とともに、遺伝子の発現調節で重要な役割を果たす。」とのこと<ref>[https://bsd.neuroinf.jp/wiki/%E3%82%A8%E3%83%B3%E3%83%8F%E3%83%B3%E3%82%B5%E3%83%BC 佐藤 達也、斎藤 哲一郎、『エンハンサー』、原稿受付日:2013年3月25日 原稿完成日:2015年1月15日]</ref>。 ほか、和製かもしれないが、音楽用語でDTM用語で、「エンハンサー」という機器がある。なお、近年ではエキサイターとも言うらしい。もしかしたら微妙に機能が違うかもしれないが、特定分野なので深入りしない。 サイレンサーというのは、銃などの減温装置などもサイレンサーというので、おそらく何かしら「エンハンサー」という機械装置が欧米にもあってそれを由来にした生物学用語なのだろうが、調べきれなかった。 なお、いくら銃に持ち運びできるような装置を取り付けても、さすがに無音にできるわけではないので(消音ではない)、「サイレンサー」という表現は誇大広告。近年は、銃の消音装置は「サプレッサー」 suppressor (「抑制するもの」というような意味)という。なお遺伝生物学では、過去の間違った学説にもとづく架空の分子に「サプレッサー」と言う用語が使われたことがあって、そのため、この語の使用をひかえている。 なお、このsuppressも高校英語であり、東京書籍4500および旺文社1900に書いてある。 suppressには(人間の集団を)「鎮圧する」の意味がある。 The police suppressed the protesters. 「警察は抗議する人々を鎮圧した。」(東京書籍4500の例文を改変) みたいに使う。 なおジーニアス、グランドセンチュリーだと The police suppressed the revolt. 「警察は反乱を鎮圧した。」 のような例文がある。revoltは高校範囲外。 東京書籍が気を利かして、中学歴史の宗教革命で「プロテスタント」を習ってるので、抗議者 protesters の例文のほうが高校生に分かりやすいだろうという気遣い(きづかい)。 silent を辞書で調べてたら、「沈黙の抗議」a silent protest という例文がジーニアスにもグランドセンチュリーにもあった。ついでに覚えよう。silentも高校英語(東京書籍4500、桐原3000、旺文社1200(いちばん簡単な黄色本))。 名詞形は silence サイレンス。 今の中学音楽の教科書は知らないが、むかし中学音楽の教科書で、サイモン&ガーファンクル(ミュージシャンのコンビ)の サウンドオブサイレンス と言う曲が掲載されていた。なので知ってる人も多かった。 The audience became silent. 「観客は静かになった。」 みたいな例文がよくある。 さて、suppress サプレスに戻る。桐原4500および5500には suppress が見つからない。 なお、suppressor はジーニアスにはあり、suppressor 「消音装置」。グランドセンチュリーにsuppressorは無い。 The streets were silent. 「通りは静かだった。」(東京書籍4500) ジーニアスに a silent street という例文があるが、street の訳が「通り」ではなく「街」。「静まり返った街」と訳している。 keep silent や remain silent で「沈黙を保つ」(東京書籍4500がremain のみ紹介。ジーニアスで両方を紹介) silent と quiet も類義語である。(桐原3000) silent は、物を言わないことに重点がある。(ジーニアス)。ただし、人間以外にも silent を使うことがあり(上述の silent street のように)、「静かな」の意味もある。 quiet との区別は難しい。 ジーニアスいわく、 a silent volcano 「休火山」= a dormant volcano とのことだが、しかしネットの画像検索で silent volcano を調べると噴火の画像ばかりである。 ほか、 The audience fell silent. 「観客は静かになった。」(東京書籍4500) ジーニアスいわく、fall silent で「急に黙り込む」とのこと。東京書籍とジーニアスの見解が微妙に一致しない。 さて、decline は自動詞であり、つまりdeclineは「低下する」「減少する」の意味である。 declineの典型的な例文が「出生率は低下している。」であり、東京書籍4500では The birth date is declining. 「出生率は低下している。」 である。 似た例文が、旺文社1400にもあり、 「出生率は低下し続けている。」 The birth rate continues to decline. である(旺文社1400)。 なお検定教科書にも decline の単語は掲載されている<ref> 、『CROWN English Communication III New Edition』、三省堂、2018(平成30)年2月28日 文部科学省検定済、2022(令和4)年3月30日 発行、P45</ref>。和訳が検定教科書に書かれてないので不明だが、その検定教科書では経済の議論の紹介で decline が使われているので、「低下する」の意味にて decline を用いているのだろう。 decline には、申し出・誘いなどを「断る」の意味もあり、桐原4500に紹介されているのはこっちの意味だけ。 しかし、高校の検定教科書に、「少子化」 declining birth rate が照会されているので、「減少」の意味のほうもキチンと覚えよう<ref>高等学校英語 検定教科書『FACTBOOK English Logic and Expression I』、令和3年5月 文部科学省検定済、令和4年2月25日発行、P18 </ref>。 名詞形 declination が、ていねいな断りの意味。 reject (計画などの「拒絶」。※却下のような意味)や refuse (拒絶)だと意味が強すぎるのだろう。 reduce は「減少させる」。3R運動のリサイクル、リユース、リデュースのあれ。  「減少」は名詞 decrease と名詞 reduction がある。 reduction は、「削減」のニュアンスで使われることが比較的に多く、桐原4500および東京書籍4500の例文が経費削減である。 reduce costs で「経費を削減する」である。 このほか、diminish や drop や fall などがあるが、やや高校範囲を超える。一応、diminishは桐原5500および東京書籍4500には書いてある。(桐原4500には書いてない。)な 一応、diminish は、検定教科書『CROWN III』で使われている<ref>高等学校学外国語科用『CROWN English Expression III New Edition』、三省堂、2018(平成30)年2月28日 文部科学省検定済、2022(令和4)年3月30日 発行、P73</ref>。 CROWN III にある例文は But the war 1990's, the threat of war diminished. という文章(抜粋)である。検定教科書に和訳がないので答えは不明だが、「しかし、1990年代には、戦争のおそれも少なくなった」ような意味である。 直前の文章では、「20世紀は戦争が多く」みたいなことを英語で言っているので、おそらくそういう意味だろう。 辞書で diminish を確認したところ、ジーニアスもセンチュリーも悪い意味に使う例文のほうが多いが、しかしCROWN IIIの検定教科書によると、とくにdiminish には悪い意味合いは無いようである。 桐原5500に書いてある例文も、 We can diminish our fear. 「恐怖を減らすことはできる。」(抜粋) なので、別にdiminish に悪い意味合いはない。 なお、桐原5500の例文は東北大の過去問。ネットでは「地方国立の入試英語なんて教科書レベル」などの言説もあるが、まあ確かに教科書にはdimisihも書いてあるものの、大分、学習量は大きい。 drop やfall は、旺文社1400の巻末にある類義語の章にだけある(本編には解説なし)。 dropは数量や人口、価格などの減少で使われる「口語的」な語(旺文社が「口語的」と言っている)。ただ、ノーベル経済学者クルーグマンのツイッターを読んでたら、「インフレの減速」のような意味で普通に drop を使っていた。 価格の低下だけでなく、派生してインフレの減速にもdropが使われることから、もしかしたら経済学などでは文語的に drop という単語が使われている可能性もあるかもしれない。 なお、「急騰する」は soar である(桐原5500、旺文社1900)。 単語集の例文だと完了形で have soared だが、急騰の結果として現在でも株価が高いなら完了形にするのが無難だろう。 インフレ率の上昇でも株価の上昇でも何でもいいが、たとえば旺文社1900が株価の上昇の典型的な例文 The stock prices of the company has soared . 「その会社の株価が急上昇した。」 である。 ジーニアスは野菜の価格の急騰、桐原5500は米価の急騰である。たとえばジーニアスでは The price of vegetables is shoring. 「野菜の価格が急騰している。」 である。この野菜の例文のように、進行形ならもちろん、現在も急騰の真っ最中になる。 時制ついでに桐原5500の例文を紹介すると、 Figure showed the price of rice had soared to record levels. 「数字は米価が記録的な水準にまで急騰したことを示していた。」 である。 なお「痛い」soreと同じ発音である。 ついでに言うと、よく景気の先行きについての見通しで「悲観的」だの「楽観的」だのマスコミ用語でいうが、これは英語でもそう言い、 「悲観主義」は英語でpessimism (ペシミズム)である。 「楽観主義」は英語で optimism (オプティミズム)である。 スペルよりも、まずカタカナで『ペシミズム』『オプティミズム』と覚えてしまおう。社会評論などの書籍などを読んでいると、ときどき外来語として「ペシミズム」などの用語を使っている場合もある。 典型的な例文として 東京書籍4500で「ボブは自分の将来について楽観的だ。」 Bob is optimistic about his future. である。 似たような例文が旺文社1900にもあり、「彼女は自分の将来について楽観的な気持ちだ。」 She feels optimistic about her future. である。 桐原4500が紹介しているが、なにも将来でなく経済に楽観や悲観を感じてもいいのである。 桐原によれば、「彼はその国の将来について楽観主義を表明した。」 He has expressed optimism about the country's economy. である。 wikiオリジナルの例文だが「トムは経済の先行きに悲観的だ。」なら、さしずめ Tom is pessimistic about the country's economy. とでもなろうか。 なお、英和辞典を見ても、例文が「~は将来に楽観的だ」とか「将来に悲観的になってはいけない」ばかりである。optimistic などの単語が経済予想や株価予想に使えることすら、辞書だけでの勉強では全然分からない。とはいえ、あまり良い市販の英語教材がない。 ともかく、また、これらの例文のように、 be optimistic about ~ で「~に楽観的だ」となる(東京書籍4500)。悲観の場合も pessimistic で同様。 念のため、派生語も含めて一覧にすると、 optimism 「楽観主義」、 optimistic 「楽観的な」、 optimist 「楽観主義者」(旺文社1900に紹介あり)、 pessimism「悲観主義」、 pessimistic「悲観的な」、 pessimist 「悲観主義者」、 である。 ---- 想像 vision, imagination, image vision は「想像」の意味があるが、「見通し」の意味もある。もっとも、見通しの意味では名詞 perspective がさらに高尚。 なお、perspective はどちらかというと「視点」の意味である。大局的な視点=見通しのようなニュアンスが perspective である。東京書籍が(大局的な)「視点」、桐原が「観点」。だが、別に大局的でなくても美術の遠近画法のことを perspective というので、東京書籍の説明はいかがなものか。 from a different perspective で、「違った視点から」 たとえばジーニアスいなる例文think about the problem from a different perspective で、「その問題を違う観点から考える」となる。ジーニアスは「観点」、東京書籍4500は「視点」と訳しているが、別にどちらでもいい。 different の部分を別の形容詞にすれば、 from ~ perspective で、「~の視点(観点)から」になる。 なお、スペルの似ているprospect は、何か良いことの起きる「見込み」、成功の可能性のこと。 たとえば形容詞 prospective は「有望な」の意味である。 ジーニアス英和によると、もともとはprospectは高いところからの「展望」のような意味だったようである。桐原4500にprospectが書いてある。 「見込み」outlook という単語もある(桐原5500 のprospect)。桐原5500では prospect の「見込み」の類義語として紹介されている。 もし、「観察力」とかを言いたい場合、observe 「観察する」である。 「洞察力」なら、penetrating 「洞察力のある」である(旺文社1900。桐原5500)。ただし、洞察力の意味での例文は単語集に無い。動詞penetrate には「浸透する」の意味もあって、そちらの例文が市販の単語集には書いてある。 もっと簡単な単語としては insight 「洞察力」という名詞があるので、これを使って洞察力を表現する方法もある。 なお、 語法 give A insight into B で「AにBの見識を与える」 である。 名詞 vision にも、「見通し」「洞察力」などの意味があるので、これでも洞察力を表現できるだろう。ただし、単語集にその用法での例文は無い。 旺文社1900によれば、 a one's(myなど) point of view で「〜の観点から」の意味。だが、これを直接暗記するよりも、まず名詞 view には、「眺め」の意味のほかにも、「見解」の意味があることまず知るべき。 慣用的に in my view, 「私の考えでは、」(ジーニアス、センチュリー)という表現がある。「考え」と訳しているが、「私の見解ですが、」くらいに訳したほうが分かり易いだろう。ただし、英語の view には、個人的な感情も含んで見方を示しているので、そういう意味で辞書では「意見」としたのかもしれない。 だが、 in my view は、ジーニアスによれば、in my opinion よりも控え目な言い回しとして使われる。 まあ、読者の自己責任で和訳してください。 単語集にはないが、viewpoint 「観点」という単語がある。ジーニアスの例だと、 From an economic viewpoint, 「経済的な見地からすると、」(その計画には利点がない) と続く。 センチュリーだと、 〜 from the viewpoint of employees. 「従業員からの立場からみれば」(昇給はよいことだ) となる。 旺文社の大学入試出る順シリーズに a point of view が書いてあるから、たぶん入試に良く出るんだろうが、正直言って瑣末な単語であろう。実際、桐原も東京書籍も a point of view を紹介していない。ジーニアスやセンチュリーにすら、少なくともview の項目には書いてない。辞書でpoint で調べると point of view が書いてあるが。 たとえば、センチュリー英和では「アメリカ人の視点から見ると、」(謝罪は自分の誤りを認めたことになる) From an American point of view, 〜 ジーニアス英和では「財政的見知では、」(これは由々しき問題だ) From a financial point of view, 〜 などの例文がある。 熟語 in terms of ~ で「~の点から」。なお terms はterm の複数形。東京書籍4500と桐原4500に似た例文があって、東京書籍「その計画は費用の点から現実的ではない」The plan is not realistic in terms of cost. なんで terms と複数形なのか不明と思うだろうが、しかし英和辞典にも in terms of と複数形で紹介されているので、受け入れてもらうしかない。 いっぽう、桐原「この計画は時間と費用の関係で現実的ではない。」 This schedule <nowiki>isn't</nowiki> realistic in terms of time and costs. term ついでに言うと、医療の末期医寮などでターミナルなんとか terminal 〜 とかあるが、辞書で確認すると用語term と末期terminal の語源は一応は同じだが、事実上は意味のまったく違う別の単語だと思うほうが良いだろう。東京書籍4500がそういう見解であり、「用語」 term と 「末期の」「終末の」 terminal を別々の項目として紹介している。 「末期の」の典型的な例文としては、「末期ガン」 terminal cancer がある(東京書籍4500. ジーニアス、センチュリー)。 桐原4500 では terminate 「終わりにする」が紹介。terminateの紹介位置が巻末ちかくの付録のため、例文なし。 駅や空港などのターミナル terminal も、同じスペルである。駅近くなどのターミナルも、もともとは何かの終着のことだったのだろう。 なお、駅が公共バスなどの終点である事例は多い。 そういうバスターミナルのことも、ジーニアス英和いわく a bus terminal であり、またはセンチュリー英和いわく単に terminal という。 センチュリー英和は、バスのターミナルを単に「終点」と訳している。 さて、term には、「用語」の意味の他にも、「期限」「期間」の意味がある。 形容詞 long-term で「長期の」という意味である(旺文社1900)。 単語集にはないが、termination 「満期」「満期の」という単語がある。term にはそういう、限度のある期間的な何かのニュアンスもある。関連づけて覚えよう。 小中高の学校の「学期」もtermであるが、普通は3学期制の「学期」のことをいう(ジーニアスsemester で確認。ほか旺文社 semester )。大学の「前期」「後期」といった2学期制の場合は semester という(旺文社、ジーニアス semester )。 なお、日本の大学は、年間で「前期」「後期」という2学期制である。少なくとも日本の大学はそうである。 英米では、「秋学期」the fall semester と、「春学期」 the spring semester という言い方をする。 普通、英米では、9月から翌年1月までが「前期」the first semester であり(センチュリーで確認)、「秋学期」the fall semester という言い方をする(センチュリー、旺文社)。 普通、英米では、2月から8月までが「後期」the second semester であり(センチュリーで確認)、「春学期」the spring semester という言い方をする(センチュリー、旺文社)。 果たして大学でもし3学期制の学校があったら何というのかは知らない。まあ、単語なんて所詮は、社会の現状に合わせて言葉が作られるので、社会に存在しない制度の呼び名を考えてもラチがあかない。 imagination は「想像する行為」または「想像力」のこと。 image は、想像によって脳内に思い浮かんだ「像」や「印象」のこと。 動詞形は imagine である。実はimageも動詞とみる場合もあるが、しかしジーニアス英和ではimageの動詞用法は不採用である(ジーニアスでimageを見ても、動詞の用法は無い)。センチュリー英和だと、imageの動詞の用法が書いてある。 形容詞 imaginary は、「想像上の」「架空の」「実在しない」である(ジーニアス英和。センチュリー英和)。 ジーニアスでもセンチュリーでも、「創造」ではなく「想像上の」である。 スペルの似た imagery という単語があり、旺文社には『(集合的に)「比喩的表現」』と書いてある。辞書を見てもジーニアスでしか見つからず、例文もなく、よく分からないので説明を省略。 単語集にはないが、理科のレンズの実像(a real image)や虚像(a virtual image)などの「像」も image である(ジーニアス英和)。 旺文社1900にあるが、テレビの「画像」も image である。上述のレンズとテレビを合わせて考えれば、つまり、光学の像も image であるし、実際に英和辞典ではそう紹介している。 なお、イメージダウンなどは和製英語。イメージが悪化した場合は a bad image のように言う(ジーニアスで確認)。 なお、仏像とか銅像とか、ああいったのは「塑像」(そぞう)とか「彫像」(ちょうぞう)とかいうが、「塑像」・「彫像」の英語は statue (スタチュー)である。単語集を見ると巻末の索引に statue が書いてないので一見すると高校の範囲外だが、しかし自由 liberty で東京書籍4500を見れば「自由の女神像」 the statue of liberty が書いてある。桐原の検定教科書『EMPOWER II』にも、P28に「自由の女神像」 the statue of liberty が書いてある。 このように、「自由の女神像」 the statue of liberty は事実上の高校必須の単語である。 liberty「自由」は普通、国家権力からの自由の事を言う。 だから liberal は形容詞「自由主義の」または名詞「自由主義者」の意味がある。(桐原4500が名詞「自由主義者」も紹介している。東京書籍は形容詞だけ。) liberalism 「自由主義」である。 statue は、桐原の検定教科書『EMPOWER II』にも、P31に「ブロンズ像」 a bronze statue が書いてある。 光学ついでに言うと、「反射する」は reflect である。典型的な例文が、「日光を反射する」reflect sunlight である(東京書籍4500、センチュリー)。 ジーニアスには「鏡は光を反射する」 A mirror reflects a light. という例文もある。 だが、桐原4500や旺文社1900では、reflectの、意見などを「反映する」の意味のほうが紹介されている。 とりあえず、ジーニアスによれば「世論を反映する」 reflect public opinion である。 センチュリーや桐原や旺文社を見ても、「反映する」は他動詞的に使うのか自動詞的に使うのか、能動形や受動形か、あまり使い方がはっきりしない。 reflect on ~で「熟考する」「回想する」の意味(旺文社1900では熟考、東京書籍では回想を紹介)。東京書籍のには例文あり。著作権のため本ページでは紹介しない。 名詞形には reflection と reflex がある。意味が微妙に違うので、必要な場合には英和辞典で確認せよ。 なお、単なる「視野」や「視界」のことは view である。だが、辞書でviewの項目を見ると、「見解」の意味が先に書いてある。少なくともジーニアス英和とセンチュリー英和はそうである。辞書よりも単語集で勉強しよう。 ---- 可能性 possibility, probability, likelihood 成功の見込み、成功の可能性 prospect 潜在能力 potential probability (プロバビリティー)は「見込み」「確率」の意味(旺文社1900)。数学の「確率」で probability が使われるので、もし確率ではない単なる「可能性」のことをいいたい場合は、別の言い回しが必要な場合もあるだろう。 関連語として、副詞 probably「たぶん」がある(旺文社、桐原)。 形容詞 probable (プロバブル)については It is probable that ~  「たぶん~だ」 の意味(桐原4500、旺文社に似た和訳)。 対義語 impossible (インポッシブル)「不可能である」も覚えておきたい。 ほか、prospect は、何か良いことの起きる「見込み」、成功の可能性のこと。 「可能性」を意味する likelihood (ライクリフッド)という単語もある(旺文社1900巻末)。副詞 likely 「ありそうな」の名詞形である。 possible (ポッシブル)について、 It is possible that 人 to do で「人が do するのは可能だ」の意味(桐原4500、東京書籍3000)。 capability (ケイパビリテイー)は「能力」である(桐原4500)。可能性は関係ない。 ability (アビリティー)は「能力」「才能」である(桐原4500)。可能性は関係ない。 「たぶん」を意味する副詞の maybe(メイビー) と perhaps(パハップス) と probably(プロバブリー) については、省略。書きたくない。 東京書籍3000が、ひとまとめで maybe や perhaps と probably を説明している。 東京書籍3000は紹介していないが、 likely (ライクリー)形容詞「ありそうな」、副詞「たぶん」という単語もある。 名詞および形容詞のpotential (ポテンシャル)は翻訳の都合で(名詞の場合なら)「可能性」と訳す場合もあるが、なるべく「潜在能力」 potential という訳で覚えましょう。 形容詞としての場合、「潜在的な」で potential を覚えましょう(桐原3000巻末)。 物理学の位置エネルギーのことを英語で potential と言いますので、科学的な専門用語でもあります。 桐原3000巻末のセンター試験特集によると、「潜在能力」などの意味ですが potential はセンター試験での出題をされた単語らしいです。 センター出題の背景事情として、ポテンシャルは物理学などで使う用語だという背景があります。 日本語でも、物理学の専門書などを見ると、普通に「ポテンシャルエネルギー」とか単に「ポテンシャル」などと言ったりもします。 ---- 計画 scheme, plan, project ~するつもり intend , plan 桐原4500 が scheme を「たくらみ」の意味だけ例文で紹介している。勘弁してほしい。 まず、旺文社1900 が例文で、政府の「新しい住宅供給計画」を The new housing scheme といってるように、比較的にきっちりとした計画のことである。 桐原・旺文社の単語集にもあるように schemeに「体系」とかの意味もあって、だからニュアンス的には、体系だった計画のような感じがある。 念のためジーニアス英和を見ると、scheme の意味として「政府の公共計画」、「会社の事業計画」などが挙げられている。 そして、そういう派生として、「陰謀」(旺文社)、「たくらみ」(桐原)を覚えるべきだろう。語源はともかく。暗記の負担を減らす理解としては、たとえば :陰謀は大規模・身の程知らず → 大規模な計画は scheme という → じゃあ陰謀も scheme でいいか 的な連想とかで覚えるのがラクかと。 高校生に語源の知識はいらないし、もし語源が「たくらみ」だというなら、そういう情報を先に教えるべきだし、念のためジーニアスで語源を見てもsdhemeの語源は『「形」が原義』とのことだし、あるいはもし有名大学が入試でscheme の「計画」の意味も出題せずにschemeの「たくらみ」を出題しているならその大学が批判されるべきだろう。 なので、ジーニアスもいってるように、scheme は plan よりも固い語である。 ジーニアス英和やセンチュリー英和にあるように 大綱とか図式とか、学問などの体系とか、教育体系とかも scheme という。 たとえばセンチュリー英和が教育体系なら an educational scheme だと言っている。 plan は「計画」をあらわす一般的な語(ジーニアス)。 project は、長期の「計画」を表す(東京書籍3000)。projectを「事業」「プロジェクト」などと訳す場合もある。東京書籍では「プロジェクト」という訳語を紹介している。 辞書では特にplan と project の違いは述べられていない。だが project の用例を見ると、橋やダムなど公共インフラの建設計画などがよく project で表現される。 「ダム建設の事業」 the project ro build the dam である(東京書籍3000。センチュリーに似た例文)。 「橋の建設の事業」なら a project to build bridges である(ジーニアス)。 別に公共インフラでなくてもよく、ビルの建設計画でも良い。 なお、大規模な工事などを「計画する」という意味で動詞 project もある。アクセントが名詞と動詞とで異なる。 名詞は、プ「ラ」ジェクトの「ラ」にアクセントがある。なお、日本語では「プロジェクト」と書かれるが、英語ではどちらかというと「ロ」ではなく「ラ」であり、プロジェクトである(センチュリー、ジーニアス)。 動詞は、プロ「ジェ」クトの「ジェ」にアクセントがある。 学生などの研究課題も project という、 計画する plan , intend 動詞 intend to ~ 「~するつもり」は、計画だが、やや欲求・意思に重点を置いている。 動詞 plan は、計画性に重点を置いている。 plan to ~ は「~することを計画している」と訳すのが普通。(「~するつもり」ではなく) plan a trip to Hawaii 「ハワイ旅行を計画する」(東書3000) plan to go to Ireland 「アイルランドに行くことを計画する」(桐原4500) 進学などの予定は、intend も plan も使う。 Bob intends to learn karate in Japan.「ボブは日本で空手を習うつもりだ」(東書3000) Most of these students intend to continue their education at university. 「ここの大半の生徒は大学へ進学するつもりだ」(桐原4500) べつに進学や就職でなくても、 She intends to go to bed early tonight.「彼女は今晩早くねるつもり」(桐原1900) Where do you intend to go to tomorrow? 「明日どこへ行くつもりだい」(ジーニアス) のように intend は今日とか明日の予定でもいい。 名詞形は intention 「意図」である。単語集には例文は無し。高校レベルを超える。(いちおう、東書4500に「意図する」のintend の例文あり。) ただ、どうしても「意図的」とか言いたい場合は、intentional とかintentinally みたいにその系統の語を使うのが安全そうである。 桐原5500 に deliberate 「意図的な」という語があるが(昔の上智大に出た単語らしい)、intention などとの使い分けが英和辞典を見ても言及されておらず、またネットで調べても情報が一致しない。あるサイトでは、欲求にしたがった意図だという主張もあれば、別のサイトでは熟考した上でも意図だという主張もあり、不一致である。 なお「配達」などの delivery とは語尾のvが違う。bとvの違い。 いちおう deliberate に「熟考した上での」という意味もあるが、しかし、あまり行儀のよろしくない行動にも deliberate の「意図的な」を使う例文もあるので(たとえば故意犯みたいな)。・ a deliberate insult 意図的な侮辱(ジーニアス) the fire was stated deliberately その放火は意図的だった(グランドセンチュリー) みたいな。 もちろん悪事だけでなく、良いことにもdeliberate を使ってよい。 a deliberate refusal よく考えた上での辞退(ジーニアス) ---- 陰謀(主に「共謀」) conspiracy たくらむ scheme 高校英語としては、陰謀で覚えるのは conspiracy と、あとはschemeで十分だろう。 ジーニアス和英辞典によると。「たくらむ」には、plot, conspire , scheme , contrive ,hatch がある。 これらの単語には、陰謀以外の意味で使われるものあり、 比較的に簡単な単語なら、 plot は、よく数学的なグラフに「点を打つ」とかの意味で使われる。 なんと高校の単語集には plot がない(桐原3000・4500・5500と東京書籍3000・4500を調べた)。点 point とか教えてるのに「点を打つ」plot がないとは、英語教育の界隈はどういう了見か。反省を願う。中学数学レベルの簡単な英単語も教えられないくせに conspiracy とか教えているのか。 一応、「x軸」 x-axis とか「y軸」y-axis とかは、検定教科書で見かける<ref>高等学校学外国語科用『CROWN English Expression II New Edition』、三省堂、2022年3月30日 発行、P145</ref>。 ジーニアス英和で plot を見ると、「(裏切りの)陰謀」「たくらみ」が最初の意味だが、なんだかなあ。いまどき plot なんて数学の座標で使うのが人生で最初だと思うが。 センチュリー英和の言うように、地図や図面などに位置を書き込むことがプロット。 なお、小説などの筋書きも plot といい、センチュリーはこの筋書きの意味をplotの名詞の項目で最初に紹介している(動詞のほうは、「たくらむ」だけ紹介)。 しかしセンチュリーのほうだと、動詞には、図面や地図に位置を書き込むことの動詞がない。 本当もう勘弁してほしい。英和辞典ともあろうものが中学校レベルの英語くらい書けないのか。 scheme は上述のような体系的な「計画」だし、 hatch は(鳥などが)「ひなからかえる」「卵からかえる」「卵をかえす」とかの意味。船などの昇降口のハッチ hatch とスペルが同じ。 contrive には、(ジーニアス英和によると)「考案する」・「うまくやりとげる」の意味もある。 conspire が、「共謀する」の意味。桐原5500でも、conspiracy の例文の主語が複数形になっているので、和訳には「陰謀」とあるが内容は「共謀」である。 ちなみに「陰謀」の名詞は、桐原5500が紹介しているのは、intrigue (イントリーグ)とconspiracy (コンスピラシー)である。 これだと意味が強すぎるので(政府転覆とか)、ちょっと何かをたくらんでいるぐらいの場合に、scheme とか plot とかを使うとよいのだろう。 ジーニアス英和で intrigue を調べてみたが、例文がなく、よくわからなかった。なお、名詞も動詞も intrigue である。 ---- 多様性 variety ,diversity 東京書籍4500は variety と diversity の違いの細かい説明をあきらめている。 diversity のほうが高尚な言い回し。 東京書籍の言うには、形容詞 variousが「いろいろ」「さまざま」。名詞 diversity が「多様性」である。 熟語 a variety of ~で「様々な」の意味(桐原4500)。 桐原4500および旺文社1900に至っては、そもそもdiversityの項目・ページではvarietyを紹介していない。 桐原4500 が「民族の多様性」 ethnic diversity という表現を使っている。 センチュリー英和がdiversityの項目で biological diversity 「生物学的多様性」という表現を使っている。 「生物多様性」のことを biodiversity または biological diversity という(旺文社1400)。 biodiversity は辞書(ジーニアス、センチュリー)に書いてある。 辞書のbio- の項目では、biological diversity は辞書では見つからなかった。 なお、ややこしいことに、diversity およびvariationには「差異」「相違」という意味もある。 和製英語のバライエティーおよにバリエーションは、やや意味が間違っている。 variation は、「差異」・「相違」・「変化」の意味(東京書籍4500および旺文社1900)。高校数学ではわかりづらいが、大学の数学で「変分法」という微分積分の発展的な分野のようなものがあって、これに variation という英語が相当している。( [https://kotobank.jp/word/%E5%A4%89%E5%88%86%E6%B3%95-131413 コトバンク『変分法』] )この変分計算では、関数中にある変数の代入値を少しだけ変化させたら関数がどう変化するかを考察しているので、英単語 variation の訳語のニュアンスに近い。 なお「微分」はdifferential、導関数はderivative なので、混同しないように(※ 大学受験に出ないので覚えなくて言い)。 桐原4500の例文にもあるが a diversity of ~ で「多種多様な~」の意味。 a diversity of wildlife で「多種多様な野生生物」と桐原4500が紹介。 なお余談だが、近年では国籍や性別(男・女のほかにも、さらにはLGBTなど)などの多様性のこともよく「ダイバーシティ」 diversity といい、よく人権などの関係した議論でこの用語護が出てくる。今後の公民科目などの範囲になるだろうから、本・英単語集のページでは深入りしない事にする。 ---- 十分・充分 sufficient ,adequate, enough sufficient ⇔ deficient 適切である suit, be adequate for, enough は形容詞にも副詞にも使われる。 sufficient と adequate は形容詞。 ジーニアス英和に、adequate の類語が sufficient , enough だと書いてあるが、ニュアンスの違いは見当たらなかった。 形容詞 sufficient 「十分な」は enough よりも固い語である。 だが、その用法だけではない。 強制ではないが、sufficient は、質・量ともに十分な場合に好まれて使われるニュアンスがある(センチュリー)。 一方、単に量が多い場合や、特に質が問われない場合などに enough を使うという、使い分けがある。 be sufficient to ~(動詞) 「~するのに十分である」 である(桐原、東京書籍)。 sufficient の名詞形は sufficiency 「十分足りること」である(桐原)。 対義語は insufficient 「不十分な」、または deficient 「不足した」(デフシュント)である(東京書籍)。 センチュリーいわく、sufficient では質も問われるニュアンスがあることも合わせれば、対義語との関係は、 (質・量とも)「十分な」sufficient ⇔ deficient(質・量が)「不足した」 である。 センチュリーの訳語を比較した範囲では、insufficient よりも deficient のほうが絶対量の不足という意味合いが強そうであった。そのためか、deficinet は「欠乏」と訳されることもある(センチュリー)。つまり deficient 「欠乏した」「不足した」などの意味である。 名詞形 deficiency 「不足」「欠乏」「欠陥」という単語もある(旺文社 deficit 項目、センチュリー)。 ほか、貿易赤字などの「赤字」は 名詞 deficit (デフィシット)である。 つまり、「赤字」 deficit である。 「貿易赤字」は a trade deficit である(旺文社、センチュリー)。 数学用語だが、「十分条件」は sufficient condition である(旺文社1400)。なお、「必要条件」は necessary condition である(旺文社1400)。 sufficient O(目的語) to V(動詞の原形) で、「Vするのに十分な量のO」 ~ be sufficient to V で、「~はVするのに十分だ」 be adequate for ~ は、「~に十分な」とのことだが(東京書籍)、しかしジーニアスを見ても例文がなく、よく分からなかった。 be adequate for ~には「~するのに適している」の意味もある(桐原)。 「適切である」を言いたいなら、動詞 suit (スート)ひとつで足りるだろう。 たとえば 「このソフトウェアはプログラミングに適切です。」 This software suits programming. のように(wikiオリジナルの例文)。 suit 自体は桐原4500・東京書籍4500・旺文社1900の3冊とも紹介しているのだが、 しかし「適切である」の例文は、東京書籍しか紹介していない。 しかも、待ち合わせの時間が「好都合である」の訳。 違う英文だが、 (待ち合わせの時間を聞かれた返事で)「金曜日が好都合です」 Friday suits me. のような使い方(オリジナル。ジー二アスに似た例文。センチュリーに似た例文)。 桐原が紹介している例文は背広のスーツだし、旺文社のは「訴訟する」の suit である。 ---- 不足 lack , shortage かつて受験英語などで「欠乏」lack ,「不足」shortageのような使い分けがあったが(実際、ネット検索するとそういう説明も出てくる)、しかしこの分け方は正しくない。なぜなら、英和辞典で lack の項目を見れば、単に不足している場合でも lack を使っているからだ。 lack と shortage の違いは、たとえば「同情に欠ける」とか「常識に欠ける」がlackである。 センチュリー英和を読むと形容詞 lacking の説明で、be lacking in common sense という例文で、「その学生は常識が足りない」という例文もある。 どうも、lack は、慣用句として、配慮が欠けている場合に使うのが英米では自然なのかもしれない。また、その言い回しが、配慮を欠けている事実自体を主張するおかにも、どうも不足の現状に対して非難や批判などのニュアンスも込めてlackが使われていそうである。 おそらく、辞書にあるlackの訳語の「欠乏」が間違っている。ジーニアスにもセンチュリーにも「欠乏」が書いてあるが、正しくは「欠如」(けつじょ)である。(ジーニアスに「欠如」が書いてある。)あるいは、辞書にはないが「欠落」あたりだろうか。欠乏の「乏」とは貧乏の「ぼう」である。 ジーニアスには、lackについて「十分にはないことをいう。まったくない場合はabsence」といっている。ジーニアスはせっかくここまで説明しておいて、なぜ「欠乏」という訳語を使い続けるのか。 欠席のことを be absent from (classなど)というが、上述のabsenceはその形容詞absentの名詞形。つまり、英語では「欠乏」と「欠席」とが同じ単語だという事。 absenceは、ゼロの状態だから、「ゼロでないけれど、大幅に足りない」みたいな表現には向かない。そういう深刻な不足を言いたい場合は、たとえば a serious shortage となるだろう。実際、センチュリ-のsortageの項目に例として a serious shortage (深刻な不足)や an acute shortage (深刻な不足)や a severe shortage (深刻な不足)などが 書いてある。<!-- 原著で訳語「深刻な不足」をそれぞれの単語に書いてあるので、けっしてwikiでひとまとめにしないこと。またニュアンスも微妙に違う。--> さて、食料やら金銭やらが物理的に足りない場合は、どちらでもいいが、辞書を見る限り shortage のほうがそういう物資の不足での例文が多い。 たとえば東京書籍4500にあるが water shortage である。 食料不足は、東京書籍4500では The shortage of foodだが、センチュリー英和では food shortage である。 労働者不足が the shortage of labors である(旺文社1400(簡単なほう))。 医師不足が a shortage of doctors である(桐原4500)。 冠詞 a と the の違いは文脈に応じただけのものなので、読者は気にしなくていい。 なお、lack は動詞の場合もある。 単語集を見ても、lackとshrtageの違いとか、書いてない。まったく。 ---- 直観と直感 intuitive(直観), 洞察 insight 英語というより日本語の問題なのだが、「直観」と「直感」では意味が違うので注意が必要である。 「直観」には、洞察力のようなニュアンスがある。 だから 直観の intuitive は、「直観的な」「直観力のある」などと訳す(東京書籍4500)。 名詞形 intuition だが、桐原5500の例文の和訳で(なお東大の過去問例文)「動物、中でも人間は起こりそうなことに関して鋭い直観力を発達させたと考えることができるだろう。」 We <nowiki>coudn't</nowiki> expect animals, especially humans, to have developed sharp intuitions about probably. とある。 英和辞典でintuitive などを見ても、ほとんど例文がないので(センチュリーには例文がなかった)、桐原のこの例文を学ぶのが良いだろう。 あるいは英和中辞典などを見れば例文があるのかもしれないが、さすがに高校英語でそこまでする必要はないだろう。 あと、東大は辞書を見ても満足に例文のない単語を大学入試に出しているわけだが、はてさて、見識が問われますなあ。まさか高校生に中辞典を買わせるつもりでもあるまいし。 もっとも、「洞察」「洞察力」については insight という別の専用の単語があり、普通に4500語レベルの単語集にある。 いっぽう、「直感」は、単なる勘に近い。和英辞典によれば、hunch とか scent が直感である。(高校の単語集にはない) センチュリー英和によれば hunch は「虫の知らせ」で、口語のニュアンスがある。 scent には、名詞 scent には「勘」の意味もあるが、「臭い」とか「嗅覚」とか「香水」の意味なので、動詞scent には「かぎつける」の意味もある。 hunch も scent もこういうふうに口語っぽい内容なので、まあ単語集には出ないだろう。 そのほか、名詞 instinct (本能)にも「勘」の意味があるが、どちらかというとinstinctは「本能」で覚えたほうがいいだろう。 ---- 結果 consequence , result 辞書にはconsequenceでは「結果の重要性を意識している。resultより固い語」とか書かれるが、 だが、東京書籍4500にはconsequenceは「通例望ましくない内容について用いられる」と説明がある。 実際、センチュリー英和で例文を見れば 「戦争の結果」In the consequence of the warだとか ジーニアス英和だが「結果として戦争になった」have grave consequence (「重大な結果をもたらず」※戦争の婉曲表現)とか、 あと形容詞だが「天候不順の結果の食糧危機」food shortage consequent on bad water とか、 そんな例文ばかりである。 どうやら consequenceは、結果の深刻性を感じてほしい的なニュアンスのようだ。 なお桐原4500および旺文社1900みても、そういうニュアンス説明は無い。 ---- 取得・獲得 acquire acquire は、(技術・知識などを)(努力して)「得る」の意味。(東京書籍4500など) 典型的な例文で、 acquire a new skill 「新しいスキルを身につける」 がある(東京書籍4500。旺文社1400にも近い例文)。 「外国語を習得する」acquire foreign languages という例文もよくある。(桐原4500。センチュリー英和aquireの項目) 辞書にはよくaquireの用法で「(知識などを)身につける」とあるが、しかし語学のようなレベルの「知識」である。 acquire には「習得」以外の用法もあって、 努力して大金や土地などを「獲得する」ことも acquire というが、単語集には例文がないので、説明を省略。桐原の単語集に「(努力して)獲得する」とだけ説明してあって、技術の習得の話をしてないのは、土地などの獲得を意識したものだろう。 ---- 「異国風」 exotic 形容詞 exotic (イグザティック)は、通例では、欧米人の目からみて「異国風」という意味であり(旺文社)、けっして単に異国風なだけでなく、加えて、めずらしくて面白かったり興味をひかれる性質のことである(ジーニアス、センチュリー)。 具体的にいうと、日本国内で言うなら、京都などの寺社は exotic だろう(特に出典は無い)。日本に存在していても、東京の高層ビル群などは exotic には写らないだろう。 日本語でもローマ字読みで「エキゾチック」と言う。日本でも、よく文学評論とか芸術評論とかで使われる単語なので、覚えておきたい。もっとも日本で「エキゾチック」と言う場合、東南アジアや中東やアフリカなどの観光的な光景なので、英語とは微妙にニュアンスが違うが。 さて英語では、動物や植物が「外来種」や「外国産」などの場合も exotic という。農産物だけでなく、言葉が外国由来の場合も exotic という。 旺文社の単語集で、動物園の例で exotic と言っているのは、そういうニュアンスもあるだろう。 桐原と東京書籍の単語集では、exotic が見当たらない。 辞書によると、「外国の」・「外国人」という意味もあるとのこと。言葉が外国由来の場合も exotic というので、それと関連づけて「外国人」なども覚えよう。 ---- 広さ broad, vast broad は、幅が「広い」。 典型的な例文が 「(道幅の)広い通り」 a broad street である(東京書籍4500および桐原4500)。 幅広い知識 a broad knowledge とか(ジーニアス)、「幅広い趣味」 a broad range of hobby とか(東京書籍4500)のように、物体以外の知的興味の広範さにもbroadを使う。 インターネットのブロードバンド broadband のブロードと同じ単語(東京書籍4500)。 vastは、面積が「広大な」である(東京書籍4500)。だが実際はセンチュリー英和では、ビル(建築物)や宇宙などもvastだとする例文を提示している。 broad の対義語は narrow 「狭い」。 体積が大きいのは huge 「巨大な」。(桐原4500。ジーニアス英和) なお、「体積」は英語で volume である(旺文社1400、桐原4500)。volumeの意味は、「体積。容積。音のボリューム。本などの一巻。」の意味である。 turn the volume up で「音のボリュームを上げる」である(旺文社、東京)。 「音量を下げる」なら turn the volume down である(東京)。 コンテナの「容積」とかも、volume である(旺文社)。 the volume of the container 「コンテナの容積」である。 科学や工業などの「容積」「体積」でなくとも、たとえば「交通量」the volume of the traffic とか(東京書籍)、「ごみの量」the volume of garbage とかにも volume は使われる。 ---- 娯楽 amuse , entertain センチュリー英和によれば amuse は笑わせる事などのような意味での「楽しませる」。 entertain は、知的な面白さに重点がある。 entertain でよくある例文が、話や音楽で聴衆を楽しませる系の例文(東京書籍4500およびセンチュリー英和)。 たとえば entertain the audience で「聴衆を楽しませる」(東京書籍)。 また、熟語 entertain A with B で「AをBで楽しませる」。 センチュリー英和によれば Now let me entertain you with music. で「それでは音楽でお楽しみください」。 entertain には、自宅で客を「もてなす」の意味もある。 よくある例文が、ホームパーティなどで友人をもてなす系。 entertain their friends at their home 「友人をパーティでもてなす」(東京書籍) entertain our friends at a party 「自宅で友人をもてなす」(旺文社1400) ただし、実際の例文を見ると、あまり違いは明確ではない。 名詞形のamusement もentertainment も、それぞれ「娯楽」の意味で使われる。 ---- 殺害 murder , kill murder (マーダー)は「殺害する」の意味の動詞、および名詞としての用法では「殺人」一般の意味である。「殺人犯」はスペルが murderer (マーダラー)であり、スペルが微妙に違う。混同しないように。 「殺人未遂」は an attempt murder である(東京4500)。 「殺人事件」は a case of murder である。 なお、attempt は、困難なことを「試みる」という意味の動詞および名詞(東京書籍)。ジーニアスは、入念な計画と実施の必要な試みが attempt だと説明している。 名詞としての attempt は「試み」などと訳す。 典型的な例文で、 attempt to escape 「逃げようと試みる」 がある(東京書籍3000、桐原4500)。 脱走計画だとかそんなのだけでなく、ジーニアスいわく、エベレスト登頂の「試み」でも attempt とのこと。 90年代、かつて英語単語集に「massacre」(マサカ)という「大虐殺する」の意味の単語がよく載っていが、現代の単語州には無い。「まさか、人を殺すとは!?」という語呂合わせでよく紹介されてたものである。昔の単語集には、ちょくちょくコラム的にゴロ合わせなどが紹介されていた。 英和辞典(ジーニアス、センチュリー)で確認したところ、massacre に「大虐殺」の意味はあるが、一個人の「殺害する」のような意味は紹介されていない。語呂が不正確である。 しかし、近年に「虐殺」でよく目にするのは genocide である。ルワンダ虐殺とか、歴史的に名前が残っている事件の虐殺は genocide が普通であろう。検定教科書でもルワンダの虐殺について genocide という表記を行っている<ref>高等学校学外国語科用『CROWN English Expression III New Edition』、三省堂、2018(平成30)年2月28日 文部科学省検定済、2022(令和4)年3月30日 発行、P75 </ref>。 kill や killerとの違いは、killは人間以外のものにも使う。人だけでなく、動物や植物、虫、植物なども、それらを殺したり、あるいはそれらに殺されたりする場合に、killである。 たとえば「魚を殺す」 kill fish である(東京書籍1800)。 それどころか、交通事故などで「死ぬ」場合も kill である。 be killed in ~(戦争や事故など)で「~で死ぬ」の意味。典型的な例文が「大勢の人がその戦争で死んだ。」 Many people are killed in the war. である。(桐原3000と旺文社1200に似た例文あり) killer については単語集にはないが、名詞として「殺人犯」や「殺すもの」の意味のほかにも、形容詞として「致命的な」の意味もあり、たとえば「致死的な病気」 a killer disease などの例文が典型的。 ---- 奪う・盗むなど 奪う deprive wikiオリジナルの例文だが、 The war deprived the children of the liberty. 「戦争が子供たちから自由を奪った。」 のように言う。 桐原4500に「戦争が、この子供たちからふつうの家庭生活を奪った。」 The war deprived these children of a normal home life. とある。 旺文社1900では「軍隊が国民から自由を奪った。」 The military deprived the citizen of their liberty. である。、 自由は別にliberty でなく freedom でもよく、たとえば東京書籍4500では、 「多くの子供たちが自由を奪われている」 A lot of children are deprived their freedom. とある。 熟語 be deprived of~ で「~を奪われている」である(東京書籍4500)。 また、deprive A(人) of B で「A(人)からBを奪う」である(旺文社1900。桐原4500)。 盗む rob , steal 動詞 rob は、ふつう、強盗とか 引ったくり とかスリに使う。スリかと思われる例文については、たとえば旺文社1900にある(電車で女性から財布を奪う例文)。 rob A(人) of B で「A(人)からBを奪う」である(桐原4500。東京書籍4500)。 東京書籍に典型的な例文「彼らは銀行強盗をした。」 They robbed the bank. である。 派生語として、「強盗」 robber がある。「強盗事件」は robbery である(桐原4500。東京書籍4500)。 スペルの似ている rid という名詞・動詞があるが、「取り除く」の意味である。 熟語で get rid of ~ で「~を取り除く」である。 rob と rid は意味がまったく違うので、混同しないように注意。 なお、こっそりと者を盗む「泥棒」はthief (シーフ)である(桐原4500)。桐原3000を読めば、こっそり盗む者がthief であるし、ジーニアス英和の thief の項目にもそう書いてある。 なお、複数形は thieves である。ナイフの複数形の活用と同様。さすがにthiefの複数形を筆記で入試に出すのは瑣末すぎるので出題されないだろうが、まあ参考に。 こっそり「盗む」は steal である。桐原3000を読めば、stealの意味は「こっそりと」盗む、と書いてある。 なお、スペルの似ているsteel は「鋼」(はがね)。 さて、「盗む」stealの活用は、 steal - stole (過去形)- stolen (過去分詞) である。 東京書籍4500の例文「泥棒が私のコンピュータを盗んだ。」 A thief stole my computer. が典型的な例文であろう。 主語が被害者の場合、have ~ stolen になり、「~を盗まれる」の意味である。 典型的な例文 「私は自転車を盗まれた。」 I had my bicycle stolen. がある。東京書籍4500と旺文社1400に、ほぼ同じ例文がある。 腕時計が盗まれるのも典型的で、センチュリー英和の桐原3000がそうであり、 「私は腕時計を盗まれた。」 I had my watch stolen. である。 なお、ジーニアスにあるが、バーグラー burglar は「押し込みの夜盗」。センチュリ-によると、burglar は「(押し入り)強盗」。さすがにここまでは入試に出ないだろう。念のため桐原4500・5500と東京書籍4500を読んだが、もちろんバーグラー burglar は無い。 ---- 気づく notice, realize, recognize, perceive 「きびしい」 harsh, strict, severe, rigid realize は、和訳では「気づく」などと訳される場合もあるが、どちらかというと realize の意味は「認識を改める」である。 典型的な例文で、「彼は自身の過ちに気づいた。」 He realized his mistake. みたいなのがある。 いっぽう、notice は単に、物事が目について「気づいた」という意味である。 なお、realize は英国では realise である。<!-- PC設定によっては realise でオートコレクト発動するが、これはイギリス英語をアメリカ英語では読み取れないため。 --> なお、realize には(計画や夢などを)「実現する」という、まったく別の意味の用法もある。 たとえば「私の夢を実現する」なら realize my dream である(東京書籍4500)。あるいは realize my ambition である(旺文社1900)。 リアリティ reality という単語があるが、日本では小説や英語など創作物などの迫真性などのことをいうが、英語でもそのような創作物の評価における reality の用法はあるが(センチュリー英和で確認)、しかしもっと一般に「警官は彼が述べたことが真実かどうか疑った。」のような文章における「真実性」にも reality が使われる(センチュリー永和で確認)。 reality はけっして創作物に限った表現ではない。 旺文社1900では reality の意味を「現実(性)」としている。 実際、ジーニアス英和を確認すれば、そういう用法もあり、「人生のきびしい現実」みたいな例文でrality をジーニアスは使っている。 旺文社1900にも、harsh の項目で、a harsh reality 「厳しい現実」を紹介している。 なお、real と true の違いで、 true は主に話が「本当の」という意味で使う(東京書籍3000)。 いっぽう、real には、材質などが「本物の」という意味がある。 だから、real money 「本物のお金」とか、real diamond (本物のダイアモンド)などで使われる。 harsh「きびしい」(発音は「ハーシュ」)も、単語集に普通に書いてある。 気候が「きびしい」とか、批判や対応が「きびしい」などのことを harsh という。 東京書籍4500に a harsh winter 「寒さのきびしい冬」という例文がある。 旺文社1900に、harsh environment 「きびしい環境」と言う例文がある。 (桐原4500語レベルではなく、)桐原3000いわく、天候の場合は severe(シビア) でも「きびしい」を表現できる。東京書籍4500で確認したところ、批判の過酷な場合の「きびしい」でも severe を使うこともある。 harsh と severe のニュアンスの違いについては、特に書かれていない。 なお、規則などが厳格で「きびしい」と言いたい場合は strict である。 strict には、説明などが「厳密な」の意味もある。高校の分詞構文の単元で、 「厳密に言えば」 strictly speaking, などを習うだろう。 ほか、形容詞 rigid (リジッド)でも「厳格な」を言える。単語集(旺文社1900、東京書籍4500、桐原5500)には、この厳格の用例が書いてある。 だが、それよりも物理学の「剛体」が rigid body として覚えたほうがいい。ジーニアスに、rigid は「剛体の」だと書いてある。 単に、「変形しづらい」みたいな意味での「固い」「堅い」のような意味が rigid である。 ジーニアスには、「変形しやすい」flexible の対義語であると紹介している。 規則の融通がきかないのが rigid だと、ジーニアスに書いてある。そういう意味である。 ほか、rigid には「顔がこわばった」「手足がこわばった」などの意味もある。 なお、rigid は発音注意の単語(旺文社)。 ほか、名詞形 rigidity 「厳格」「硬直」などの意味がある(旺文社、桐原5500、ジーニアス、センチュリー)。桐原だと「硬直」の意味が書いてないが、ジーニアスとセンチュリーの rigidity にしっかりと「硬直」が書いてある。 頑固オヤジみたいに「頑固な」「頑固である」と言いたい場合は stubborn (スタボーン)である(桐原、旺文社)。東京書籍は紹介してない。単語集にはないが、辞書で典型的な、「断固とした拒否(拒絶)」a stubborn refusal がある(ジーニアス、センチュリー)。そのほか、stubborn には軍隊などの(または軍隊などへの)抵抗が「不屈(ふくつ)の」という意味もある(ジーニアス)。 (厳格ではなく)「厳粛な」と言いたい場合は solemn だが(桐原5500)、あまり平易な例文が無い。 法律的な宣誓などが厳粛なことや、音楽などが荘厳なことまで、 solemn で表現できる(ジ-ニアス、センチュリー)。 「誓う」という意味の動詞 pledges(プレッジ)も、単なる約束 promise とは違い、厳粛 solemn に約束することであり、たとえば外交などの約束で使われる(旺文社1900の例文もそう、ジー二アスにもそういう例文あり)。その他、公約などで pledge 「約束する」を使う。または名詞として pledge には「公約」の意味もある。 ※ ほか、批評が低評価で「厳しい」は damning (ダムニング)だが(センチュリー)、範囲外。 さて、virtual の話題。 ジーニアスを見れば、「仮想現実」 a virtual reality などの例文もある。 旺文社1900を見ると virtualの項目で、副詞 virtually 「事実上の」などもあるが、例文はない。東京書籍4500および桐原4500には例文は無い。桐原5500に副詞 virtually の例文あり、早大の過去問。 なお、桐原5500のviatually の項目いわく、「実質的には(≒practically)」「ほとんど(≒almost, as good as)」である。 念のため桐原3000および東京書籍3000を見たが、virtual などの紹介なし。 practical は「練習」 practiceの派生語。practice には「練習」のほか、理念・理論などの「実践」という意味がある。よって形容詞 practical には「実践的な」「実用的な」「現実的な」などの意味があり、よって副詞 practically には「実質的には」「実際的には」などのような意味がある。 余談だが、昨今、日本の芸能界では「リアリティ・ショー」などが問題になっているが、しかし英和辞典で見ると該当する単語は reality TV である(ジーニアス英和、センチュリー英和、の両方で確認)。 recognize は「気づく」などと訳される場合もあるが、どちらかというとrecognizeは「見分けがつく」という意味である。 「足音でジムだと気づいた」とか(ジーニアス英和)、「帽子でジェーンだと気づいた」(センチュリー英和)とか、そういうのがrecgnizeである。 センチュリーから例文を抜粋すると、 I recognized Jane by ~ で、「~でジェーンだと気づいた」 のようになる。 一応、recognize には、新政権の「承認」などの意味もある。 辞書によくあるのは、新政権やイスラエルなどが周辺諸国から承認 recognize を拒まれるという内容の例文。 自分の間違いを認めたり認めないのも recognize である。 ジーニアスの例文では間違いを認め、 「彼は自分の間違いを認めた」He recognized that he was wrong. である。 センチュリーの例文では間違いを認めず、 「彼は自分の間違いをどうしても認めようとしなかった。」 He wouldn't recognize his mistake. である。 桐原4500ではrecognize を「認識する」、旺文社1900ではrecognizeを「識別する」とあるが、上述のようなそういう意味である。 perceive 「気づく」について。 名詞形 perception が「知覚」の意味である。この名詞形を覚えるべきである。 「知覚」とは、たとえば桐原のperceive の例文に「ネコは色を知覚することができない」とあるように、そういう意味である。 旺文社と東京書籍は「気づく」の意味の perceive 例文を紹介しているが、桐原は「知覚する」の perceive 例文を紹介するスタンスである。 perception については「認識」の意味もあり、桐原・旺文社にも書いてあるが、しかし「知覚」を覚えれば連想できるだろう。一方、認識から知覚を連想するのは難しいだろう。東京書籍では、perceptionの「認識」は紹介しておらず、「知覚」だけしか紹介していない。このように、知覚のほうが、この語 perception の本質であろう。 * cognitive 「認知の」 cognitive という形容詞があり、旺文社では「認知の」と紹介され、東京書籍では「認識の」「認知の」と紹介されるが、しかし辞書を見ても説明が少なく、よく分からない。桐原に至っては、cognitiveを紹介していない(桐原5500,桐原4500,桐原3000で確認)。 東京書籍でも、巻末で解説なしで、単語と例文だけの紹介である。しかし、旺文社1900での番号は 279/1900 と、かなり前半のほうである。 旺文社1900いわく「脳の認知機能」 the cognitive function of the brain 東京書籍4500いわく「認知能力」cognitive ability らしい。 どうやら、cognitive は心理学または脳科学などの専門用語っぽいニュアンスのようだが、しかし英和辞典では確認できなかった(ジーニアス英和とセンチュリー英和を見た上で)。 旺文社いわく、「軽度認知障害」が、mild cognitive impairment (MCI)とのこと。 ---- 過酷な terrible, severe, harsh ひどい terrible, awful terrible (テリブル)は翻訳の都合でときには「過酷な」と訳される場合もあるが(ジーニアス)、たとえば暑さがterribleなら「過酷な暑さ」と訳される場合もあるが、 しかし、very bad くらいが terrible のニュアンスである(ジーニアス)。 なので、 terrible は(程度が)「ひどい」と覚えるべきである。 実際、東京書籍4500も桐原3000も、 terrible の意味を「ひどい」としている。 東京書籍3000は「ひどい体験」をterrible な体験としている(著作権のため、本ページでは「体験」は和訳せず)。 こういうふうに使う。 ほか、副詞 terribly は、 たとえば 「とても疲れたよ」 I'm terribly tired. のように(ジーニアスに同じ例文)、強調するのに使う。 実はよい方向を強調するのにも terribly は使う(ジーニアス、センチュリー)。 (著作権のため、本ページでは例文は紹介せず) terrible は語そのものにveryのような強調の意味を含むので、terribleをveryで修飾できない。 同様に、delicious(とてもおいしい)、enormous(とても大きい)、huge(巨大な)、marvelous(すばらしい)、terrible(ひどい)、tremendous(ものすごい)、などの形容詞はveryでは修飾できない。これらの語を修飾するには、reallyやcompletelyなどを使う 名詞形 terror (テラー)は「恐怖」「テロ行為」という意味がある。 なので、terrible には「恐怖の」という意味もあるが、この場合は horrible (ホリブル)で表現するほうが誤解のおそれなく無難だろう。 名詞 territory (テリトリー)「領土」「なわばり」も覚えておきたい(桐原4500、東京書籍4500)。三省堂 CROWN I を見ると、もう高校1年で territory を教えている。動物などの「なわばり」も territory で表せる。 なお、「国境」は単に border で通じる。 American border みたいに、国名の形容詞のあとに border を言えば、それでアメリカ国境の意味になる。 severe と harsh は他の節で紹介したので省略。 「過酷な」と言いたい場合、まずは severe (シビア)の使用を検討するのがよいだろう。 痛みが「ひどい」場合は severe を使うほうが無難だろう。 a severe pain 「ひどい痛み」(ジーニアス和英) である。 形容詞 awful (オーフル)「ひどい」は、悪い意味だけでなく、よい意味でも使われる(センチュリーで確認)。桐原3000語レベル、東京書籍4500語レベル。 よって、awful は terrible とほぼ同じ意味。 もともと名詞 awe が「畏敬」(いけい)の意味である。 だが、awful は、なんだか口語的に「ひどい」「すごい」「おそろしい」みたいな意味になってしまっている。 ---- 全体の whole,total ---- 思う think, suppose think は「思う」と中学で習うが、辞書で調べてみると、意外とthinkは確信の度合いが高い。 センチュリー英和なども解説しているが、「推測する」といいたい場合は、think ではなく suppose を使うのが適切である。 つまり、「推測する」は suppose である。 推測よりも、やや確信の度合いが高い程度の場合に think を使うのが適切である。 名詞 supposition で「仮定」の意味。 まったく意味の違う用法だが、熟語 be supposed to ''do'' で、「~(do)することになっている」の意味。 よくある例文は、「彼は7時にここに来ることになっていた。」の類。 He was supposed to come here at 7 o'clock. である。だが、この過去形での「was supposed 」の文は、実際には彼は7時に来なかったことを含意している(ジーニアス英和より)。東京書籍4500に似たような例文があるが、しかし東京書籍4500では含意の件には触れていない。 センチュリー英和によると、be supposed to do は、「(慣習や法律などによって)...するものと考えられている。」とあるので、表面的な言い回しこそ控えめだが、実際の意図はやや強制的・義務的な主張のニュアンスが高そうである。 否定形 be not supposed to do にいたっては「~してはいけない」の意味である(東京書籍4500)。 ---- 証明・証拠 証明・証拠 proof ,demonstration evidence 証拠 役所などの証明書 certificate (裁判所などで)証言する testify (※高校必修範囲外だと思ったら、三省堂 CROWN I にあった) proof には、「証明」「証拠」の2つの意味があるが、なるべく「証明」のほうで覚えるべきである。 なぜなら、数学の「証明」のことを proof というからである(ジーニアスで確認)。 私たちは、高校卒業後もなるべく教育レベルの高い外国人の英文を読むべきであろう。そして教育レベルの高い人ならば、外国の中学高校の数学は習得しているはずなので、よって外国人の彼らには証明を proof という習慣がついているはずである。外国の中学高校レベルの数学の用語も知らない頭の悪い外国人の英文なぞ、読むに値しない。 なお、動詞 prove は「証明する」の意味である。 evidence が、証拠のひとつひとつのことである。ジーニアスによれば、proofは「evidence を積み重ねた最終的な証拠」のことであるとされる。 だが、それよりも、proofは「証明」であると覚える方がよいだろう。 また、少なくとも日本の学問の世界では、個々の実験事実や個別の統計のような、個々の証拠のことは evidence というのが普通である。英語でどういうのか知らないが。 桐原の単語集にあるが、裁判などの「証拠」も「証言」も evidence である。英語では、「証言」と「証拠」を分けずに evidence という。 単語集にはないが、どうしても発言による「証言」であることを強調したい場合は verbal evidence という(ジーニアス英和で確認)。 ジーニアス英和辞典で確認すれば、「証人」すらも evidence である。 prove to be ~ で「~だと分かる。」「~となる。」「~と判明する。」である。 辞書の例文が、事業などが prove to be a success 「成功となる」またはprove to be successful 「成功となる」である(ジーニアスとセンチュリーの両方)。東京書籍4500の例文もこの類。 桐原4500だけ He was proved to be innocent 「彼は無実だと判明した」である。 旺文社1900には、 prove to be ~ の例文は無い。 実はデモンストレーション demonstration 「証明」の意味がある。 一般的には、英語では、行動によって意志を表したり、あるいは、たとえば新製品の実演販売みたいに実演などによって説明すること等を demonstration という。 集団などのデモ行進も、同じ demonstration である。 センチュリーの例文だが、戦争反対のデモなら demonstration against the war である。 一般に、demonstration against ~で「~反対のデモ」である。 だから東京書籍にある「新空港に反対するデモ」なら demonstration against the new airport である。 能力の証明なども demonstrate であり、東京書籍に紹介されている。 旺文社1900でしか説明していないが、感情をあらわにすることも demonstrate である。だが、感情のデモは例文もないので、深入りする必要はないだろう。 動詞形は demonstrate である。 ジーニアス和英を見ると、実はdemonstraite やdemonstration には「論証する」などの意味もあり、旺文社1900が紹介しているが、しかし桐原も東京書籍も「論証する」の意味は紹介していない。 センチュリーは、証明についてのdemonstration の意味は、論証ではなく「実証する」であると説明している。 ジーニアスの例文を見ると、「哲学的論理」の論証の例文である。 demonstrate が「論証する」と言っても、どうやら、数学のような論証ではないようだ。 ---- 仮定や論理的思考など 仮定する assume, suppose 当然と思う assume 仮定 assumption, supposition 推測 supposition 「推論する」 infer 仮説 hypothesis 動詞 assume は、「仮定する」「想定する」「決め付ける」などの意味。 共通するニュアンスは、ジーニアスいわく、明確な証拠がなくても想定すること。 名詞形が assumption である。 assume that ~ で「~だと思い込む」(桐原)または「~を当然のことだと思う」(旺文社)である。 たとえば、旺文社の例文「私たちは日本の列車がいつも定刻どおりに運行することを当然と思う」が assume that の例である。 ジーイアスによると、三段論法の「前提」などで、assumption が使われるとのこと。 このため論理的な議論ではassume や assumption が使われると思われるので、覚えておきたい単語である。 しかし、suppose にも「仮定する」の意味がある。 だが名詞形 supposition が「推測」の意味である。なので、suppose はどちらかというと「推測する」のニュアンスが強い。 桐原の単語集にはsuppose は「推測する」の意味しか書いてないが(東京書籍に至っては「思う」しかない)、しかしセンチュリーを見ればsupposeの意味として「推測する」のほかにも「仮定する」も書いてあるのが実態である。なお、旺文社1900でだけ、例文なしで「仮定する」の意味も紹介してえる。 「仮説」と「仮定」は違う。 「仮定」とは、たとえば「仮に○○だとしたら、□□は××になるはずだ」の前半「仮に○○だとしたら」のこと。仮に定めるので「仮定」というわけである。 一方、「仮説」とは、「~の原因は、□□が××だからだ。なぜならば(以下略)」という原因をとなえる主張のうち、まだ真実かどうかの評価が確定してない主張のこと。 「仮説」は英語で hypothesis である。 なので「仮説」は証明あるいは検証するためのものである。 「仮説を証明する」は prove a hypothesis である(旺文社、ジーニアス)。 ただし、実際には派生的に hypothesis でも「仮定」の意味もある(ジーニアス、センチュリー出確認)。 だが、単語集では hypothesis の「仮定」の用法は紹介されていない。あまり知的な用法だとは思われていないのだろう。「仮定」を言いたいなら assumption で済むし、高度な学問をするなら「仮定」と「仮説」は分離すべきであるし。 infer という動詞があり、事実や根拠などをもとに「推論する」という単語である。 infer that ◯◯(文節) from ~ で「~を根拠に◯◯だと推論する」という意味である。 桐原5500も旺文社も、infer の例文では from で根拠を提示している。 そもそも日本語の「推論する」というのは、事実や根拠をもとに推理・推測することだと、広辞苑(1992年)にも書いてある。 広辞苑の例文にも「事実から推論する。」とある。 ともかく、このように「推論」は根拠とともに使うべき単語である。 infer で推論する内容は、べつに学問的な内容である必要はなく、たとえば「彼女の沈黙から怒っているのだと察した」とか(ジーニアス)、そういうのでも構わない。 infer にはこのほか、「暗示する」(= imply )という単語もあるが、imply という「暗示する」の意味の単語で代用できるので、説明を省略する。 名詞形は inference 「推論」「推理」であり(旺文社)、推論するという行為(旺文社、ジーニアス)または推論の結果によって得られた結論のことを言う(センチュリー)。 by inference で「推論によって」(旺文社)、「推測によって」(センチュリー)である。 ---- 扱う deal with ~, treat treat は普通、厚遇する「扱う」の場合に使う。つまり、treatは「厚遇する」である。 ただし、和訳の都合で、「厚遇する」だと表現が硬くなる場合によく「扱う」と訳される。 だが、「扱う」で覚えてしまうと類似語とのニュアンスの違いが覚えづらくなってしまうので、treat は「厚遇する」で覚えよう。 治療の場合にも treat を使う。 dea with ~は、「~を処理する」「~を契約する」などの意味である。 典型的な例文が「苦情を処理する」 deal with complaints である(東京書籍4500。旺文社1900)。 ジーニアスで確認したところ、 deal with にも厚遇の用法もあるが、本ページでは触れないとする。 deal は「分配する」「配る」の意味である(東京書籍4500でも紹介)。 トランプなどの札を「配る」のが dealである。 だからトランプの札を配る人をディーラー dealer とも言う。 deal には「商取引」の意味もある。だから、ある種の商品の「販売人」「販売業者」のことを dealer とも言う。桐原4500が「販売業者」としている。ジーニアスは「販売人」。 同じスペル deal で 「量」の意味がある。 a good deal of ~ で「かなり多量の~」である(桐原4500)。 a great deal of ~ で「かなり多量の~」である(桐原4500)。東京書籍4500では、 a great deal of ~ で「非常にたくさんの~」としており、数えられない名詞に用いるとしている。 桐原の例文では、 a good deal of snow 「かなり多量の雪」、東京書籍の例文では a great deal of time 「たくさんの時間」、と訳している。 ---- 分配・配分 distribute, deal 食料や出版物などを分配する場合、普通は distribute を使う(東京書籍4500)。東京書籍では「出版物」では「印刷物」としているが(例文でリーフレット leaflet を想定)、しかしトランプの札も印刷物であるので、このページでは「出版物」と表現した。 典型的な例文が distribute food to the ~で「~に食料を配る」である。 辞書によっては「金を配る」場合もあり、その場合は distribute money to the poor 「まずしい人に金を配る」である。(センチュリーを参考) 「子供たちにリーフレットを配る」なら、 distribute leaflets to the children となろうか(wikiオリジナル。東京書籍およびジーニアスの例文を参考に組み合わせ)。 東京書籍4500だけでなくセンチュリー英和でもリーフレット leaflets を配る例文である。 単語集にはないが、電気屋などで買えるテレビ信号などの分配器をよくよく見ると、ディストリビューターと言ったりしている。実際、ジーニアスで分配器 distributor である。 単語集にはないが、数学でいう確率分布などの「分布」も distribution である。しかし高校生に「確率分布」と言って通じづらい。 ジーニアスによれば、生物学などでの植物の「分布」も distribution である。高校生は植物のほうが覚えやすいだろう。 deal については「扱う」の項目で説明したとおり。トランプの札などを配ったりするのが deal である。 ---- 比例 ratio, rate, proportion 3:2とか 4:7 とか、とにかく個別の比や比率のことは ratio (レイショウ)という。 そういった個別の比ではなく、たとえば数学で「AとBとは比例関係にある」のような「比例関係にある」のことを形容詞で proportional と言う。 名詞 proportion は比例関係。 そういうのではなく、たとえば利子率など何かの比率のことは rate (レイト)という。 なお、利子率や金利は interest rate という。ここでいうinterest は、「興味」の interest と同じスペル。 桐原4500によると、「失業率」は the unemployment rate である。 東京書籍4500によると、「出生率」は the birth rate である。 proportion には、全体の中で占める「割合」という意味もある。 桐原4500および旺文社1400に熟語 at any rate 「とにかく」が紹介されているが、例文は無い。 実際には ratio にも比例関係の意味があったり、proportion で個別の比に言及することもあるが、ニュアンス的には上記の感じのはず。 例文は省略。著作権的な問題をクリアできそうな典型的な例文が見つからなかったので、読者が単語集などで読者が自身で調べてほしい。 * 合理的 rational, 「合理的な」は英語で rational である。これ単独だと覚えづらいが、実は比率 ratio と冒頭のスペルが同じだし、発音も「レイショウ」と「レショナル」でほぼ同じである。 なお、数学の「有理数」も rational number であり、同じスペルの rational である。 だからか和訳も気をきかしてか、有「理」数となっているわけであろう。(ここら辺の話題は、数学英語の専門書に書いてある、有名な話である。)明治時代あたりの数学者に感謝しよう。 そして、「有理数」とは、整数の比例で表される数のことである。(数学的な厳密性は置いておく。) つまり欧米人の数学のできる人は、「合理的な」=「整数の比例の」が同じ単語であると認識しているわけである。 こうやって考えると、「比例」ratioさえ知っておけば、そこから「合理的」 rational も普通に覚えられる。 なお、「非合理な」は irrational である。 さて、rational でよくある例文は、「合理的な決断」a rational decision である。東京書籍4500と桐原4500の両方に、「合理的な決断」 a rational decision が書かれている。 ついでに、「自然数」は a natural number である。単語集には「自然数」は書かれていないが。 「実数」は a real number である。 「自然数」も「実数」も、英語または対応するドイツ語あたりを、日本語に直訳しただけである。 なお、「論理的な」は logical (ロジカル)である。「論理」が logic なので、それから覚えよう。 reasonable (リースナブル)と言う形容詞には、「理にかなった」という意味があるが、しかし「値段が手ごろな」という意味もあるので、使いどころが難しそうである。 ---- 出席 attend, present 形容詞 present は、「出席している」の意味もあるが、名詞形 presence に「存在感」の意味がある。 attend が、会議や授業などに「出席する」である。 典型的な例文が、attend the meeting 「会議に出席する」である(センチュリー、東京書籍4500)。 だが、attend school で、毎日規則的に「学校に通っている」の意味である(センチュリー、東京書籍4500)。 学校や教会に規則的に通うのは attend を使う。「教会に通う」の例文なら attend church である(センチュリー)。 授業の出席のattendの例文が、辞書でも単語集でも見つからない。 授業の出席については、present を使うのが安全だろう。 なので、辞書にはないが、どちらかというとattend は、出席するために「~に出ている」の意味ぐらいで解釈したほうがよいかもしれない。 名詞 attention が「注意」の意味である。attention が「注意」なのも、「注意を向かわせる」みたいな意味ぐらいで解釈したほうが、出席の「~に出ている」くらい 旺文社1900いわく、pay attention to ~で「~に注意を払う」である(なお、ここでのtoは(不定詞ではなく)前置詞の用法)。桐原によれば、attend to ~ともいう(toは前置詞としての用法)。 あまり attend と present の概念の違いがハッキリしていない。実務の際は、勤務先の業界の慣習などに任せて使い分けのが良いだろう。 ---- 寄付 donate, contribute 単語集を見てたら、「勘弁してほしいなあ」とあきれたが、contributeには「寄付」の意味もあるが、現代のIT社会では普通はcontributeは「貢献する」の意味である。 「寄付する」はdonateである。 しかも、単語集には、contributeの項目を見ても、donateについては書いてない。donateの項目を見ても、contributeについては書いてない。 たとえばwebサーバなどのよく使われるOSのLinux(リナックス)の場合、寄付以外にも多くの協力活動があって(テストに参加するとか)、そういう諸々の協力活動の全体のことを contribute と言っているのが普通である。 そして、その協力活動の中のひとつに寄付もあって、その寄付が donate という言い回しである。 実際、debian(デビアン) というLinuxの一種のwebサイトはそうである<ref>[https://www.debian.org/intro/help Debian -- Contribute: How you can help Debian] 2022年5月1日に確認.</ref>。 ページ"Contribute: How you can help Debian"の中に、下記のようにいくつも項目があって、 <pre> Contribute: How you can help Debian Coding and Maintaining Packages Testing and Bug Squashing Writing Documentation and Tagging Packages Translating and Localizing Helping other Users Organizing Events Donate Money, Hardware, or Bandwidth Use Debian How your Organization can support Debian </pre> その項目のひとつとして"Donate Money, Hardware, or Bandwidth"があるという構成である。 もっとも、wikipediaのサーバを動かしているOSはDebianではなく Ubuntu(ウブントゥ)というイギリス製OSであるのだが、このUbunutの本家イギリス語版のwebサイトのページで寄付のページには contribute と書いてあるので<ref>[https://ubuntu.com/download/desktop/thank-you Thank you for your contribution | Ubuntu]</ref>、contributeで寄付を意味しても間違いではない。 よく、医療で「血液ドナー」とか何かの提供者のことをドナーdonorというが(旺文社1900)、これもdonateの派生である。 なお、donor の発音はドウナーである。旺文社1900では発音の注意をしている。 なお、ジーニアスとセンチュリーで確認したところ、blood donor とは単なる「献血者」のこと。クルマの「献血車」にあらず。 ジーニアス英和によれば、ドナーカード donor card も英語でそのまま通じる。 なお、桐原3000の donor 項目いわく、「血液バンク」は a blood bank とのこと(桐原3000)。 なお、名詞形は donation 「寄付」である。 単語集によると、make a donation で「寄付する」である(東京書籍、桐原)。 make a donation to our school で「学校に寄付する」。 make a donation to church で「教会に寄付する」 donate で使う場合、ジーニアス英和に donate a money to Red cross 「赤十字に寄付する」という例文があった。 debianのサイトでも donate a money と言っているように、普通は 「donate a 金または金額」のパターンである。 実際、センチュリー英和では donate $1,000 to a charity 「慈善事業に千ドル寄付する」である。 contribute で金銭を寄付する場合でも同様、 「contribute 金額 to 相手」のパターンである(桐原、東京書籍)。 contributeの単語集が金額の例ばかりであるが、センチュリーによれば a money で寄付してもいい。 センチュリーいわく contribute a lot of money to church 「教会に多額の寄付をする」である。 contribute には、なにか望ましくないことの「一因になる」という意味もあり、たとえば「二酸化炭素は温暖化の一因になる」とか(旺文社)、「砂糖は虫歯の一因になる」とか(センチュリー)、「喫煙がガンの一因になる」とか(ジーニアス)。 良いことの一因になった場合にもcontributeを使うが、ただし和訳の際、普通は「寄与した」と訳すだろう。 ---- 闘争と努力 struggle, strive 努力する endeavor , 不和と摩擦 strife, friction, conflict 紛争 strife, dispute 口論 quarrel, dispute 意見を戦わす dispute, tackle 「努力する」には、struggle と strive と endeavor があるが、高校生はまず struggle を覚えるのが良い。 strive だと、後述のように闘争の意味合いに解釈される可能性がある。 実際、単語集でも、struggle を先に紹介しており、strive はかなり後半で紹介する。 動詞 struggle は「もがく」「あがく」などの意味だが、「努力する」「奮闘する」のような意味もある。 病気や苦痛などから逃れるために「戦う」のような意味もある。 struggle to ~(動詞) で、「~するために努力する」である(東京書籍)。 struggle with ~ で「~と闘う」である。 struggle for ~で「~を求めて闘う」である。ジーニアスによれば、struggle for independence で「独立を求めて闘う」。旺文社によればstruggle for equal right で「平等権を求めて闘う」 名詞も struggle であり、「闘い」「努力」の意味である。 だが、生存競争を a struggle for existence という(旺文社1900にあり。ジーニアス、センチュリーで確認)。 あまり使い分け方ははっきりしないので、慣習に合わせるしかない。 単語集にはないが、権力闘争は a power struggle といったり(ジーニアス)、a struggle for power という(センチュリー)。 endeavor (エンデバー)は動詞で「~しようと努力する」、名詞では「(真剣で継続的な)努力」の意味だが(ジーニアス、センチュリー)、なぜか単語集には、あまり積極的に紹介されてない。endeavor は東京書籍では巻末おくりだし、桐原では5500おくりである。 アメリカの宇宙船の名前でエンデバーというのが昔あったので、特に悪い意味は無いだろう。 しかし、なぜだか、単語集はあまりエンデバーという単語を紹介していない。 動詞として使うときは endeavor to ~(動詞) 「~しようと努力する」 である(東京書籍、桐原、ジーニアス、センチュリー)。 strive という単語があり、これも「努力する」や「闘う」の意味である。桐原だと闘争の意味が書いてないが、東京書籍にきちんとstriveの「奮闘する」が書かれている。 これは比喩的な奮闘ではなく、後述するように名詞形で実際の戦争を扱う。 strive for ~で「~を目指して努力する」または「~を求めて努力する」の意味である。 旺文社1900には動詞 strive の項に、派生の名詞形 strife がスペルと和訳「争い」「不和」だけ紹介されている。 他の単語集には名詞形が書かれていないが、strive には実は派生の名詞形が2つあり、striving と strife である。 辞書にも、strife と strive の関係が書いてないが、明らかにstrife と strive はお互いに派生であろう。少なくとも旺文社1900は 名詞 strife は 動詞 strive の派生だという見解である。辞書のほうが頭悪い。 striving が「努力」の意味。 strife は「紛争」や「不和」など、ぶっそうな意味である。 辞書によると、政治闘争は a political strife である(ジーニアス、センチュリー)。 しかし、ジーニアスによれば、民族紛争などは conflict を使う場合もある。 山川出版の英語版・詳説世界史では自衛隊PKO派遣先の、いわば「紛争地帯」に相当する場所を conflict zone と言っている<ref>橋場弦 ほか監修『WORLD HISTORY for HighScool 英文詳説世界史』、2019年10月15日 第1版 第3刷発行、P.412</ref>。 一方、センチュリーだと、「その二国間には紛争がある。」There is strife between the two countries. とある。 ジーニアスによれば、家族紛争を a family strife という。 dispute には、「紛争」「口論」「議論」「意義を唱える」などの広い意味がある(桐原)。「意義を唱える」は旺文社の解釈。 「議論」を訳す場合でも、「議論を戦わす」のように(東京書籍、センチュリー)、意見の対立に主眼が置かれている。センチュリーにいたっては、感情的な対立があるとのニュアンスがあるとまで述べている。 だからか労働争議を a labor dispute ともいう(ジーニアス、センチュリー)。 いっぽう、単に意見や議論を戦わせるだけなら、動詞 tackle である(センチュリー、桐原)。ジーニアスにいたっては、tackle の意味で「戦う」の言葉は使わず、tackle は意見を「論じ合う」だとしている。 センチュリーは、「賃上げ(on a raise)をボスにかけあう」を動詞 tackle としている。文脈は違うが、旺文社でも「予算」がどうのこうのと、tackle で金を話をしている。 動詞としては tackle には「問題に取り組む」という用法もある(桐原、東京)。 典型的な例文は、 tackle the problem 「その問題に取り組む」 である(桐原、東京書籍)。 なお、tackle は、ラグビーなどの名詞「タックル」、動詞「タックルする」と同じ単語でもある。 肉体的な単なる「闘い」「闘う」は fight とか battle で良いだろう。 「不和」については friction 「摩擦」を使うも言い換えもある。物理学の「摩擦」 friction と同じ単語である。 「静止摩擦」は static friction である(旺文社1900の static 項目)。ジーニアス・センチュリーのstatic 項目では見つからなかったが、たしかに静止摩擦は static friction だたはずである。 なお、「静電気」は static electricity である(旺文社1900、ジーニアス static 項目、センチュリー static 項目)。 さて、friction の話題に戻る。東京書籍4500と桐原4500・5500には、friction が載っていない。旺文社1900にだけ friction がある。 外交の「不和」には、friction を使える(ジーニアス、センチュリー)。というか、英語で「貿易摩擦」を trade friction と言う(旺文社)。ジーニアス英和やセンチュリー英和で貿易摩擦を確認したかったが、見つからなかった。辞書でfriction で調べてもtradeで調べても、ジーニアスとセンチュリーでは見当たらない。 和英のほうでジーニアス和英を調べると、「貿易摩擦」は trade friction または trade conflict というとのこと。 外交の不和で strife を使うと戦争の恐れの高い不和だと誤解されかねないだろうから、貿易摩擦のようなお金の問題では friction で十分だろう。 さて、努力について、 effort という名詞があるが、しかしこれは名詞である。 なのでeffortで「努力する」と言いたい場合、東京書籍やジーニアスによれば make an effort のようになる。意外と難しい。 effort to ~(動詞)で「~するための努力」である。 東京書籍にあるが、make a great effort 「大変な努力をする」のように、great などの形容詞がつくこともある。 ---- 傾向 tendency, trend, inclination 流れ current , flow 「傾向がある」 tend(動詞), inclined (形容詞), ミスなど好ましくないことをする傾向がある be liable to ~ その他、好ましくない傾向がある be prone to ~ センチュリー英和を見ると、trend と tendency の違いが説明されている。 tendencyは、たとえばセンチュリーにある「赤ん坊は空腹になると泣くものだ」とか「弱い母音は消失する傾向がある」のように、本来的に、何かのおきる傾向のあること。 trend は「流行」や現在の「趨勢」(すうせい)や「風潮」などの傾向。ジーニアスを見れば「趨勢」や「風潮」の意味も書いてある。 なお、衣服の流行は fashion である(東京書籍3000、桐原3000)。一応、ジーニアスには、衣服だけでなく文学や芸術の流行も fashion ということもあると書いてあるが、しかしセンチュリーは採用していない。 なお、mode も衣服の「流行」の意味であるが、現代では廃れている表現だとジーニアスはいっているし、桐原と東京書籍の単語集に mode は無い。 しかし、旺文社1900にmode があり、「方式」「形態」などの意味である。後述の「携帯」の誤字ではなく、確かに旺文社1900のmodeの項目に「形態」と書いてある。 旺文社1900の単語集は入試準拠なので、おそらく教科書にはないが入試によくある表現なのだろう。総数1900のうちの844番目にmodeがあった。 旺文社1900のいうmode関連の派生表現のひとつで、携帯電話の「マナーモード」は silent mode である。 ほか、物理学の弦の振動などの「モード」もこの単語だったと思うが、辞書には無いので不明(ジーニアスとセンチュリーの両方とも確認したが見つからなかった)。 さて、tendency の話題に戻る。 さきほど trend は「趨勢」や「風潮」だと言ったが、だがジーニアスによると、現在の株価の傾向などで(トレンド trend ではなく) tendency を用いている例文もあり、実際には使い分けは明確ではない。 tendency の動詞形は tend であり、「傾向がある」の意味。というか、動詞 tend の名詞形が tendency である。 tendの意味も、本来的に "~をする傾向がある" という意味での「傾向がある」である。 tend to ~(動詞)「~する傾向がある」の形でよく使われる。 ほかにも、 tendに「世話をする」という意味もあるが、だがこれは、名詞 tender「やさしさ」の動詞形だとみなすべきだろう。 ややこしいことに、動詞 tender は「提出する」「支払う」の意味である。だが単語集に動詞 tender がないので、無視しよう。 一方、trendについて。 センチュリーによれば、「新しい流行」 a new trend とか使う。 東京書籍に the current trend 「現在の流行」という例文もある。 東京書籍によれば、「最近は小型車が売れている」的な意味の流行も trend である。 また、旺文社によれば、「最近は高齢者には運転をやめさせるのが傾向である」というのも trend である。 旺文社の例文を考えれば、和訳が「傾向」であろうが、内容が最近の風潮なので、trendを使うのが正しいわけだ。 形容詞 trendy 「流行の先端を行く」の意味である。 * 「流れ」 current, flow flow は「流れる」と言う意味の動詞だが、名詞では川などの「流れ」を言う。 current は、「流れている」という意味の形容詞だが、名詞では「海流」や「電流」などの「流れ」も言う。 川も海流も同じ水の流れなのに、なぜか使い分けをするのである。 東京書籍3000でも桐原3000でも、flowの例文で、川の流れを扱っているので、そういう単語だと納得してもらうしかない。 英語というのは、あまり論理的ではなく、慣習などで使い分けが決まっている部分もある。 東京書籍に書いてあるが、気体の流れも液体の流れも flow である。 普通科高校では習わないが、工業高校などで流量計などの機器を扱う際、その流量計を英語で「フローメータ」などという。また、その計器で測定する流れのことは普通は「フロー」flow と読んでいる。 風の流れや川の流れという言い方ではなく、わざわざ「気体」「液体」と東京書籍が言ってるのは、たぶん、そういう流量計などを見越しての表記だろう。 実際、ジーニアスを見てると、「液体・気体の流出量(流入量)」という意味もかかれている。東京書籍はおそらく英和辞典のflowのこういう意味を参考にしたと思われる。 さらっと「流量計」と言ってしまったが、流体力学では流出量も流入量も区別せず、まとめて「流量」(りゅうりょう)と呼び、それ(つまり「流量」)を flow と言うのである。 実際、ジーニアスでは、たとえば人口の「流入」もflow であるし、センチュリーでは(石油らしき)ガロン単位の液体の「流出」もflow である。 そのほか、お金の「流れ」については、経済学ではカレントもフローもどちらとも使う表現なので、深入りしない。 さらに混乱させるが、discharge 「解放する」・「釈放する」、「解雇する」「解任する」の意味の単語(東京書籍の巻末)にも、実は「流れる」の意味がある(ジーニアス)。「アマゾン川が大西洋に注いでいる」という例文で、discharge を使っており、ここでは flow into と同じだと、ジーニアスは言っている。 煙などの排出も discharge であり、いったい流出なのか流入なのか、はっきりしない。 専門用語などで flow と区別したい場合、discharge を使うこともある。 だから、たとえば流体力学で、理論値と実測値との違いの比率のことを discharge coefficient といい、よく「流量係数」とか「流量係数」とか言う。分野によって和訳が違うので、和訳は気にしなくていい。証拠に英語版ウィキペディアの記事 [[:en:w:discharge coefficient]] (流出係数)があります。 あと、discharge には名詞の用法もある(ジーニアス)。東京書籍には動詞の用法「解放する」以下略しか書いてない。 そんなことよりも、「解放」「釈放」の意味を、液体の排出などと関連づけて覚えよう。なんか解き放たれて自由に動ける的なイメージが discharge である。 なお、日本でも、よく、解雇や解任のことを、比喩的に「自由の身」みたいとか「長い夏休み」みたいに言います。なので、そこから派生的に、discharge の複数の意味を把握できます。 洋の東西を問わず、人間の言語センスは似たようなもんです。(あるいは、もしかしたら日本人が英語discharge を真似たのかもしれません。) 「頭脳流出」は a brain drain という(旺文社1900、ジーニアス、センチュリー)。ややダジャレっぽい語感もするので真に受けるわけにはいかないが、drainの基本的な意味は「流出する」である。(なお、このように brain には「脳」の意味のほかにも「頭脳」の意味もある(桐原3000)。) だが drain には、体力などを「消耗させる」という意味もある(旺文社、ジーニアス、センチュリー)。 drain my strength 「体力を消耗させる」 である(センチュリー。ジーニアスに似た例文)。 体力が流出していくイメージか。 台所の「排水口」とかも名詞 drain である。屋内の下水などに向かって流出させる側の台所の排水口が drain である。 その他、排水管が drain である(ジーニアス)。 * 傾向 tend, inclined まず、tend は動詞。 inclined (インクラインド)は形容詞。 なので be inclined to ~(動詞) で「~する傾向がある」 のように使う。inclined to do を使いたい場合、be動詞が必要。 一方、tend は動詞なので、be動詞なしで、 tend to ~(動詞) 「~する傾向がある」 である。名詞形はtendency 「傾向」である。 実は動詞 incline (インクライン)「傾ける」という単語があって、「傾ける」「その気にさせる」の意味である(東京書籍)。 坂(slope)などの物理的な「傾き」やその角度なども 名詞 incline である(ジーニアス)。 桐原は inclined などは紹介していない(桐原4500および桐原5500を確認)。 単語集にはないが、「話を聞こうと耳を傾ける」incline my ear to ~ 、みたいな表現にも incline を使う(センチュリー)。というか、おそらくこの英語表現が先にあって、それに合わせて日本で「傾聴」みたいな表現が生まれた可能性。 また、このように incline には、好意などによって、「関心を向ける」のような意味もある。 このためか、名詞形 inclination (インクリネイション)には「傾向」の意味のほかにも、「好み」の意味もある(旺文社)。 ただし、必ずしも inclination は「好み」とは限らず、たとえば「彼は太りやすい」のような体質や(ジーニアス)、「この車は横滑りしやすい」とか(センチュリー)、そのほか性質や、性向なども inclination である(ジーニアス)。 どちらにせよ、とりあえず inclination の中心的な意味は「傾向」だと覚えておけば問題ないだろう。 単語集にはないが、坂や屋根などの物理的な「傾き」やその傾斜の角度なども inclination という(ジーニアス、センチュリー)。 liable (ライアブル)は、好ましくないことをする傾向や、好ましくない状態になりがちな傾向のある場合に使う(ジーニアス、センチュリーで確認)。なお旺文社では発音注意している。 和訳では liable は単に「~しがちである」と訳す場合があるが(桐原4500、旺文社1900)、「好ましくないことをする傾向」だという条件をしっかりと理解しておこう。、 be liable to ~(動詞の原型)で「~(ミスなどの行動)をしがちである」 のように訳す。 ほか、典型的な例文 be liable to illness 「病気にかかりがちである」(旺文社、ジーニアス) がある。なおこの場合、to が不定詞ではなく名詞に対する前置詞に変わっている。 なお、「ミスをする」make a mistake または make mistakes である。なお、桐原3000およびジーニアスでは、make a mistake 「間違える」と訳している。 なので、ともかく be liable to make mistakes 「ミスをする傾向がある」 である(旺文社)。 形容詞 prone (プロウン)は、望ましくないことについて「~の傾向がある」の意味(ジーニアス、センチュリー)。 病気になりやすいとか、怒りやすいとか、そういうのも prone を使える。例文は辞書を見て(著作権の都合)。 単語集には、なぜか、望ましくないことに使う前提が書かれていない(旺文社、東京書籍の巻末)。 だが、辞書には前提が書かれている。 単語集にある典型的な例文は、 be prone to error 「間違いを起こしやすい」 である(旺文社、東京書籍の巻末)。 to は前置詞でもよく、動名詞 to でもよい。つまり、prone to の後ろにくるのは、名詞 でも 動詞の原型 でも良い。 earthquake-prone 「事故多発地域」の意味である(センチュリー、旺文社)。 ---- mistake と error ジーニアスによると、 mistake は不注意や勘違いによる間違い。 error は、計算の誤りや、裁判の誤審など。 ・・・とのこと。 また、センチュリーいわく 「不注意な間違いをする」make a careless mistake とのこと。 だから mistake は、「勘違い」とか(ジーニアス)、「誤解」「思い違い」とかで(ジーニアス、センチュリー)覚えたほうがいいかもしれない。 mistake を「誤り」「間違い」と訳しても間違いではない(ジーニアス、センチュリー)。そういう訳がジーニアスにもセンチュリーにもある。 ---- 現在の current , present, modern current は、形容詞「現在の」が入試ではよく出るが、しかし名詞では「流れ」の意味である。 海流とか電流とかの流れにcurrentを使う。 東京書籍およびジーニアスが紹介しているが、「暖流」は a warm current である。 ついでにジーニアスが紹介している「寒流」は a cold current である。 current は、まず名詞「流れ」を覚えるべきであり、形容詞「現在の」はその派生として覚えるのが良いだろう。 ジーニアスで調べた語源でも、「走っている」→「流れている」→「現在通用している」というような意味の変遷らしい。 さて、current 関連の名詞として、単語集にはないが、電流の直流 D.C. とは direct current の略である。 交流 A.C. も Alternating current である(ジーニアスで確認)。 通貨はcurency (カレンシー)である。 単語集にはないが、国際的に安全な通貨のことを経済学ではハードカレンシーといい hard currency と書く。) 「現在の」を意味する形容詞には、current のほかにも present がある。 present は、たとえば英文法の「現在形」や「現在進行形」などの「現在」も present である。 「現在」のpresent と 「贈り物」の present とスペルも発音も同じである。また、「出席している」の形容詞 present と同じ単語である。 present と current のニュアンスの違いは、辞書では特に言及されてないが、current には「流通」や「通用」のような意味合いもあるというところだろうか。 * 現代 modern と contemporary なお、modern は、「近代の」「現代の」という意味であり、歴史的なニュアンスで使う。 modern も単語集にあるので、覚えよう。 単語集にないが、たとえば「近代文学」modern literature のように(センチュリーで確認)。なお、「現代」はmodern times という。 桐原4500にあるが、(科目名ではない意味での)「現代社会」は、modern society である。 動詞 modernize は「近代化する」「現代化する」の意味である(東京書籍4500および桐原4500)。 しかし、contemporary という単語も存在し「現代の」という意味であり、しかも、旺文社いわく「現代日本文学」は contemporary Japanese literature である。 東京書籍4500いわく、contemporary と modern の違いは単に、芸術様式の話題では contemporaryが「現代の」の意味で使われるとのこと。 だからか、東京書籍・桐原・旺文社の3つともすべてに単語 contemporary art 「現代美術」がある。 その他、contemporary には「同時代の」と言う意味もあり、東京書籍いわく、「ピカソとダリは同時代の人」という内容で、語法 be contemporary with ~ を使っている。 * temporary temporary は「一時的な」の意味の形容詞。 典型的な例文が 「一時的な仕事」 a temporary job である(東京書籍、旺文社)。 なお、ジーニアスとセンチュリーでは、同じ a temporary job を「臨時の仕事」と訳している。 対義語は permanent である。 つまり、 temporary ⇔ permanent である。 なお、いわゆる「アルバイト」は、英語で part-time job である(ジーニアス和英「アルバイト」で確認)。side job ともいう(ジーニアス和英)。 日本語の「パート主婦」のような、勤務時間の短い意味合いは、英語のpart time jobには無い。 そもそもアルバイトはドイツ語に由来する言い回しだし、しかもドイツ語では「仕事」という意味らしい(本書は英語の教科書なのでドイツ語には深入りしない)。 「永久歯」を permanent teeth という(ジーニアス、東京書籍)。 東京書籍いわく、「終身雇用」を a permanent job というとの事だが、しかしジーニアス英和やセンチュリー英和では確認できなかった。 ---- 強制 force, enforce, compel , oblige 義務 duty 辞書によくあるcompel の典型的な例文が「病気のため仕方なく~せざるを得なかった」的な例文。こういうときにcompelを使うようである。 辞書によると、compel はforce よりも意味が弱く、oblige (オブライジ)よりも意味が強い、 普通、oblige (オブライジ)は「義務づける」と訳す。 単語集にはないが、思想の用語で「高貴たる者の義務と責任」と言う(英語ではなく)フランス語で noblesse oblige ノブレス・オブリジュ という単語があり、社会的エリートが兼ね備えるべき義務感のことを言う。 さて、英語では、名詞形 obligation が「義務」の意味。センチュリー英和で確認したが、法律的な「義務」も、道徳的な「義務」も obligation である。 桐原4500では obligationの意味に「義理」を加えて、「義務」「義理」がobligation だとしている。 旺文社1900では、 obligationの意味に「責任」を加えて、「義務」「責任」がobligation だとしている。まあ、「高貴なる者の義務と責任」が世界各国エリートの基礎教養なので、知的な英文ではそういうニュアンスで obligation が使われることも多いのだろう。 東京書籍4500 には、oblige の紹介は無い。 force は「強制する」の意味。 さて、「軍隊」「武力」も force である。 軍隊によって「~が強制された」という場合、どうすればいいのだろうか? 桐原4500では、force「強制する」の例文での「軍隊」を troop という単語で表現して、forceの同音意義語の問題をうまく回避している。 桐原の例文が「政府軍が反乱軍に降伏することを強制した。」と言う例文である。 なお「政府軍」は the government troops である。 反乱軍は the rebels である。「降伏すること」は to surrender である。 troop とか rebel とか、索引に無い単語ばかりである。 enforce は、強制一般の意味もあるが、法律によって強制する、というニュアンスがあり、例文もそういうのが多い。だがラグビーでエンフォースという用語がある。ラグビーの説明はしたくないので説明は省略。 センチュリーの英語によると、警察が市民に法を強制したりするのが enforce である。 桐原4500によると、法律を施行するのが enforce である。警官が法律を守らせる場合も、the police enforces the law のように、目的語は法律になる。 旺文社1900および東京書籍4500にも、似たような警官と法律の enforce 例文がある。 こういう事情もあってか、旺文社は1900はenforceの意味を「施行する」「実施する」としている。 桐原は、enforceの意味を「施行する」「遵守させる」としている。 なお、死刑執行で誰かを「処刑する」のは英語で execute (イクセキュート)である。 「死刑執行」「処刑」は execution である(桐原5500で「死刑執行」、旺文社1900)。 execute には、計画・命令などを実行したり、仕事を「成し遂げる」などの意味もある(ジーニアス、センチュリー)。ジーニアスによると「最後までやる」が原義のほうの意味とのこと。 処刑の意味は、処刑で「片付ける」的なニュアンスだろうか(特に言及されてはいない)。 summary execution で「即決処刑」である(ジーニアス)。 要約を意味する単語 summary には、形容詞として「略式の」という意味もある。 計画などの実行で使われるといっても、ただし、こういう固い語なので、技術の必要な難しい計画などの実行で使われるのが普通である(ジーニアス)。 また、このことからか、企業の重役のことをエグゼクティブ executive ともいう(旺文社、桐原5500)。executive には名詞「重役」の意味のほか、形容詞「経営上の」「行政杖の」などの意味もある(旺文社、桐原5500、ジーニアス、センチュリー)。 さて、「義務」「強制」概念の話にもどる。 義務教育も法律で強制されているが、しかし旺文社の例文によると、義務教育には oblige を使っている。 センチュリーを読んでたら、未成年の子供が起こした事故の弁償も oblige である。 桐原だと「大臣は半年に一度、報告書を提出することを義務づけられていた。」の義務づけが was obliged to send in a report である。 まあ、大臣はエリートだからだろう。 センチュリーで「世論の批判のため引退を余儀なくされた」の「余儀なく」もoblige である。まあ政治家という、国家権力者の一員たるものの義務と責任的な意味合いだろう。 しかし東京書籍4500は、compel の例文で「世論が大臣を辞職に追い込んだ。」を 使っており、センチュリーに反している。 まあ、とくに統一的な用法は無いのだろう。 なお桐原は、「その法律が雇い主に、(※ 社員の)健康保険を掛けることを強いる」をcompel としている。「(※ )」内はwikiでの追記。 単語集にはないが辞書によくある典型的な例文が、病気で「~を余儀なくされる」をcompelで表現することである。 センチュリー風に He was compelled by illness to ~なら「彼は病気で~を余儀なくされた」である。 ジーニアス風に His illness compelled him to ~ なら、直訳すれば「病気が彼に~することを余儀なくさせた」だが、無生物主語の和訳が高校の授業で嫌われるので、「彼は病気で」と訳す。英文学とかだと無生物の主語とか普通にあると思うし、普通の日本語でも文学・文芸でなくとも「病気が彼に~を余儀なくさせた」とか通じると思うし、なのに、かたくなに無生物主語の和訳を認めない高校英語教師や塾講師などはどういう了見なのだろうか。理解しがたい。 ジーニアスは、本人の納得の上で余儀なくされる場合を oblige といい、そうでない場合つまり「本人の意思に反してさせる場合はforce や make を用いる」としている。 しかし、ジーニアスの例文では、税金を払う義務も oblige としている。 判断基準が不明である。 やはり、高貴たる者の義務と責任を基準に考えるのが良いだろう。 * 義務 duty, obligation 「義務」「義理」は英語で duty である。ジーニアスで確認したところ「義理」の意味もある。 on duty で「勤務時間中で」。 off duty で「勤務時間外で」 duty は、職務上の義務でも使われるが、道徳的な義務でも使われる。 その他、duty に「関税」の意味あり。桐原4500によれば、「ワインの関税」 duty on wine である。「免税店」は duty-off shop である。 obligation との違いとして、ジーニアスは obligation は「外的な事情から生じる義務」としているが、どうだろうか。ノブレス・オブリジとか、そうではないと思うが。 そう覚えるよりも do one's(myなど) duty で「~の義務を果たす」などの慣用表現で覚えるほうがよいと思う。なお、東京書籍4500と旺文社1900に、例文中に do one's duty がある。 obligation にはそういう平易な慣用表現は無いと思うので。 ---- 「分類する」 sort, classify 「分類する」の使い分けは、あまりハッキリしない。 単語集の例文などを見ると、どうやら書店や図書館などで書籍を「分類する」は classify を使っているようだ。 旺文社では「本は作家の名前によって分類されている。」 The books are classified according to the author's name. 東京書籍では「本はテーマによって分類されている。」 The books are classified according to subject. である。 ジーニアスでも、受動形でなく能動形でだが図書館での本の分類に classify を用いている。 なお、(英和ではなく和英辞典の)ジーニアス和英によると、ごみの「分別」は separate である。 sort には名詞で「種類」という意味もあり、ほぼ、「種類」の意味での kind と似た意味である。 a kind of ~ 「~の一種」の代わりに、a sort of ~ で「~の一種」と言う場合もある。 しかし、別の用法で sort of で「多少の」「いくらかの」という意味もあるので、文脈から判断すること。 class には「等級」と言う意味もあるので、「等級づけをする」なら classify のほうが望ましいだろう。 余談だが、classify には「機密の」の意味があって、旺文社1900で document を見ると、 leak classified document 「機密文書を漏洩する」 という例文もある。 動詞 leak は、液体や秘密などが「漏れる」とか「漏らす」の意味。東京書籍と桐原の3000語レベルにも4500語レベルにも書いてない。桐原5500に書いてある。 桐原5500の例文は秘密を「漏らす」ほうの内容。 なお、文書ではなく情報の「機密情報」については旺文社 leak を見ると、 a secret information と言っている。 桐原4500では、「機密情報」を confidential information と言っている(桐原4500のmake関係の熟語のmake use of ~ の項目)。 2010年にWikiリークという、各国政府などの機密情報をネット公開する海外サイトが世界的に話題になったからか、単語集では leak の例文が機密の漏洩ばかり。だが、もちろん液体などが漏れる場合にも普通に leak は使われる。 なお、wikibooksなど当wikiプロジェクトは、wikiリークとは全く別の組織。「wiki」とはソフト名の一種なので、まったく別の組織でも、wikiソフトを使っていると組織名がwikiなんとかと、似たような名称になることもある。 なおleakの名詞形は leakage であり、「漏れ」「漏出」「漏洩」の意味(旺文社1900)。だが、単語 leak 自体でも名詞の意味もあり、同じような「漏れ」という意味(桐原5500)。 「秘密」については、secret や classify の他に、confidence (カーンフィデンス)という単語もある。 だが、このconfidence は意味が「信頼」「自信」「確信」「秘密」と幅広い。 「信頼」と「自信」と「確信」については和訳でも同じ「信」の文字があるから、まあ連想できるとして(信頼の対象が自己になれば「自信」。「確信」とは、信じている自分への自信。など)、問題は「秘密」である。 信頼しあっている間柄での秘密、的なイメージで覚えるのが良いだろう。 形容詞 confidential の意味なら「内密の」というのがセンチュリー和英にもある。 だが、名詞の「秘密」のことを「内密」とは言わないので、confidence は「秘密」と訳すしかない。辞書もそうなっている。 ジーニアスによれば、「秘密文書」は confidential documents とのこと。 ---- 確認 check, confirm , confident check が「チェックする」である。 英語のチェック check はいろんな意味で使われ、意外と難しいので、日本語でそのまま「チェックする」と意味を覚えてしまうのが良い。東京書籍1800の単語集を見ても、checkの意味の説明で「チェックする」とそのまま書いてある。 check は「確認する」ことにも使われるし、確認したことを証拠に残すためのチェックマーク( ✓ )の記述にも使われるし、「点検する」ことにも使われるし、「照合する」にも使われるし、チェスの王手(いわゆるチェックメイト)にも使われる。このように意外と難しいからか、桐原4500では4500レベルとしてcheckを紹介している。 confirm が「確認する」「身元を証明する」である。(東京書籍4500) チェックについては、チェックリスト check list が英語にもあることを知るべきだろうか。 工場労働など屋内での社会人の点検業務では、可能なかぎり、忘れのないように点検内容を一覧表の list リストにして、それにチェックマーク( ✓ )を入れることで漏らさずにチェックをするという方法がある。 なお、チェックマークを入れるための視覚欄(大きめな □ )のことを、チェックボックス check box といい、これも英語にある(ジーニアスで確認)。 こういうチェックリストやチェックボックスの存在を知っていれば、check の「点検する」や「照合する」の意味も覚えやすいだろう。 語学の勉強というのは、こういうふうに英語以外のビジネス知識なども必要なのである。 checkを「チェックする」と覚えればいいと言ったものの、ただし上述のチェックボックスやチェックリストのように、仕事でも知的な仕事なら check という英語は使うので、覚えておく必要があるだろう。 桐原4500では、「医者が患者の血圧を調べる」という内容の例文でチェック check を使っている。check はそういう専門性の高い用途にも耐えうる単語でもある。 ほか、小切手も check といい、同じスペルだが、説明を省略する。ホテルなどのチェックイン check in , チェックアウト check out も同じ単語だが、説明を省略する。 IT系でも、よく会員制webサイトの登録画面などで説明書きを読んだか確認するためのチェックボックスが、海外サイトではよく使われる。 社会人になって就職するなどして、品質検査の方法などを習っていないので、あまり「チェックとは何か?」とか深入りしても、埒(らち)が あかない。 confirm は、高校生には馴染みがないかもしれないが、IT系では意外とよく、会員制webサイトのパスワード登録の画面などとして、海外サイトではよく使われる。 身元証明の典型的な例文で、誰々の「身元を証明する」という例文があり、 たとえば東京書籍4500では 「彼女の身元を証明する」confirm her identity がある。 旺文社の例文を少し改造して(「郵便局員が私の身元を確認した」という内容)、「彼が私の身元を確認した」なら He confirmed my identity となるだろう。 「裏づける」の典型な例文が、裁判などでの「新たな証拠が彼の話を裏づけた」であり、東京書籍によれば、 「新たな証拠が彼の話を裏づけた」 The new evidence confirmed his story. である。 桐原4500にも、現在完了形であるが、ほぼ同じ英文がある。 confirm の名詞形は confirmation である。旺文社1900にだけ紹介されている(桐原4500と東京書籍4500はconfirmationを紹介していない)。 confident については、別の項目で説明した。confidence は意味が「信頼」「自信」「確信」「秘密」と幅広い。 単語集に共通の例文が見当たらないので、辞書などを購入して読んでほしい。 * 検査 なお、和英辞典で「検査」を見ると、testやinspectなど色々な単語がある。 testはどちらかというと「試験」である。 血液検査が blood test であり、聴力検査が hearing test だし、日本語では「検査」でも英語では test だったりする場合もある。 「テスト」と聞いて、日本の学校の学力試験しか思いつかないのなら、改めよう。英語では普通に、医療や工業などの検査でも test は使われるからである。 inspect は、査察官や検閲官をinsepector と言うので、そういうニュアンスもあるので、検閲・査察のニュアンスが強く、日本の「検査」には1対1には対応しない。 東京書籍と桐原の単語集には inspect がないので、気にしなくていい。米英の行政の事情を知らないと inspector などは理解できないだろう。日本の高校生には不要な知識であろう。inspector という、そういう高校で習わない行政用語があるという事だけを知っておけば十分だろう。 なお、実は旺文社1900に inspect と inspector がある。inspector には「検査官」の意味のほか、「警部」の意味もあるとのこと。 だが、そもそも、英語の文脈においける「警部」とは何かという問題がある。ジーニアスでinspectorを見ると、米では「警視正」、英では「警部」とのこと。まあ、警察組織の現場職での上のほうの人、ぐらいの意味だろうか。 なお、「捜査員」は investigator である。これだけだと難しそうだが、米国のFBIこと「連邦捜査局」が the Federal Bureau Investigation である(旺文社)。 「捜査する」は investigate である。 典型的な例文が 「警察がその殺人事件を捜査している。」 The police are investigating the murder. である(桐原、ジーニアス)。 なお、federal (フェデラル)は形容詞としては「連邦の」という意味であり、名詞としては「連邦」の意味である(ジー二アス)。 もうひとつの典型的な例文が、 「警察がその自動車事故の原因を調査している。」 The police are investigating the cause of the car accident. である(東京書籍、センチュリー)。事故なので、捜査ではなく「調査」。東京書籍でも「調査」になっているし、センチュリーでは「調べている」としている。 なお、「探偵」と「刑事」は detective である。英語では、「探偵」と「刑事」が同じ単語なのである。 動詞 detect の意味は、東京書籍いわく、何か見つけづらいものを「探知」「発見する」などの意味である。センチュリーいわく、隠されているものや悪事などを見つける場合に使うことが多いとのこと。 単語集にはないが、「探知機」が detector である(ジーニアスで確認できる)。ジーニアスいわく、金属探知機は a metal detector である。 この例のように、 detect で発見するのは別に犯罪事件の犯人でなくてもよく、たとえば桐原の例文では病院でのガン(癌) cancer を「発見する」ことを detect としている。 センチュリーいわく「ガス漏れを見つける」は detect a gas leak である。 センチュリーいわく、嘘を見破るのも detect である。東京書籍いわく、「スパイを見破る」は detect a spy とのこと。 locate という「位置する」と言う意味の動詞がある。名詞形 location が「位置」 の意味である。 この locate には、なにかの場所を「突き止める」という意味もある。 東京書籍が detect の単語の次に、locateの例文で「アジトを突き止める」を紹介しているが、著作権の都合があるので本ページでは紹介しない。 なお、アジトは a safe house である(東京書籍)。またアジトとは、犯罪組織や反乱組織などの「隠れ家」のこと。 なお、「隠れる」は hide である。 太陽が雲に「隠れる」みたいな平和的な「隠れる」も、犯人が「隠れる」も、 hide である(センチュリーで確認)。 「太陽が雲に隠れる」 The sun is hidden by clouds である(ジーニアスとセンチュリーに、ほぼ同じ例文)。 なお、「隠れ家」「隠れ場所」には、hide-out という言い方もある(ジーニアスいわく「隠れ場所」)。旺文社では hide-out を「隠れ家」「潜伏場所」と紹介。 hide の活用は hide - hid - hidden/hid である。 さて、conceal という、「隠す」という意味の単語があり、物や秘密を「隠す」場合に使われる。 辞書を見た限り、conceal には、人が隠れるような用法はない。 単語集を見ると、conceal の例文で、感情を「隠す」ような例文もあれば(旺文社)、爆弾が「隠されていた」という例文もある(桐原)。 隠された秘密を「暴く」のは reveal や uncover がある。 ---- 暴露(ばくろ) reveal, uncover, disclose reveal は、意図的に秘密を暴いた場合のほかにも、不注意などで秘密が漏れた場合にも用いる。旺文社の例文も秘密が漏れた場合である。 名詞形 revelation である。 よくある例文は、 「真相を明らかにする」 reveal the truth である(東京書籍に和訳・英文とも同じ文。センチュリーでは「真相を漏らす」と訳)。 そのほか、単語集にはないが、物理的に隠れているなどして見えなかったものが見えるよう現れる事も reveal というが、単語集にないので無視する。 なお、光や危険などに「暴露する」ことは expose である(桐原)。 暴露(ばくろ)は「ばくろ」と読む。「ぼうろ」(×)ではない。 disclose 意図的に秘密を暴いたり、あるいは自分や自組織の秘密を公表したりする場合は、 disclose のほうが適切かもしれない。 固い言い回しなので、暴露や公表や自白などの対象となる秘密は、たとえばセンチュリーでは「彼はスパイであったこと」だとか、「その男の正体」だとか、 あるいはジーニアスでは「真実を新聞に暴露する」とか、なんかそんな感じの秘密ばかりである。 名詞形「公開」「暴露」は disclosure である。 「情報公開」は disclosure of information である(ジーニアス、旺文社)。 東京書籍4500および桐原4500には disclose が無い。 uncover 「真相を明らかにする」 uncover the truth のように使う(東京書籍)。桐原4500には例文なし。東京書籍は巻末おくりなので、解説なし。 uncover の語源は、見れば分かると思うが「カバーを取る」である(ジーニアスで確認)。 なので、単語集にはないが、容器などの「フタを取る」も uncover である(ジーニアス、センチュリーで確認)。 そして単語集(旺文社)にあるが、遺跡などを発掘するのも uncover である(旺文社)。遺跡を埋めている土などをフタに見立てて覚えよう。 ---- 不安 anxiety, alarm 恐怖 fear、 horror 警報 alarm 警戒 alert 警告 warning, caution 旺文社1900によると、alarm の出題番号が549 で、alarm が「不安」「恐れ」を第一義で紹介されており、anxiety (「不安」「心配」)の形容詞 anxious の583番よりも alarm のほうが早い。 勘弁してほしい。 まずalarm は普通、警報器のことである。実際、東京書籍3000では、alarm は「警報器」「目覚まし時計」の意味でしか紹介していない。 桐原4500ですら、「驚き」「恐怖」の意味を紹介しているが、しかしalarmの第一義はあくまで「警報(器)」というのが桐原のスタンスである。 とはいえ、旺文社は大学入試の出題順に紹介しているだけである。つまり、日本の大学入試がロクでもないのだろう。 なお、ジーニアスによると、alarm の第一義は「驚き」「恐怖」である。なお、語源はイタリア語の「武器を取れ」all'armeである。 なるほど、alarm アラームの語尾 -arm が「武器」 arm と同じわけである。 現代では、普通、「驚いた」は be surprised at などを使うだろう。 どうしても「驚き」「恐怖」の意味で使いたいなら、死の恐怖のある文脈で使うと、頭良さそうに見えると思う。 ジーニアスの例文でも、「シカは驚いて逃げていった」の例文で in alarm という用法を使っている。狩人や肉食動物などによる死の恐怖を感じたシカ的な用法。 しかし、ジーニアスによれば、恐怖の意味での alarm は「fear より固い語」である。 fear (フィエア)は「恐怖」「不安」である。まずfear は「恐怖」で覚えよう。4500語レベルではなく、桐原3000と旺文社1400にfearはある。あと東京書籍4500。 典型的な例文が、「高所恐怖症です」であり、ジーニアスと東京書籍にそういう例文がある。 I have a fear of heights. 「私は高所恐怖症だ。」 である。 単語集にはないが、辞書によくある例文が「恐怖で顔が真っ青になる」であり、 turn pale with fear 「恐怖で顔が真っ青になる」 である。センチュリーが pale (ぺイル)である。 ジーニアスだと、white を使い、 turn white with fear 「恐怖で顔が真っ青になる」 である。 なお、形容詞 fearful で「恐ろしい」「恐れている」の意味。 なお、horror で、戦場での死の恐怖も表現できる。日本語の「ホラー」のような幽霊やら悪魔などのオカルト限定のような制限は無い。 fear とスペルの似ている fare(フェア) は「運賃」「なりゆき」であり、意味がまったく違う。 ほか、スポーツの「フェアプレーの精神」などの意味の「フェア」は fair であり、スペルがまったく違う。なお、この形容詞 fairは「公平な」の意味である(桐原4500など)。 商店の安売りなどの「フェア」は、「お祭り」という意味の 名詞 fair であり、フェアプレーの単語とは同音異義語である(桐原4500)。ジーニアスによると、英語以外の言語に feria (フェリア?)という「祭日」を意味する単語があるらしい。商店の安売りの他、ジーニアスによれば「博覧会」や「見本市」も fair である。 米国の外交問題についての専門雑誌で「Foreign Affairs」というのがあるが、affair (アフェアー)とは「出来事」「関心ごと」の意味である。affair は別に恐怖とは関係ない。「Foreign Affairs」は戦争の話題が多い雑誌だが、しかし雑誌名は「恐怖」とは全く関係ないので誤解しないよう。 なお、ジーニアス和英の affair の項目によると、「時事問題」は current affairs である。 「浮気」とか「不倫」とかも affair と言う。恋愛雑誌やらで時々「アフェア」とか言う単語があるのは、この意味だろう。 なお、「外交」を一言でいうと diplomacy (ディプロウマシ)である(桐原4500など)。「外交官」が diplomat である。形容詞 diplomatic は「外交の」である。 さて、「警報器」alarm の典型的な例文が 「火災警報器」 a fire alarm である。これは東京書籍も桐原も紹介している。 なお、スペルの似ているアラート alert は、alert は名詞では「警報」「警戒」の意味だが、形容詞では「警戒している」の意味がある。(桐原5500、旺文社1900) また、形容詞でalert は「油断しない」の意味もある(東京書籍4500)。 単語集の「警戒している」の例文では、よく警察官や兵士などの警戒が出てくる。 警察官の場合なら、 The police officer is alert ・・・ で、「警察官は警戒している」の意味になる。 つまり、 ~(人) be alert の語順になる。 warning は「警告」である。翻訳の都合で「警報」と訳したほうが自然な場合もあるが、warning の意味としてまず第一に覚えるべきは「警告」である。 東京書籍で「洪水」 flood を見ると、「洪水警報」 flood warning がある。辞書 warning では確認できなかったが(ジーニアスとセンチュリーで、warningとfloodの両方を確認)、しかしセンチュリーいわく「空襲警報」が air-raid warning なので、たぶん洪水警報も合っているのだろう。 warn は「警告する」であり、医師が患者に「酒を飲みすぎないように警告する」とか(センチュリー)、嵐の接近を警告するとか(センチュリーとか)、そういうニュアンスである。 warn ◯◯(人) of ~ で「◯◯(人)に~を警告する」である。 記法を変えれば、 warn A of B 「BについてAに警告する」 です(桐原、旺文社、東京書籍)。 東京書籍が紹介していますが、 warn me of the enemy 「敵がいるぞと私に警告する」 です。 なお桐原は、喫煙の危険性(risk)を警告する例文です。ジーニアスは、旅路か何かの危険(danger )を警告する例文です。危険という概念で統一的に説明できそうですが、直接的に言い回しを覚えたほうが早いでしょう。 of はよく「~の」と中学で教わりますが、それだと意味が通りません。 さて、inform 「(情報などを)知らせる」という単語にも、 inform A of B 「BについてAに知らせる」 という語法があります。 桐原が inform him of the result 「彼に結果を知らせる」 のような例文を紹介しています。 なお、典型例の言い回しは、 Please inform me of the change in ~ 「~の変更を私に知らせてくれ」 です(旺文社、センチュリー)。 ともかく、warn A of B は inform A of B と関連づけて覚えましょう。 桐原がそういう覚え方を進めています(warn と inform を同一ページで教えている)。 ただし、東京書籍のようなcrisis (危機)など関連語の紹介は、桐原では同一ページにないですが。どの単語集も、一長一短です。 なお、東京書籍3000には、なんと inform の項目がありません。information はあるのですが。 なお、information は数えられない名詞なので複数形が無いので、「2つの情報」は two pieces of information と表す。「ひとつの情報」は a piece of information です(東京書籍3000)。 桐原は、remind A of B(思い出させる) や convince A of B(納得させる、確信させる) や inform A of B と warn A of B や suspect A of B (疑う)などをまとめて、 「関連の of」という概念を提唱しています。 ただ、そう解釈しなくても、 このうち、「警告する」warn と「思い出させる」remind も情報提供の一種ですので、 「情報提供の of 」とでも言える概念で、 remind A of B と inform A of B と warn A of B をまとめられます。 だとすると、暗記するのは残りの convince A of B (Bを納得/確信させる)と suspect A of B (B(容疑など)の疑いをかける)だけに減らせます。 このうち、 convince は、他人に何かの納得をさせる際に、説得などの情報提供が行われるでしょうから、広い意味での「情報提供の of 」と言えるかもしれません。暗記の負担がこれで減ります。 だとすると、残りは suspect A of B 「AにBの疑いをかける」です。 この場合、なんの情報提供もしていません。 また、of B の部分は形容詞的な意味です。 made of ~ で、「~を材料に作る」とかの意味であり、完成品を一目で見て材料が分かるなら made of です。 材料が、完成品を一目みてもわからない場合は made from ~ です。 この suspect A of B と made of B の共通する「of B」で、「性質の of」とかの概念を考えてもいいかもしれません(英語学でどうかは知りません。自己責任で)。 ほか、英文法で、「It is 形容詞 of 人」と「It is 形容詞 for 人」の使い分けなどがあります。人の性質を言う場合は「of 人」です。これから類推する方法もあるかもしれません。 まあ、最終的には suspect A of B 「AにBの疑いをかける」を直接的に覚えるしかありません。 warn ◯◯(人) against ~ing で「◯◯(人)に~しないように警告する」である。 たとえば、よくある例文が、「彼は道路を横断しないように私に警告した」(ジーニアス)あるいは川を渡らないように私に警告した(東京書籍)、であり、 He warned me of against crossing the river. 「彼は川を渡らないように私に警告した」 である。 動詞および名詞の caution は、動詞としては、たとえば医者などが肝硬変の患者に「酒を飲むな」と注意・警告するときの「注意する」「警告する」が caution である(桐原5500)。東京書籍4500の例文も、薬の取扱いの注意を caution としている例文。 ただし、辞書では、警察などの警告・注意もcautionである。このため、warningとの区別は、なかなか難しい。 ジーニアスが言うには、cautionのほうがwarningよりも軽いとのこと。 形容詞 anxious (アンクシャス)は「心配している」「不安に思っている」である。 be anxious about ~ で「~を心配している」である。 He is anxious about ~ なら「彼は~を心配している」である。 よくある例文が、「彼は試験の結果を心配している」であり、東京書籍とジーニアスにそれに似た例文がある、 He was anxious about the result of exam. 「彼は試験の結果を心配している。」 となろう。(wikiオリジナル) ジーニアスだと、母親視点の「息子のテスト」だが、まあこういう例文がよくる。 be anxious for ~ は「~を切望している」である。 桐原の「新しいコピー機が欲しくてたまらない」なら be anxious for new copy machine である。 ジーニアスだと(私は)「新しいコンピュータが欲しかった」なので、 I was anxious for a new computer. 「新しいコンピュータが欲しかった。」(※ ジーニアスanxious例文から引用) である。 名詞形 anxiety で「不安」「心配」「切望」である。東京書籍4500には「切望」が書いてないが、しかし桐原4500と旺文社1900には切望が書いてある。 なお、 eager (イーガー) は「熱望している」である。切望 anxious とは、ややニュアンスが違う。 ---- 武器・兵器 weapon, arm 大量破壊兵器は weapons of mass destruction であり、略称は WMD である(桐原4500、旺文社1900、ジー二アス)。 また、核兵器は nuclear weapons である(桐原4500、旺文社1900、東京書籍、ジー二アス)。 だいたい、arms だと、「腕」(うで)と まぎらわしい。 兵器には、なるべく weapon を使うのが無難だろう。 なお、動植物の角(つの)や爪(つめ)や刺(とげ)なども、weapon である(ジー二アス)。 weapon は、日本では「兵器」と訳される場合が多いが、しかし英語では weapon は広く攻撃のための道具を表す用語である。 単語集にはないが、山川の英語版・世界史にあった単語で、 rearmament が「再軍備」である(ジーニアス)。ナチスによるドイツの「再軍備」みたいな文脈で rearmament を使える。 ほか、disarmament が「軍縮」である。啓林館 Vision Quest I(P.111) が「軍縮」disarmament を紹介しています。 なお、名詞 army は「陸軍」「軍隊」の意味です(桐原3000、旺文社1400(緑)、東京書籍4500)。 「海軍」は navy (ネイビー)です(東京書籍、桐原)。 「空軍」は air force です(東京書籍、桐原)。 「軍事の」は military です(東京書籍、桐原)。 陸軍と海軍も空軍もまとめて「軍隊」と言いたい場合、army だと陸軍とまぎらわしいので、military force という場合もあります(東京書籍)。 ただし、「軍事力」も military force です(桐原)。 このため、翻訳などの際は、文脈にあわせて、うまく訳してください。 軍「隊」との混同を嫌ってか、単語を power を使って「軍事力」は military power という用法もある(ジーニアス military、センチュリー power)。 ほか、「軍隊」を the armed forces と言ってもいい(桐原、forces ) 「兵士」は soldier (ソルジャー)です(東京書籍、桐原)。 東京書籍いわく、さらに「将校」(しょうこう)は officer (オフィサー)です。 とはいえ、「将校」(しょうこう)と言っても、何のことだか分からないのが普通の高校生でしょう。 軍隊の上層部や、将来的にそうなる見込みの高い軍隊の大学を出た軍人や、あるいは同程度に一定以上の階級の高い指揮官のことを、将校と言います。 最下級の階級である兵士は当然、将校ではないです。 「兵士長」とか「軍曹」とかの現場の下の方の中間管理職も、ふつうは将校とは言わないです。ただし、文脈によっては、「軍曹」なども将校という場合があるかもしれません。 『「将校」という単語くらい知っとけや。日本史の勉強すれば出てくるんだからさ~』というのが、東京書籍の心のさけびでしょうか。 戦後の自衛隊ではあまり「将校」とは聞かなくなりましたが、海外の軍隊の説明だと今でも使います。 戦前でも、よく二・二六事件とかで「青年将校」がどうのこうの、という解説を読みます。こういう英語を知っていると、英語力だけでなく日本史などの知識も披露できて、頭よさそうに見えます。 桐原いわく「兵役」(へいえき)は military service です。 「英語を勉強するなら、こんくらい知っておけや」という桐原の心のさけびです。 まず、諸外国でもヨーロッパなどで今でも徴兵制、つまり兵役があります。2020年代でも、スイス、オーストリアは徴兵制があります。 ここでいう service とは、公共の下僕のような意味もあるかと思います。 たとえば「召使い」は英語で servant (サーバント)ですが、なんと単語集に書いていません。 桐原の単語周いわく、serve は「仕える」とか「提供する」とかの意味です(桐原4500)。 今ではネットのサーバー server とか、派生の名詞が使われています(ジーニアス、センチュリー)。 ただし、ネットの情報提供については、「プロバイダー業者」などというように provide が「(情報などを)提供する」の意味で好んで使われる場合もあります(桐原)。 交通インフラや電力インフラなどの公共インフラなどの提供も service です(ジーニアス)。慈善事業も service です(センチュリー)。 「兵役」(へいえき)は military service を覚えるときも、そういうのと関連づけて覚えましょう。 ---- 安売り・特売 フェア、セール、バザール sale のみ高校英語 商店の安売りなどの「フェア」は、「お祭り」という意味の fair であり、フェアプレーの単語とは同音異義語である。ジーニアスによると、英語以外の言語に feria (フェリア?)という「祭日」を意味する単語があるらしい。商店の安売りの他、ジーニアスによれば「博覧会」や「見本市」も fair である。 なお、セールは英語でも sale で「安売り」(桐原3000、東京書籍3000)や「特売」(旺文社1200)や「バーゲンセール」(東京書籍3000)の意味がある。sell とは別に、sale (セール)「販売」という単語がある(東京書籍3000、桐原3000)。 なお、セールスポイントは英語で selling point である(旺文社1200(黄色)、ジー二アスで確認)。 セールスポイントは和製英語。 なお、単語集にはないが、セールスマン(販売員)は英語でも salesman であるが、男女平等の観点から salesperson という表現が米英では好まれるだろう(ジー二アス)。 salesman は、外交販売員(日本でいう「セールスマン」)にも使われるが、英語では単なる店員も salesman で表せる。 複数形 sales で「売り上げ高」の意味もある(桐原3000)。なお桐原では「売上高」3文字ではなく「売り上げ高」5文字の表記。 単語集にはないだろうが、バザーとの違いについて触れる。 ジーニアスによると、英語の bazaar は、慈善などの目的のために特別に催される市場である。だから教会などがバザーするわけである。しかし、イランなど中東の商店街のことも bazaar である。英語の単なる「雑貨屋」のことも bazaar という。 バザーを「安売り祭り」みたいな意味で使うのは、どうやら和製のようだ。 啓林館 Vision quest( P.62 )で、ディスカウント discount 「値引き」、バーゲン bargain 「お買い得品」などが紹介されていました。 ---- 必要不可欠 不可欠な essential, vital, indispensable 必要な necessary 搾る squeeze, extract 搾取する squeeze, exploit 桐原4500に vital の意味は「生命の」とあるので、まずこれで覚えよう。 また桐原4500いわく、vitality の意味は「生命力」である。 入試では vital の他の意味の「不可欠だ」「活気のある」などが問われるかも知れないが、まずはvitalの単語のイメージが生命力であることをつかもう。 vial → 「生命に必要」→「不可欠」という連想、 および vital → 「生命力にあふれる」→「活気のある」という連想、 で覚えれば、暗鬼の負担が減るだろう。 旺文社1900の例文で、「防衛戦略が国家の安全保障にとって不可欠だ」という例文で「不可欠」を vital としている例文がある。 これだって、「国家の生存に必要」→「国防に不可欠」みたいなイメージで把握できるだろう。 なお、桐原4500は「自転車が生活に不可欠」で不可欠がvital、東京書籍4500は「外国語が教育に不可欠」で不可欠がvital、という内容。 ともかく、vital は「活気のある」という意味もあるが、「生命の」とか「不可欠な」のような意味もある。 別の単語の話をする。 もし、単に「活気のある」「元気はつらつな」と言いたい場合は、形容詞 vigorous (ビゴラス)という単語でも一応は表現できる。東京書籍は「活発な」「力強い」と紹介しており、「活発な運動」 vigorous exercise という例文がある(東京書籍4500巻末)。ただ、辞書で 名詞形 vigor (ビガー)や 形容詞 vigorous の用例を見ると、「激しい(スポーツなどの)運動」とか「猛烈な抗議」とか、やや意味合いが強い用例も多いので、注意が必要であろう。 Z会のTOEIC対策本では、同じ vigorous exercise という単語を、「激しい運動がもとで、疲労で倒れた」という内容の文章で用いている<ref>松本茂 監修『速読速聴・英単語 Core 1900 ver.4』、Z会、2014年3月10日 ver.4第7刷発行、P.382</ref>。 このように、vigorous exercise は、いい意味でも悪い意味でも使う。 肉体的に元気のあるだけでなく、精神的にも「精力的な」という表現でも vigorous が使える。 なお、「猛烈な抗議」などの猛烈でも vigorous あるいは名詞形 vigor を使う(ジーニアス、センチュリー)。 protest a plan with vigor 「計画に猛反対する」(センチュリー) make a vigorous protest 「猛烈な抗議をする」(ジーニアス) である。 essential は「不可欠な」という意味。 だが、「エッセンシャル・オイル」essential oil という芳香性の油を考えれば分かるように、なんだか抽出物みたいなイメージ。 名詞形 essence 「本質」「エキス」で覚えるほうが理解しやすいだろう。 (なお、名詞 extract にも「エキス」「抽出物」「抜粋」の意味がある。extract は動詞として「抽出する」の意味もある。(東京書籍が動詞を紹介。旺文社は名詞も紹介。桐原は紹介せず)。動詞と名詞とで発音が異なる。名詞は エキストラクト。動詞は イクストラクト。「抽出」「摘出」の行為自体は extraction という名詞である(旺文社)。) あるいは、「必須アミノ酸」が essential amino acid である(ジーニアスで確認)。 抽出ついでに言うと、abstract も「抽出」という意味(桐原4500巻末)。abstract には「抽象的な」の意味もあるが、まずは抽出の意味で覚えよう。というか日本語でも、「抽象的」の「抽」の文字は、「抽出」の「抽」の字である。なお、冒頭のab-は、ここでは分離を意味する接頭辞。absent「欠席の」のabとabstractのabは同じ意味(桐原4500)。 エッセンシャルの話に戻ると、たとえば、生物学書の『キャンベル エッセンシャル生物学』 "Campbell Essential Biology" という500ページ以上ありそうな分厚い生物学書がある。(なお、amazon米国版では何故かこの本が18歳以上が購入禁止なのでリンクは紹介しない。) エッセンシャルというのは、そういう感じの意味。 桐原では、「食事は不可欠だ」みたいな例文でも essential を使っている。 なお、「食事」は英語で meal (ミール)である(essential の文に合うかどうかは知らない)。 食事しないと死ぬので、生命維持の観点では vital でもあるが、しかしそういう死を防ぐためのものでも essential で言い表す場合もある。 さて、単語集によくある例文が、「~は健康に欠かせない」 be essential for good health  であり、東京書籍と桐原がそうである。 東京書籍だと「運動は健康に欠かせない」、桐原だと「食事は健康に欠かせない」的な内容である。 運動 exercise なら、 Exercise is essential for good health. 「運動は健康に欠かせない。」(東京書籍4500より引用) である。 「搾る」の extract を squeezeのニュアンスの違いについて。 extract は「抽出する」が第一の意味のようなものである。 -tract が「引っ張る」という意味でもあることから想像できるように(センチュリー)、extractは、目的物を、自分の方向に向かってこさせるイメージである。 だからextractで果汁を「しぼる」のは、その手段にすぎない。 だから、濃縮エキスの抽出のような、搾るだけでは不可能なことも、extract なら出来る。 ほか、薬品などを使って何かの成分を抽出するのも extract である(ジーニアスで確認)。 ほか、歯科医が歯を抜くのも extract である(センチュリー、ジーニアス)。 パソコンのファイルの圧縮・展開でいう「展開」も extract です。 いっぽう、extract には「抜粋する」の意味や、抜粋して「要約する」という意味もあります(センチュリー)。 抜粋すると情報量が減るのに、圧縮ファイルを展開すると情報量は増えます。 妙に感じるかもしれません。 しかし辞書でextract を調べると、秘密などの情報を「聞き出す」「暴き出す」のような意味もあります(センチュリー)。圧縮していて読み取れない情報を「暴き出す」ようなイメージでしょうか。 もっとも、最近のパソコンでは、オペレーティングシステムが高度なので、圧縮されたままでも読み取りのできる場合もありますが。 逆に、圧縮・展開の「圧縮」は compress です。 日本でも、機械などの空気圧縮機でいうコンプレッサーなどの外来語で有名です(ただし、高校生には目にする機会(チャンス)がないかもしれません)。しかし意外なことに単語衆にはcompressはありません。 高校・中学でIT教育が必履修になるなどしてもう年月も経ってますので、どうせあと10年か20年したら「圧縮」・「展開」などIT用語も英単語に加わるでしょうから、先手を打って、このページにまとめておきます(ならないとしても、もしその場合は実務では役立たずなので未来の高校英語の単語衆に価値ないので、価値ない単語集に従う必要ないです。私たちが目指すべきは、大学合格する英単語ではなく、仕事で使える英単語です。仕事を無視した英単語学習をしても最終的に淘汰されるだけの弱肉強食です)。 英語だと、たとえばジーニアスでは、自動車エンジンにおける空気の圧縮のことを compress で表現しています。 なお、空調機のエアコンの「コン」はコンディショナーの略ですので、混同しないように。 センチュリーを見ると、コンピュータ用語のファイル圧縮も compress だと書いてあります(センチュリー、ジーニアス)。 ほか、綿(わた、めん)などを圧縮して小さくするのも compress です(センチュリー)。 ややこしいことに、compress にも、話を「要約する」という意味があります(センチュリー、ジーニアス)。 いまどき、「要約」はsummary でしょうから、compress は綿やファイルなどを「小さくする」(つまり圧縮)の意味で覚えるのが良いと思います。 まとめると、 ファイルの「圧縮」は compress です。 ファイルの「展開」は extract です。 さて、「しぼる」の話題にもどります。 squeeze は、にぎるように力を内側に押し付けるイメージである。だから squeeze で、資金を「圧迫する」なども表現できる。 では、具体的に extract と squeeze のニュアンスの違いを見ていこう。 「エキス」や「抽出する」のextract について。 extract juice from a orange で「オレンジからジュースをしぼり出す」「オレンジの果汁を搾る(しぼる)」 の意味(センチュリーや旺文社)。 文脈によっては、oranges ではなく an orange でも構わない。ジーニアスでは、レモンの複数形 lemons から果汁を搾り取っている。 「搾る」は、squeeze もある。 果物などをしぼって果汁をとるのが典型的で、 squeeze a lemon 「レモンをしぼる」 が典型的(センチュリー、旺文社)。 果汁を明示したい場合 「オレンジから果汁をしぼる」squeeze juice from an orange と言える(東京書籍4500の巻末。ジーニアスだと lemon で似た例文)。 squeeze lemon juice on ~(食品など) で「レモン果汁を~にかける」である(桐原4500、ジーニアスに似た例文)。 「労働者をしぼりとる」「労働者を搾取する」のような表現でも、squeeze を使える(桐原5500、センチュリー)。 なお、いわゆる「ブラック企業」のような会社(労働者を低賃金で長時間働かせる工場など)は、英語では sweatshop (スウェトシャプ)といい、「搾取工場」などと訳される(旺文社1900)。sweat (スウェト)は「汗」という意味の名詞である(桐原4500)。東京書籍4500は sweat および sweatshop を紹介せず。 なお、動詞 exploit 「搾取する」である(旺文社1400(緑)、桐原4500)。 典型的な例文が、 exploit one's workers 「労働者を搾取する」 であろう(ジー二アス、東京書籍、旺文社に似た例文)。 ほか、exploit には、たとえば地熱発電や自然資源などといった資源などを「開発する」の意味や(旺文社1400、桐原4500)、機会などを「利用する」という意味もある(東京書籍4500)。 家計のやりくりなど、なんらかの資金のやりくりなどで、お金をなんとか「絞り出す」というのにもsqueeze は使える(センチュリー)。 ただし、ほかの意味で squeeze には予算などを「圧迫(あっぱく)する」という意味もある(ジーニアス、センチュリー)。 資金のやりくりと、資金の圧迫では、ほぼ逆の意味になるので、読解のさいには文脈からどちらなのかを読み取ろう。 squeeze には「押し入る」「押し込む」や、人ごみや席などへの「割り込む」「割り込ませる」という意味もあり(センチュリーが押し入りと割り込み。ジーニアスは割り込み のみ)、旺文社が「押し入る」を紹介している。「圧迫する」から「押し入る」などを連想しよう。 indispensable 「不可欠な」は桐原5500巻末や旺文社1900本文と東京書籍4500巻末が紹介しているが、これを直接に覚えるよりも前に、まず、銀行などの「現金支払い機」dispenser (ディスペンサー)を覚えよう(ジーニアスで銀行の「現金支払い機が dispenser だと確認)。 動詞 dispense は、「分配する」とか、機械が「出す」という意味である(ジーニアス、センチュリー)。 なので、コーヒーなどの自動販売機も dispenser である(センチュリー)。 で、形容詞 dispensable は「それほど必要ではない」「なくても済む」の意味である。 「自分はなくても済むので(dispensable なので)、他人に分配できる(dispense できる)」→「分配する機械がデイスペンサー」とでも、こじつけて覚えよう。 で、in- はここでは否定の接頭辞なので、 indispensable 「必要なので分配するわけにはいかない」→「つまり、必要不可欠」→単に「必要不可欠」と言えば済む のように indispensable を覚えるのが、関連の語彙も覚えられて一石二鳥だろう。 旺文社1900だけ、indispensable の項目で、派生語の dispense 「分配する」「施す」「~なしで済ませる」を紹介している。 桐原5500は、indispensable の類義語で、essential や integral を紹介している。 be indispensable for ~(ないと困る物) 「~は必要不可欠である」 のように使う(旺文社1900、東京書籍4500)が、文脈によっては for でなく別の前置詞や接続詞の場合もある(桐原4500)。 ---- 要約 summary, brief summary (サマリー)が「要約」の一般的な語でしょう(特に出典は無い)。 要約のまとめ方や業界によって、outline (アウトライン)や brief (ブリーフ)など、別の言い回しのほうが好まれる場合もあります。 「要約する」の意味が、extract 、compress 、summarize などの単語があります。要約のことを summary (サマリー)と言います。サマリーの動詞形が summarize (サマライズ)です。 ほか、brief も、名詞では「簡潔な説明」の意味、動詞では(読みやすいように手短かに簡略化された説明にする、という意味での)「要約する」の意味です。 桐原4500が brief を「要約」の意味で紹介しています(桐原4500)。 in brief 「手短かに」 の意味です(桐原、旺文社)。 また、 keep it brief 「手短かにする」 です(東京書籍、旺文社)。it の部分は、必要に応じて適した目的語に変えます。 名詞形 briefing は、「簡潔な説明」の意味もありますいが、「事前の打ち合わせ」の意味でも使われます(旺文社)。 compress と extract は、現代ではコンピュータ上の処理で使うし、現代の商業の著作物の大半はパソコンで作られているので、やや使用の歳には注意が必要かもしれません。 summarize のほうがいいかもしれません。 一方、 summarize もまた、辞書や単語集では「要約」を名詞 summary と簡単に言いますが(桐原4500、旺文社1900)、実はサマリー summary と日本語の「要約」は微妙に違います。 英語では、1~2行ていどの短文で短くまとめることを summary と言うこともよくあります。brief だと「記者会見」など別の意味に誤解されるからか、本来なら "brief" というべき単なる1~2行ていどの事実報告でも英米では summary でそういう1行程度の事実報告を言い表す場合もあります。 brief だと、たとえば press briefing が「報道向け説明会」で使われたり(ジー二アス)、briefing session が「定例記者会見」だったり(ジー二アス)、ややニュアンスが「要約」とは異なります。全体像を理解しやすくするよりも、brief は短時間に発表することがニュアンスにあります。 summary execution で「即決処刑」である(ジーニアス)。 要約を意味する単語 summary には、形容詞として「略式の」という意味もある。execution は「処刑」の意味です。 この例のように、summary は日本の「要約」とは、ややニュアンスが違う場合もある。 さて、米英の外交官の著作した回顧録(かいころく)の出版物で読んだのですが、 外交官は、定期的に サマリー summary という1~3行ていどの事実関係の報告を本国によく送るするらしいです。 日本語では、新聞やテレビのニュースにおける「短信」(たんしん)が短いので、近いでしょうか。 大使館の職員でもありますから記者会見(ブリーフィング)とは区別する必要もあるでしょうから、brief ではなく summary でそういう短いを言うのも合理的でしょう。 なお、「回顧録」(かいころく)は英語で memoir (メモワール)です(旺文社1900、ジー二アス)。単語集では、旺文社1900にのみあり、受験英語としてではなく英検準1級対策として紹介されている語です。桐原4500・5500および東京書籍4500にはありません。 外交官とか、この手の報告では、分析は極力交えず、事実だけを報告します。分析は、別途、本国のほうで行ってもらうのです。こうすることで、外交官は情報収集にのみ専念できます。 外交官は滞在先が友好国とは限りませんし、(自国以外との)紛争当事国などの場合もあります。もし友好国でない場合、もしかしたら滞在先の警察や軍隊によって通信が盗聴されたりしているかもしれません。そういう環境で、あまり分析を外交官側で行うべきではないでしょう。 なので、ともかく summary のほか、日本語には「要約」の他に適切な表現があまりないので、summary の訳は「要約」で通じますし、辞書や単語衆にも「要約」だと書いていますし、「まとめ」でも構いません(旺文社)。 「要約」のほか、ジーニアスには「概略」や「大要」、センチュリーには「概要」や「大略」なども書いてありますが、しかし上述のように、1~2行ていどに縮めて報告する書類形式というビジネスなど実務での背景がありますので、いちばん短い感じのしそうな「要約」が無難な表現でしょう。 実際、単語集にも、名詞 summary は「要約」で紹介されています。 これから紹介するのは高校範囲外の単語ですが、英語では、1行要約ではなくて、せいぜい5~8行くらいの文章で要点を列挙して書いたのは outline (アウトライン)などと言います(※高校の範囲外)。 アウトラインを書く場合も、できえば箇条書きにするなどして(ジーにアス)、全体構造を見やすくする必要があります。 ジー二アスには行数の条件は書いてないですが、普通、箇条書きされた説明は、長くて5~8行ていどのものでしょう。1行の箇条書きとか意味不明ですし、100行の箇条書きとか論外です。 ジーニアスいわく、そういう箇条書きされたものが本来のアウトラインとのことです。ジーニアスでは「概略」「概説」、センチュリーでは「概要」「あらまし」を outline 訳にしています。 outline の訳語を覚えるよりも、『箇条書きする等して手短かにまとめたものを「アウトライン」という』と覚えたほうが応用が利くでしょう。 仕事の報告での情報のやりとりなどで、もし1行要約だと短すぎて情報不足なときに、アウトラインによる報告が役立ちます。そういう使い分けをするのが大事です。 もしかしたら英米人のなかには、そういう使い分けをしない人もいるかもしれませんが、そういう人はレポートの書き方を知らない人であり、つまり知的レベルの低い人なので、相手する必要はないです。 まとめると、summary が「要約」の一般的な語だとみなせるでしょう。 要約のまとめ方や業界によって、outline や brief など、専用の言い回しのほうが好まれる場合もあります。 ---- 重要 crucial, important 決定的な crucial , decisive 4500語レベルの単語集に crucial (クルーシャル)と言う単語があって「決定的な」「主要な」という意味である。 だが、decisive という「決定的な」の意味の単語がある。(東京書籍4500に単語だけ紹介されている。旺文社1900の巻末の章に、単語だけ「決定的な」「断固とした」と意味が紹介されている。桐原4500にはない。桐原5500にある。) ジーニアスいわく、「決戦」は a decisive battle である。 ジーニアスの例文では、decisiveは「将来を決定する」という意味もあると説明している。 東京書籍4500の crucial 項目の例文で、「そのオーディションに合格することは私の将来にとって決定的な意味をもっている」とある。 ジーニアスでcrucialを見たら、「重要である」という意味であり、例文が「我々が決勝戦に勝つには、彼の支えが重要である。」の「とても重要である」が crucial である。なお、「決勝戦」はその項目を見る限りは the final match である。 crucial の意味で、桐原と東京書籍には「決定的な」と書いてあるが、正直、decisiveのような断固とした気迫が足りない。「決戦」で負けると死ぬが、オーディションで負けたり「決勝戦」で負けても死ぬわけでもあるまい。 あまり論理的ではないが、decisive は、おそらくスペルが同じく"d"から始まる determination 「決心」「決意」の影響を受けてきたのだろうか。 動詞 decide と動詞 determine の違いについては、別セクションで語る予定。 crucial の意味は「非常に重要な」(桐原)で十分だろう。旺文社1900に至っては、「決定的な」の意味は紹介せず、crucial では「重要な」として紹介していない。 まあ、important よりかは重要度が高いつもりのニュアンスでしかないだろう。 旺文社1900では「書類を確認する際は注意することが重要である。」でcrucial を用いている。 桐原4500では「国際貿易はこの国の発展に非常に重要だ。」で crucial を用いている。 まあ、センチュリーcrucial の例文にあるように「彼のホームランは我々の勝利を決定的にした。」でcrucial を用いているように、命をかけるほどでもない野球の試合でも決定的な瞬間はあると思うので、そういう場合は crucial を使うのも良いだろう。 桐原5500にcrucial で「命にかかわる」の意味を紹介しているが、しかしジーニアス英和およびセンチュリー英和では確認できなかった。 そもそも vital という「生命維持に必要な」の意味の形容詞がある(センチュリーで確認)。 そもそも「重要」という概念自体、言葉の割には、vital のような生命への必要不可欠さが足りない。 ---- 外国の alien, foreign 米国の外交問題についての専門雑誌で「Foreign Affairs」というのがあるが、affair (アフェアー)とは「出来事」「関心ごと」の意味である。affair は別に恐怖とは関係ない。「Foreign Affairs」は戦争の話題が多い雑誌だが、しかし雑誌名は「恐怖」とは全く関係ないので誤解しないよう。 「Foreign Affairs」は直訳すれば「外交の関心事」みたいな意味の雑誌名であろう。 なお、日本の「外務省」も英語版ホームページでは Ministry of foreign affairs である<ref>[https://www.mofa.go.jp/index.html "Ministry of Foreign Affairs of Japan" ] 2022年5月4日に確認. </ref>。 海外旅行とか海外出張とかでは必要な単語のひとつなので、頭の片隅に入れておこう。 ministry とはイギリス英語で省庁のこと。ただしアメリカでは、省庁を department と呼んでいる。 つまり日本政府は、「省庁」についてはイギリス英語を採用。 デパートなんて百貨店っぽい。なお百貨店は英語で department store である。 なおイギリスでも、新設の省庁については department を用いることもあると、ジーニアスは説明している。 さて、「省庁」の呼び名には、あまり深入りしてほしくない。 それより重要なのは、「大臣」 minister である。 大臣のことを minister という。単語集では「大臣」minister の項目に書いてあるが、「外務大臣」は foreign minister である。 今の単語集にはあまり書いてないが、昔はよく「総理大臣」は英語で the prime minister だと高校で習ったものである。いちおう、東京書籍の例文中に「総理大臣」the prime minister がある。桐原には書いてない。 説明の都合上、先に「省庁」 ministry を紹介したが、覚えるなら先に「大臣」minister から覚えたほうが良い。 語源としても、ラテン語で「従者」とかのことをミニステルと言うので、先に「大臣」→「省庁」の順番で単語ができたと考えるほうが合理的である。ジーニアスにも、ラテン語とは買いてないが、「召使い」がminister の語源だと書いてある。 prime については、主要という意味での「第一の」という意味である。センチュリーにある訳語だが、「第一位の」というのがニュアンスに近いだろう。 primeの語源はもともと、カトリックの日課の「最初の」礼拝のこと(ジーニアスで確認)。 primeはこういう意味なので、単に一番目であるだけでなく、さらに重要性の高いものに使われるというニュアンスがある。 ただし、実際の用例では、国家一番や世界一番でなくとも、たとえば肉が美味しい場合でも「極上の肉一切れ」 a prime cut of meat という風にも使う(ジーニアスで確認)。センチュリーにも似た例文がある。 「全盛期」、「絶頂期」という意味もあり、 in prime of his life(またはcareer) 「彼の人生(またはキャリア)の全盛期」みたいにも使う。 「全盛期」には、ほかに短い類義語が無さそうである。和英辞典で「全盛」を見ると、prime のほかに pride とか summer があるが、しかし英和でそれらの項目を確認しても、ニュアンスが違う。pride のほうは、pride of place という語句で「最高位」「最上位」という意味だし、summer は人生における「壮年」などの比喩でしかない。 名詞 foreigner は「外国人」 である。ただ、英語ではこの言い方は差別的な意味合いがあるとのこと。桐原3000いわく、なるべく、たとえば「カナダ人」 Canadian など具体的に言うべきとのこと。 alien alien (発音: エイリアン)は「宇宙人」という意味があるので、なんとなく、あまりよくないイメージを読者は持ちがちかもしれないが、しかしジーニアスで確認すると、法律上の用語で「外国の」「異国の」という用法がある。 センチュリーによると、市民権をもたない外国人のことを alien と言うとのこと。 alien は、名詞も形容詞も同じスペルの alien である。 名詞 alien は「外国人」「宇宙人」の意味。 形容詞 alien は「外国の」「外国人の」の意味と、「異質の」「なじみがない」の意味。 よくある例文が「その習慣には、なじみがない」で、習慣 custom に alien で「なじみがない」という内容の英文を東京書籍とジーニアスで見かけた。 語法は、 ~(習慣など) is alien to □□(人々) で、 「~(習慣)は□□(の人々)には、なじみがない」の意味。 たとえば、 alien to us なら「私たちにとって、なじみのない」という意味(ジーニアスおよび桐原)。 ---- 国内の domestic, internal (※範囲外) 「国内総生産」GDPは gross domestic product のことである。domestic violence は「家庭内暴力」である。 「国内の」という意味での domestic が、「外国の」 foreign の対義語である。 domestic ⇔ foreign さて、 「国内の」 を意味する形容詞 internal は、「国内問題」というとき internal affairs という(ジーニアス、センチュリーで確認)。 なお、数学の図形の幾何学の、「内角」も internal angle である(ジーニアスで確認)。 internal には医療などで「内服の」や「体内の」などの意味もあるが、共通の例文が確認できなかったので、説明を省略する。 なお外角は external angle または exterior angleである(ジーニアス和英で確認。英和にはない。和英)。 なお、「幾何学」は geometry (ジオメトリー)である(旺文社1900)。なお「地理学」はgeography (ジオグラフィー)である(桐原4500、東京書籍4500)。「地形」や「地勢」などもgeography である(東京書籍)。 geo- (ジオ)というのは「地球の」とか「地理の」という意味だが(ジーニアス)、幾何学にも使う。おそらく、古代のヨーロッパでは幾何学の知識を活用して、地図などを作成していたのだろう。 「ユークリッド幾何学」は英語で Euclidean geometry である(旺文社1900、)。「ユークリッド幾何学」というのは、日本では中学の数学で、図形の証明として習う、あの理論の体系のこと。「タレスの定理」とか「中心円の定理」とか、あそこら辺が「ユークリッド幾何学」。紀元前のギリシアの数学者エウクレイデスの名前にちなんで、英語読みでユークリッドになる。 なお、X-Y座標を使って計算する座標幾何学は、ユークリッドではなく「デカルト幾何学」という別の理論体系。デカルトは中世フランスの数学者。デカルトあたりが、座標幾何学の理論を整備しはじめたので。 さて、形容詞 interior は「内部の」という意味の形容詞だが(ジーニアス)、しかし普通は家や自動車の内壁に対して interior を使う(ジーニアス)。 ジーニアス英和の interior によると、幾何学の「内角」を interior angle で表してもいいとのこと。旺文社1900も東京書籍4500も、建築物の「室内の壁」を the interior walls としている。なお、東京書籍は「内部の壁」と和訳。 ---- 生産量 output, production 「生産」を意味する production に、「生産高」の意味もある(ジーニアス)。なお、単語集では、prodcution の「生産高」の意味までは説明していない(東京4500、桐原4500、旺文社1900を確認)。 increase production で 「生産量を増やす」である(ジーニアス)。センチュリーでも、文章は違って完了形などになるが、「映画製作が減少」という内容の文で production を生産量の意味で使っている。 より平易に output でも「生産高」を言える(旺文社、ジーニアス)。 工場などの生産高から(ジーニアス)、芸術などの産物まで(センチュリー)、output で表現していい。 production や produce には、「大量生産」のようなニュアンスがある(東京書籍)。 なお「大量生産」は mass production である(センチュリー)。 なお、テレビ番組や音楽作品などの生産から、その生産された作品なども production である(ジーニアス)。 output の対義語は input である。 つまり input ⇔ output である。 input で、名詞としtrは、仕事や活動などへの資材や労働力などの「投入量」、コンピュータへの「入力」を意味する。また動詞としては、「投入する」や「入力する」の意味である(ジーニアス、センチュリー)。 旺文社の単語集には、inputに投入量の意味がないが、しかし辞書で「投入量」を確認できる。 同様に、対義語のoutput は、仕事や活動などの「生産高」や、コンピュータからの「出力」である。動詞としても同様に「産出する」(ジーニアス)や「結果を出す」(センチュリー)や「出力する」である。 input には、仕事・活動などへの援助としての情報提供やアイディア提供などの意味もある(ジーニアス、センチュリー)。 東京書籍や桐原の単語集には input や output が見当たらなかった。だがこれからのIT時代、必要になる単語であるので、ぜひとも意味を理解しておきたい単語である。 ---- 「外国」と「海外」 外国へ abroad 海外へ overseas 「外国に」「外国へ」は abroad であり、副詞である。 「海外に」「海外へ」は overseas であり、副詞である。 overseas は字ヅラだけ見れば、海を越えて外国に行くことだが、アメリカでは実際にはヨーロッパへ行くことに使われる事が多い(ジーニアス)。 travel overseas で「海外へ旅行する」である(旺文社)。 travel abroad で「外国へ旅行する」であるが、東京書籍では「海外へ旅行する」と訳している。 from overseas で「海外から」である(旺文社)。 abroad の典型的な例文が、 「私は外国へ(一度も)行ったことがない。」 I have never been abroad. である(東京書籍、桐原)。東京書籍と桐原で、同じ英文。桐原のほうには和訳で「一度も」がある。 ---- 結果 result, outcome, consequence 桐原4500と東京書籍4500の後半にoutcomeの単語の紹介があるが、良書とも解説を諦めている。 単に 結果のことを result だけでなく outcomeとも言うと、知っておくしかない。 consequenseは、単に「結果」を、固い言い回しにしただけであるが、東京書籍4500によると、「通例望ましく結果にconsequenceを用いる」とこのこと。 センチュリーと東京書籍に「深刻な結果」 a serious consequence と言う例文がある。 副詞 consequently は「その結果として」「したがって」の意味。 ---- 考え concept, notion ,ほか(idea, thought ,など色々ある) concept は、たとえば相対性理論の考えだとか、割と抽象的なことに使う。桐原4500いわく、「アインシュタインの相対性理論の概念」は Einstein's concept of relativity である。 notion は、そこまで抽象的でなく、たとえば人生観(ジーニアス)とか宗教観(センチュリー)とか。 ジーニアスでは「人生は航海だという考え」の「考え」を notion としている。 旺文社だと「概念」と言ってるが、無視していい。 概念というより「観念」だろう。 あるいは「観念」という用語をしらない高校生に向けて「概念」と書いたのかもしれないが、そんな底学力層のことは読者は気にしなくていい。 その他、ジーニアスで「意見」、センチュリーで「意向」だと言ってるが、両辞書で説明が一致しないので無視する。 ---- 「規範」と「基準」 規範 code 基準 normal (学校などの)規律、しつけ discipline 普通 normal, ordinary 「行動」と「指導」と「行儀」、「実践」 行動 conduct(指導のニュアンス)、behavior (行儀のニュアンス)、practice(理論・理念の実践) 習慣・慣習 practice 、 custom、クセ habit codeには「規範」「暗号」「法典」などの意味がある。 まず、codeの規範について。 ドレスコード dress code は「服装規程」のことである。「ドレスコード」「服装規程」とは、たとえばクラシック音楽コンサートホールとかの上流階級っぽい施設に入場しようとするとき、どんなに金を持っていても、もし服装が短パンとかジーパンとかだと入場を断られることがある。 成人男性の場合なら、背広とかのフォーマル formal な服装とかでないと、そういう場所には入場できないのである。そういうのをドレスコードと言う。 商業施設に限らず、たとえば冠婚葬祭(かんこん そうさい)とかの行事でも、その内容に見合った服装が求められる。 旺文社1900の例文が例文としてドレスコードを紹介しており、まさに大学進学を目指す階級にふさわしく、とても良い。 ダジャレだろうけど、第二次世界大戦の日本のGHQ占領期の言論統制のことをプレスコード press codeという。普通に科目「日本史B」とか「日本史探究」で、第二次世界大戦の日本のGHQ占領期の言論統制のことをプレスコードと言うと習う。ついでに覚えよう。英和辞典には press code は見当たらず、どうもGHQの造語っぽい。 ドレスコードの場合、codeは訳では「規則」や「規程」ではあるが、マナー的なニュアンスもある。 ジーニアスで確認したが「不文律」 code of silence という単語がある。 「行動規範」 は a code of conduct である。 ここら辺の表現が、上流階級に求められるマナー的な code であろうか。 その他、ビジネスライク名表現だが、「業務規程」 code of practice というのもある。 なお、「行動規範」 は a code of conduct のついでに言うと、「行動」conduct も類義語があり、behavior が類語後である。なお、旺文社ターゲット1400(中級の難度の本)が、conduct と behave を同じページで紹介している(おそらく旺文社もこれを類義語だと見なしているのだろう)。 道徳的な「行動」に conduct を使うことも多い.音楽の「指揮者」をコンダクター conductor と言うのも、これだろう。 The orchestra was conducted by Seiji Ozawa. そのオーケストラは小澤征爾によって指揮された。(東京書籍4500) とか conduct the orchestra オーケストを指揮する(桐原3000) とか典型。 高校英語では出ないだろうが、物理学の電気伝導のことを conduct という事もある。conduct には、指導とか伝導とかのようなニュアンスがある。 道徳的な「行動」に conduct を使うことも多いが、必ずしもそうとは限らない conduct interview インタビューを行う(東京書籍4500) conduct research 調査を行う(旺文社1400) のように調査研究を行うのに使う場合もある。 behave は、動詞「ふるまう」だが、ニュアンス的には「行儀」のニュアンス。 behave oneself で「行儀よくする」(桐原3000、旺文社1400) I can't stand His behavior. 彼のふるまいには我慢できない. (東京書籍4500) 東京書籍の例のように、behavior そのものには、指導的なニュアンスは無く、行儀が悪い場合にも使うようである。 conduct は動詞。「行う」、「指揮する」。「指揮者」は語尾が異なり conductor である。 behavior は名詞で「ふるまい」「行動」。behaveは動詞で「ふるまう」。 ほか、practice に、理念や理論などの「実践」の意味があり、単語集にもあります(桐原4500、旺文社ターゲット1900)。 practical 「実践的な」「実用的な」という単語もあるので(東京書籍4500、)、これと関連づけましょう。ほか、思想用語ですが、プラグマティズムという語があり、米国的な実用主義のことです。なお、プラグマティズムはドイツ語やギリシア語が語源なので、高校生には深入りは不要。 熟語で put ~ into practice で「~を実践する」 put his new ideas into practice 「彼の新しいアイデアを実践する」(旺文社1900、ジーニアスに似た例文あり) the idea to put his ideas into practice 「彼のアイデアを実行するチャンス」(桐原4500) とか典型です。なお桐原3000にもpracticeがありますが、3000では練習の意味しか書いてません。 practice his religion 「宗教を実践する」(ジーニアス、桐原5500をもとに作成したオリジナル) She practices vegetarianism. 彼女は菜食主義を実践している。(東京書籍3000そのまま) ほか、 practical experience 「実地の経験」(東京書籍4500、桐原4500) が典型です。 対義語は theoretical 「理論上の」です(東京書籍4500、桐原4500)。セオレティカルと、語尾がティカルになります。セオ「リカル」ではないです。セオ「レティカル」です。 「実用的な車」 practical car (東京書籍4500)、実地の経験ある大工 practical carpenter (三省堂グランドセンチュリー) たぶん大工が高校範囲でないので、東京書籍が気を利かして car 「車」に置き換えたのだろうと思います。 なお、理科などの実験は experiment です(東京書籍3000、旺文社1900)。 旺文社1900だとpracticeとexperiment が同じページに書いてあり、おそらく、類義語のようなものと見なしています。 practice には「練習」の意味があります。というか、先に「練習」の意味のほうを、多くの中高生用の学校用の単語集では習います。 exercise にも「練習」の意味がありますが、上記のように practice は宗教や思想にも使うので、なんかニュアンスが少しだけ重いです。 また、単語集には無いですが、practiceには「慣習」の意味もあります。「練習」などの派生的に覚えましょう。 宗教とか地域文化とかそういう単語で practice が使われている場合は、宗教の実践なのか、それとも宗教の慣習なのか、どちらなのか判別が面倒です。このため、入試では要求されないでしょう。あまり特定の宗教に深入りするのも入試的にアレですし。 慣習・習慣 practice 、custom、habit custom は、社会の習慣でも(東京書籍4500、旺文1900)、個人の習慣でも使う(桐原3000で個人の習慣を紹介)。 社会の慣習の意味の場合、custom と practice の区別は難しい。 custom やhabitは、意外と難度の高い単語と見なされており、東京書籍4500や旺文社1900など上級レベルの単語集でも紹介されてる。 habit は個人の習慣。個人の「癖」(くせ)が habit である。 このためか旺文社1900および東京書籍4500では対比として custom を「社会的な慣習」としているが、しかし実は個人の習慣にも custom を使う(桐原3000)。 the custom of visiting shrine on Wew Year Day 「神社を新年に参拝する風習」(旺文社1900) the custom of giving year-end gift 「お歳暮を贈る慣習」(東京書籍4500) もちろん日本以外の外国にも custom を使ってよく、 another country's customs 「他国の慣習」(桐原3000) habit で入試で典型的なのが、個人の食習慣。 well-balanced eating habits 「バランスのとれた食習慣」(旺文社1900) the habit of eating between meals 「間食の習慣」(東京書籍4500) She has a habit of playing with her hair when she's nervous. 「彼女には緊張すると髪をいじるくせがある」(桐原3000そのまま) ※辞書を見ても他にろくな例文が無いので、そのまま紹介 habit of ~ing で「~する習慣」である(旺文社1900)。 She has a habit of speaking quickly when she is angry. 「彼女には起こったときに早口で話すくせがある」(東京書籍4500そのまま) つまり単語集の典型例として、 He / She has a habit of ~ing ○○ when he/she is □□. 「彼/彼女には□□したときに〇〇を~するくせがある」 この桐原の例のように、無意識の「癖」にhabit を使う。 だが、他にも、喫煙とか麻薬とかそうのの悪癖にも habit を使う(ジーニアス)。この悪癖は入試には出ないだろう。辞書を見ても、麻薬とかそういうのの habit ばかりなので、桐原の髪の例文をそのまま紹介させてもらった。 しかし、良い習慣にも habit を使っても良い(東京書籍4500など)。 healthy habits 「健康的な習慣」(東京書籍4500) habit of rising early 「早起きの習慣」(ジーニアス)、habit of getting up early 「早起きの習慣」(グランドセンチュリー) 「習慣」の意味で practice を使う場合、地域などの集団の慣習。宗教とか風土とか。 ※ 入試範囲外だが汚職などの悪風の場合も、practiceを使う(ジーニアス)。 マナー以外にも code は使い、「民法」は the civil code , 「刑法」は the criminal code である。 だが、「lawで十分じゃん?」と思ったのか、東京書籍4500ではcodeの項目を見ても「暗号」しか紹介していない。なお、桐原4500の例文が、アメリカの各州の刑法 criminal code の違いの話題(いわゆる「州法」)。 おそらく東京書籍は、マナーの話をしたいなら manner で済むだろう、という発想だろう。なお、manner も英語であり、東京書籍4500にもmannerが書いてある。 「暗号」については、典型的な例文が 「暗号を解く」 break a code である(東京書籍4500, 桐原4500)。 normal (ノーマル)は、日常的には「普通の」「平均的な」という意味である。 だが、学問としては、労働などの「基準量」の意味を覚えておきたい。 日本では最近はすたれた言い回しだが、ソ連語の由来で「ノルマ」という、たとえば1日あたりの、しなければならない労働の最低量として「ノルマ」という語があった。 単語集にはないが、辞書で normal の意味に、数学の「直角の」という意味もある。おそらく、古代ギリシア人あたりが、角度の基準として直角(90度)を採用したのだろう。 なお、数値的な「平均の」を言いたいなら、 average である。形容詞「平均の」も名詞「平均」も average である。桐原4500では、normal のページといっしょにaverage も書いてある。 normal の対義語 abnormal は「異常の」「異常な」の意味である。 逆に考えれば、normal の意味は、「通常の」「正常の」でもある。桐原のnormal に「正常な」が書いてある。東京書籍の副詞 normally に「通常は」が書いてある。 ordinary 「ふつうの」「平凡な」は、よく「生活」と結びついて、ordinary life 「ふつうの生活」(東京書籍の訳)または「平凡な生活」(桐原の訳) ordinary はこのように、並外れた部分がないというニュアンスがある。 逆に対義語の extraordinary は、「並外れた」の意味である。 「異常気象」は extraordinary weather である(東京書籍、ジーニアス)。 単語集にはないが、「臨時国会」も an extraordinary Diet session (ジーニアス)あるいは an extraordinary session of Diet (センチュリー)のように言えることも、覚えておきたい。なお、Diet とは、日本の「国会」のこと。外国の国会の呼び名は違っている場合も多いので、外国の国会のことを言いたい際には、その国ごとの呼び方を調べること。 そのほか、ルールに従わせるための統制や、そのための訓練のことなどを、 discipline という。 子供の「しつけ」や、学校の規律などが discipline である。 ジーニアスいわく 「学校の規律」 school discipline である。 また、センチュリーいわく「学校での規律」は discipline in school である。 子育てや教育にかぎらず、たとえば行政などの「金融統制」は financial discipline である(ジーニアス)。 そのほか、単語週では旺文社1900しか紹介していないが、大学での「学科」や「学問分野」のことも discipline という。辞書には普通に「学科」も「学問分野」も書いてある(ジーニアスで確認)。なお、実は旺文社では「学問分野」しか書いてないが、説明の都合で段落冒頭では「学科」も加えて紹介した。 ---- 通訳と翻訳 「通訳する」「解釈する」 interpret 「翻訳する」 translate 「通訳」とは、普通、口頭での翻訳のこと。 だから翻訳サイトの「グーグル翻訳」も、べつに口頭でのやりとりではないので、英語では google translate なわけである。 「通訳者」は interpreter である。 「同時通訳」は simultaneous interpretation である(旺文社 simultaneous、ジーニアス、センチュリー)。 simultaneous は「サイマルテイニアス」と読む。シミュ~とは読まない。 名詞形の「通訳」「解釈」は interpretation である(旺文社)。 東京書籍と桐原だと「解釈」の意味しか紹介していないが、しかし上述のように「同時通訳」でも interpretation は使われるので、「通訳」の意味も覚えるべきだろう。 なお、数学の「連立方程式」は simultaneous equation である(ジーニアス)。 simultaneous の部分が「連立」である。 「方程式」は equation である。 翻訳者は translator である。 [[カテゴリ:英語]] mhus6p4ovpo05s9wdzqjivvb14dtxwq 高等学校物理基礎 0 39456 246659 2024-04-13T12:36:14Z 2400:4051:4460:AA00:C548:ED62:7BFB:6FD8 [[高等学校 物理基礎]]への転送ページ wikitext text/x-wiki #転送 [[高等学校 物理基礎]] as66m70iq06xxq1igtg7f05poifod6n