質問するログイン新規登録

意見交換

31回答

679閲覧

while文やif文は関数?

N.hajik

総合スコア7

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

コンパイラ

コンパイラは、プログラミング言語で記述したソースコードを、コンピュータの実行形式であるオブジェクトコードに変換するプログラムです。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

2クリップ

投稿2026/02/10 03:43

0

2

C++等では、while文やif文を書くときに

C++

1while (<条件文>) { 2 <動作> 3}<a>

C++

1if (<条件文>){ 2 <動作> 3}<a>

と書きますよね。
私の感覚的には、while(A){B}は、(A)がTrueならば{B}を実行し続けるという関数、if(A){B}は、(A)がTrueならば{B}を実行するという関数という風に思えます。しかし、<a>には「 ; 」を打ちません。何故でしょうか?
さらに言えば、(A)の内部の例えば t == 1 等の条件文も、 t が 1 ならばTrueを返す関数のように思えます。しかし、此れにも「 ; 」を打ちません。何故でしょうか?
ふと疑問に思ったので質問させてください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

回答32

#1

u2025

総合スコア181

投稿2026/02/10 04:20

別に関数定義の最後にもクラス定義の最後(複合ステートメントの終了)にもセミコロン要らんやん

#2

N.hajik

総合スコア7

投稿2026/02/10 04:26

#1
本文には書きませんでしたが、それも含めて違和感があります。

#3

fana

総合スコア12375

投稿2026/02/10 04:44

編集2026/02/10 05:14

関数という風に思えます

ここでの「関数」という語は,そのプログラミング言語において定義されている「関数」ではなくて,より一般的な言葉としての「関数」ですよね?
であれば,「私には○○は関数のように思える」と言われても,他者からすれば「で?」としか……

関数という風に思えます。しかし、<a>には「 ; 」を打ちません

「しかし」の意味がわかりません.文章の繋がりが意味不明です.
【「関数」であれば「;」で終わるべし】という話が存在するのであれば別ですが,そんな話は見当たりませんので.


あなたに同調(?)すると,「 1 というのは,値1を返す関数だと思える」気がするんですが,
であれば 1+2+3 みたいなのは 1; + 2; + 3; とすべき,ってことになるのでしょうか?
なんだか,タイピングが面倒くさい言語になりそうです.

#4

Manabu

総合スコア132

投稿2026/02/10 06:12

編集2026/02/10 06:13

条件分岐のifwhileは制御構文です
;の有無に関係なく、これらは関数ではありません
条件文の判定は言語、実装により異なります
C/C++では多くの場合条件分岐の判定はステートメント内が0か否かで決定されます

int main(void){ if(0) printf("True"); else printf("False"); int x=3; while(x){ printf("\n%d",x); --x; } };
False 3 2 1

#5

otn

総合スコア86548

投稿2026/02/10 07:16

;」を何だと思っているのでしょうか?

#6

N.hajik

総合スコア7

投稿2026/02/10 07:29

#2

「私には○○は関数のように思える」と言われても,他者からすれば「で?」としか……

この文章は前提を示しているので、「で?」で正しいです。

そんな話は見当たりませんので.

調べてみたところ、「 ; 」は「関数」ではなく、「文」に対して用いるようですね。その違いは理解出来なかった為、御教示願いたいのですが、質問の本軸にはあまり関係ないですね。彼等が「関数」かどうかですので。

あなたに同調(?)すると(以下略)

「 1 」は数値であって何らかの処理をしているようには見えません。例えば、変数から数を出すことは関数に見えますが。「 1 」等の即ち入出力が等しいものをも関数と見做すと関数の呼び出し自体を関数と化されるので定義で外されそうですね。

#7

N.hajik

総合スコア7

投稿2026/02/10 07:30

#4
制御構文が関数で無い理由を教えて頂けますか?

#8

N.hajik

総合スコア7

投稿2026/02/10 07:32

#5
可能ならば、何だか教えて頂けますか?

#9

fana

総合スコア12375

投稿2026/02/10 07:45

編集2026/02/10 07:57

【 while や if 等々は意味的に(?)「関数」と見ることができる(→から,これらを関数だとするプログラミング言語を考えることも可能と思われる)が,既存の C++ 等のプログラミング言語ではそれらを関数としては扱っていない.その理由とは何になるのであろうか?】

……みたいな話なんでしょうかね.(セミコロンの方はどうでもよくて)
そういう話だとしたら,究極的には「個々の言語を作った人に問うしか無いかも」みたいな気もしますが……

1

動的に(実行時に)結果が定まるもの でなくとも,関数と呼べるんじゃないかなぁ.
(「この言語では,定数関数 f(x)=1 は単に 1 と書く」とかいう話にすれば)

#10

N.hajik

総合スコア7

投稿2026/02/10 07:56

#9
そういう意味の質問にも見られますね。
一方で、while や if 等が関数で無いのならばその理由を問うという意味の質問にも見られます。
唯一つの明確な回答が無い可能性を考えて質問ではなく意見交換を建てました。

#11

SaitoAtsushi

総合スコア5850

投稿2026/02/10 08:24

編集2026/02/10 10:40

たとえばこんなことをするとします。

if(a) { b(); } else { c(); }

a が真のときは b() が評価されて c() は評価されません。 a が偽のときは b() は評価されず c() が評価されます。

もしも if が関数だったらたとえば書き方はこんな感じでしょうか。

if(a, b(), c());

関数の引数は関数に渡される前に評価されるというルールであるため a が真か偽かで b() c() を評価したりしなかったりを選択できません。

クロージャに包むとかと組み合わせるなら関数にすることも出来なくはないです。 でも常識的に考えてこんな基本的なことであえてそういう回りくどい言語設計にするべき理由があるでしょうか? while も同様です。

正格評価の言語で if を関数には出来ないというのは LISP 系の入門書で取り上げられがちなテーマですね。 実際に計算機プログラムの構造と解釈対話による Common Lisp 入門スタンダードテキスト ANSI Common Lispといった書籍には言及があります。

#12

otn

総合スコア86548

投稿2026/02/10 10:17

編集2026/02/11 10:14

まず、

「;」を何だと思っているのでしょうか?

は、「関数呼び出しの直後には必ずセミコロンを書くと思っているのかな?」と思ったので聞いてみました。

可能ならば、何だか教えて頂けますか?

ですが、どこまでの前提知識があるのかわからない人に教えるとなると、「そもそも文とは」から入らねばならず書籍数ページ分ですかね。別途質問をたてて、あなたのC++文法の理解度をわかるように書いてもらえると回答可能かもしれません。回答しないかもしれません。
あるいは、AIに質問して対話を繰り返すと、理解状況に合わせて説明してくれるかと思います。自分のC++理解度を説明する手間が省けます。
分からない人向けの説明ではないですが、一言でいうと「文の最後を示す記号で、文の一部」ですかね。一部なので、例えばcontinueだけでは文でなくてcontinue;が文です。


while や if 等が関数で無いのならばその理由を問うという意味の質問にも見られます。

関数には引数がありますが、私の知る言語はすべて、「引数を全部評価してから関数を呼び出す」です(と思ったけど例外が1つ)。
foo(x(), y())であれば、xとして定義された関数を実行してその返り値を確保して、yとして定義された関数を実行してその返り値を確保して2つの返り値を引数としてfooを呼び出します(xとyの順序は未規定)。
ifの機能でいうと、真部分と偽部分を両方とも実行してから関数を呼ぶことになるので、ifと同等の関数は作れません。
構成要素の、どの部分をどのタイミングで評価/実行するか、あるいは最後まで評価/実行するかしないか、あるいは何度も評価/実行を繰り返すかを、条件で制御するものは一般的には関数とは呼びません。制御構造などと呼びます。
まあ、「実行を伴うものはなんでもかんでも関数と呼びたい」という気持ちが強いなら「引数事前評価型関数」と「引数任意評価型関数」とかと名前を付けてもいいですが、両者は別物であり、区別する必要があります。「~~型関数」と呼ぶのがいいのか「関数」と「制御構造」と呼ぶのがいいのか、どちらがいいと思いますか?

なお、今のC++にはクロージャーがあるので、見かけ上「条件によって引数の評価/実行を好きな時にできる」のに近い関数を作ることはできます。
クロージャーが使える言語は多いので、コンパクトにクロージャーが書ける言語だと、制御構造っぽく使える関数も作れるでしょう。ただ、組み込みの制御構造よりはずっと見にくくなるでしょうが。
まあこれは、ちょっと本題から外れる気がしますので、この辺で。

#13

N.hajik

総合スコア7

投稿2026/02/10 12:00

#11#12
分かりやすい解説ありがとうございます。
C++等でwhile文やif文が関数として扱われない理由がよく分かりました。
調べてもあまり理解できなかったのですが、正格評価は遅延評価に比べてどのような利点があるのでしょうか?多くの言語で採用されているということは強い利点があるのだと推察します。

#14

SaitoAtsushi

総合スコア5850

投稿2026/02/10 12:52

むしろ遅延評価の利点は何であるか説明できますか? 有用な場面は限定的です。
特に C/C++ レベルの低レイヤを意識した言語で非正格評価だったらどうなるかを想像してみてください。
遅れて処理されるタイミングに合わせてメモリの確保・解放、オブジェクトの構築・解体を人間がやるのは全く非現実的です。
ややこしい部分は GC などの実行時サポートがあるから非正格評価の言語は使い物になるのです。
そしてそのサポートのための実行時コストが「必要なのか?」「割に合うのか?」と考えたときにあえてコストを支払ってまでやりたい理由がありますか?
人間のメンタルモデルもひとつの処理の後に次の処理という形式をかなり強く前提にしていて、そうではないパラダイムの言語は学習コストも高いです。
もちろん遅延評価が便利な場合もあるのですよ。しかし言語の基礎に据えるほどではないです。

#15

Manabu

総合スコア132

投稿2026/02/10 13:02

編集2026/02/10 13:22

#7
制御構文とはプログラムの動きを制御する構文です
ifwhileは条件分岐に特化した手続きです
一方で(C/C++における)関数とは識別子の一種です
関数のプロトタイプ宣言は識別子の宣言です
C/C++ではこのような特定の型を返す識別子(変数を含む)はまとめて宣言することができます

int a,b[],c(void);

一方で関数の実装は式や文の集合です
なので実装を文として著します

int c(void){ return 0; }

ifwhileが関数と同じように見えるのはこのためで、手続きの集合を束ねるために同じ記号を使うことに因みます
ですが制御構文は関数ではないので識別子として扱ったり、そのポインタを取ることはできません

また、変数宣言の例を見ても分かる通り、文とは特定のコンテキストで構成される手続きの集まりです
C/C++では文の中で,を用いることで手続きを区切ることができます
この手続きはコンテキストを構成します
例えば以下の例では式の集まりとして文が構成されます

a=a+b,c=func(),proc();

;が文の終わりを表します
例えば次の例を見てみましょう

class sample{ public: int x; } a,*b=&a,c(void);

これはクラスを定義して、そのインスタンス変数やポインタ、及びプロトタイプ関数を生成しています
クラスはclass {}型で、{}とワンセットの型です
これは構造体も同様です

struct {} a,b,c;

ここでも,;が登場しているように、文を変数(識別子)の宣言の集まりとして構成しています
このようにクラスなど{}とワンセットの型は{}に続けて変数が宣言できるので、必ず文の終わりを示す;が必要になります

class sample{};

このようにクラス宣言に;を付けるのは変数を何も生成しないと明示するためです
文を示すかコンテキストを示すかで;の要不要が変わります
制御構文や関数の実装では文を表す記号として{}が使えるので、用途の被る;は省略が許容されます

#16

u2025

総合スコア181

投稿2026/02/10 17:40

編集2026/02/10 17:43

#2

本文には書きませんでしたが、それも含めて違和感があります。

(別にどうだっていいのだけど)複合ステートメントの終わりにセミコロンがいらないっていう一貫したルールがあるのに、それに違和感があるってもう逆張り以外の何物でもないやん
(あ、知らなかったんだけど、クラスなんかはセミコロンいるんだ...)

ふつーに考えて、
a=1+1 b= 1+1みたいな書き方をしたらどこが終わりなのか分かりづらいからセミコロンで終わらせましょうってルールを決めて、特定の文法だと別にない方が分かりやすいねってことで無くなったんやない?

まあ、この質問がそういう意図じゃないことがわかった上で茶化しに来ただけなんだけど。
ちなみに、式とか文とかあって仕様的には別にセミコロンをない言語も作れるし、C++でもカンマ演算子みたいなのもあるから初心者が混乱しても別に不思議には思わんけどね。

あとは、初心者はこういう言語があります。こう使いますってまるで自然言語のように教えるんだろうけど、逆だからね。
仕様が先にあって書き方が後に来るから。教えないだろうけど、プログラム的にはセミコロンが大量に書いてもエラーになんなかったりする。
わざわざプログラミングの初心者に教えないのだろうけど、式とか文とかをWikipediaでも眺めてれば納得できるかと思う。
あとは簡単な言語のコンパイラ作るとか。

そういうのが気になる気持ちは分かる。

#17

thkana

総合スコア7778

投稿2026/02/10 23:02

先に「みんなが使っているコトバ」があってそこから文法を抽出した自然言語と違って、プログラム言語は「こういう文法にしよう」が先にあってその範囲内で組み立てた人工言語ですからねぇ。言ってしまえばwhileやifは関数ではない決まりにしたのだから関数ではない、で話は終わり...

文法用語の式と文を区別できていないというあたりにひとつの混乱の原因があるのでは。
質問では
while (<条件文>) {
条件'式'ではなく、条件'文'としているのがそのひとつの現れに思います。
C/C++では文は値を返しません。値が欲しいところに書かれるのは「式」です。そこを「条件文」とするのは誤り。

一方、文のひとつの形式が
式 ;
関数の呼び出しは式。それで文にしなければいけないシーンでは;が付く。決して「関数には;がつく」ような原則があるわけではありません。

while, forやifの構文の基本は
while(式)文
で、whileやfor,ifはwhle文やfor文というように、それ自体(最後の'文'まで含む全体)が「文」です。
それ自体が文なので、;をつけて文にする必要はありません。while文の後ろにセミコロンを付けてwhile(式)文;としても動作は変わりませんが、その場合はなにもしないセミコロンだけの文である「空文」をwhile文の次に書いたというだけで、whileとセミコロンの間に関係はありません。
while(式)式;と書いた場合は式;で文を構成させるための;です。これもwhileにくっつく;ではなく、式;が文としてひとつの単位です。

あとは、ブロック(複文)の話ですかね。
{ 文 文 ... }
これがセミコロン無しでひとつの文として扱われます。なので、
while(式){ 文 文 ...}
の}の後でもセミコロンは不要です。(関数定義などの{ }は同じ記号を使っていますがちょっと意味が違う...)

たしかExcelマクロでIF関数があったけど、条件分岐の三項演算子みたいなものですね。それ以外では手続き型言語の系譜では条件分岐やループが関数になっているものってあまり聞かない気がします。

#18

tmp

総合スコア364

投稿2026/02/10 23:27

条件文でなくて、条件式だったと思うのですが?

#19

N.hajik

総合スコア7

投稿2026/02/11 01:53

#14
正格評価だと、それらの実行時のコストは掛からないのですか?
正格評価と遅延評価は評価のタイミングが違うだけでやる処理の内容は同じなのかと私は理解しました。

#20

N.hajik

総合スコア7

投稿2026/02/11 01:57

#15#16#17
なるほど、{}自体が文であることを示すんですね。
()は中に式を持って事前評価される。
{}は中に文を持って全体で文を成す。事前評価はされない。
という理解であっているでしょうか?

#21

SaitoAtsushi

総合スコア5850

投稿2026/02/11 02:37

#14
遅延評価の処理の実態 (実装) はあらゆる箇所をクロージャに包んでいるようなものだと言えばわかりやすいでしょうか。
C++ をご存じならラムダ式に包みまくったら何が起こるか想像できませんか?
遅延評価 (非正格評価) を前提とした言語ではそれを前提として最適化する仕組みやデザインパターンもありますけど、避けようのない実行時コストはどうしてもあります。

単純に分量的に関連知識が多くて基礎から全部は書けないのと私自身も Haskell の入門書や計算機科学関連の本を何冊か読んだ程度の不十分な知識しかなくて体系的なことが言えるわけでもないのでこれ以上は説明しません。

#22

SaitoAtsushi

総合スコア5850

投稿2026/02/11 02:48

#20

C/C++ の ( ){ } に単独での意味があるわけではないです。 関数を覆う { } は関数定義の文法の一部ですが ifwhile に続くことも出来る { } は複数の文をひとつの文に束ねる複合文 (compound statement; 複文ということもある) の意味ですし、変数の定義の初期化子に現れる { } はリスト初期化の文法の一部です。 記号は多義的で、それが現れる文脈によって異なる意味を持ちます。

#23

otn

総合スコア86548

投稿2026/02/11 03:12

編集2026/02/11 03:51

正格評価は遅延評価に比べてどのような利点があるのでしょうか?

最大の利点はシンプルであること、わかりやすいということでしょう。
プログラムは、分岐や繰り返しが無い限り、書かれた順(上から下というか、前から後ろというか)に実行されます。
関数の場合も、関数呼び出しの個所に引数があるので、引数を評価してから関数を呼び出すというのが自然です(下記註※)。
実行時エラーが発生したときにも発生個所を調べるのがわかりやすいはず。
また、引数評価が重かったり副作用があったりする場合で、処理のリアルタイム的なタイミングが重要な場合は、遅延評価だとタイミングの調整が難しそうです。リアルタイム処理は土地勘が無いのでよくわかりませんが。

実行効率・メモリー効率については、「すべての仮引数が評価されるような関数」であれば、評価はどのみちされるので、評価するコードの受け渡し(一般的にはthunkというクロージャーのようなオブジェクトを作成)と、実行の行き戻りのオーバーヘッドなどの分だけ、先に評価する方が有利です。
また、「最初に仮引数が参照されたときに対応する実引数を評価して、その結果を保存しておき、その仮引数の二回目以降の参照ではその保存値を使う」という場合は、その初回かどうかという判断や保存も必要です。どの参照が初回かがコンパイル時にわかる場合はコードの最適化もできるでしょうが、条件分岐内で参照されているとどれが初回かは実行時でないと分からないです。
初回を区別せず、「仮引数が参照されるたびに実引数を評価する」という引数機構(call by name)もありますが、この場合は区別が必要ない代わりに、同じ実引数が何度も評価され得ます。

遅延評価の方が効率がいいこともありますね。さきほど「すべての仮引数が評価されるような関数であれば」と書きましたが、そうじゃなくて「第一引数と第二引数の値によっては第三引数を参照しないこともある。第三引数を参照するのは1万回に1回くらいとレア」な場合は、先に評価すると1万回中9999回は無駄になるので、不利。第三引数の評価が重い処理の場合は困りますね。先に評価する言語ではこういう場合は無駄なことをしないための工夫をするのでしょう。

※:「前から後ろ」と言いつつ、C/C++の場合は、引数が複数個あった場合に「引数がどの順番で評価されるのかは言語規格上は不定であり、経験上、多くの処理系では最後の引数が最初に評価され、第一引数が最後に評価される」というのが少し直感的ではないです。


追記:
朝書き始めて続き書いて投稿する間にコメント増えてた。

正格評価だと、それらの実行時のコストは掛からないのですか?
正格評価と遅延評価は評価のタイミングが違うだけでやる処理の内容は同じなのかと私は理解しました。

上記の通り、毎回クロージャー相当を作成するコストが追加なのと、初回かどうかあたりですね。
プログラムサイズ的には正格評価の方が小さい。実行時間は「すべての仮引数が評価される」ならこれも正格評価。「評価されないかもしれない実引数」場合はその重さと確率とでの総合評価ですが、「この引数が参照されるのはとてもレア」という関数はあまりないであろうと思います。

あと、単に「遅延評価」というと「仮引数の初回参照時に一度だけ実引数を評価」を指すと思いますが、「仮引数が参照されるたびに実引数を評価する」言語だと、こんな感じです。実装はさておき、概念的には、実引数のgetterとsetterがクロージャーとして関数にわたり、関数側では参照・代入の際にgetter・setterを呼ぶ。

call_by_nameの架空言語

1foo(int x, int y){ 2 print(x, y); // 出力は 0 1 となるのは普通の言語と同じ; 3 x = 10; 4 print(x, y); // 出力は 10 1 じゃなくて 10 11 になる 5} 6int a=0; 7foo(a, a+1);

#24

jimbe

総合スコア13471

投稿2026/02/11 03:29

残念ながら(貴方が思うカタチでの)統一された構造仕様では無いということでしょう。
括弧は何かを括る記号として便利に使われ、文脈に依って『何を括っていて・どのような内部構造を持ち・それらがどう扱われるのか』は変わるのです。
違和感があろうが何故そういう書き方なのか理解し難かろうが、ソウイウモノでしか無いです。

#25

Manabu

総合スコア132

投稿2026/02/11 03:50

#20
ここまでの解説がC/C++の仕様を前提としている点に注意は必要ですが、その解釈で概ね合っています
最終的には言語仕様に左右される点には留意しましょう
Rustのように{}が式を構成するケースもあれば、三項演算子のようにifが式として機能するパターンもあります
大事なことは{}が文を構成するかではなく、ある機能や文法を表現するためにどのような意図を以てその記号を採用しているかです
そこが言語毎の一貫性、つまりは個性となります

#26

otn

総合スコア86548

投稿2026/02/11 04:12

#20

()は中に式を持って事前評価される。
{}は中に文を持って全体で文を成す。事前評価はされない。

お書きの「事前評価」が何を意味するのか、最初は分からなかったのですが(「何の事前??」)、

if(式1) { 文1 文2 }と書くと、
「式1を評価してその値と、文1 文2 からなるクロージャーを引数として、if という関数を呼び出して、if 関数の中では式1の値が真値ならクロージャーを呼ぶ」
を意味する

という理解でしょうか?どうしても if を関数と呼ぶことにこだわるなら、そういう言い方の理解でも間違っているとはいえませんが、一般的では無いし、Cの考えでもありません。

f() && g()とかはどう理解するのでしょうね。

#27

N.hajik

総合スコア7

投稿2026/02/11 07:26

#21#22#23#24#25#26
大変分かりやすい解説有難うございます。

回答してくださった皆様のお蔭で、多くの疑問点の全てが解消されました。

最後に一つだけお聞きしたいのですが、このようなプログラムの構造?仕組み?概念?の体系的な学習には何というジャンルを調べて学べば良いのでしょうか?疑問の検索のキーワード(今回でいえば、正格評価や式・文)を認識する方法を知りたいです。
取り合えず、#11 で紹介されていた『計算機プログラムの構造と解釈』を購入し読んでみようと思うのですが、こういう物の学問分野の名称は何というのでしょうか。

#28

thkana

総合スコア7778

投稿2026/02/11 07:54

#27
言語仕様の話を知りたいなら、C/C++の仕様書を見ればよろしいかと思います。古くていいなら'JIS 3010'とか'JIS 3014'で検索すればJISの日本語のが少なくとも閲覧はできるようになっています(pdfもあるけれど、版権的なところとかよくわからない。「著作物」ではないので著作権には縛られないだろうとは思うけれど)。最初の質問の範囲(式と文だけ)ならそれで十分とも思います。最新は、正式版は有償なので最終ドラフトを見ることが多いです。英語しかないと思います。

#29

raccy

総合スコア21841

投稿2026/02/11 08:07

#27
計算機科学と言われる学問です。体系的に学びたいなら、大学のそれ系の学部に行くことをおすすめします。

#30

SaitoAtsushi

総合スコア5850

投稿2026/02/11 09:31

#27
「式」「文」の定義は統一されたものがあるわけではなく言語仕様ごとの定義です。 言語を越えた枠組みの知識もいくらかはあるに越したことはありませんが、計算機科学が学習ルートとして適切かどうかはちょっと微妙なところです。

たとえば私たちは日本語で交流しているわけですが、日本語について理解を深めたいと思ったときに言語学を学ぼうとしますか? 言語学には日本語に無い要素とかも含まれるのでもっと直接的に国語学のほうが良くないですか? みたいなことです。

つまりまずは特定の言語 (C++ ?) の理解を先に深めるというのも良いかもしれません。

もちろんどんな知識が役に立つのかは事前にはわかりません。 本人がどんな知識の習得を目指しているかも外からはわかりませんし、おそらく本人の中でもそんなにはっきりとはわかっていないんじゃないかと思います。 いくら検討してもわかることではないのでとりあえずどこからでも始めてみて駄目だったら別のアプローチをするしか仕方ないんじゃないでしょうか?

#31

otn

総合スコア86548

投稿2026/02/11 11:27

#27
「計算機科学」というと範囲が広いのですが、Amazonで「プログラミング言語論」で検索するとそれっぽい本があります。読んでないので薦めるものが無いですが。もう少し具体的な話だと「コンパイラ作成」で検索するのもあり。

『計算機プログラムの構造と解釈』は良いと思いますが、知識が少ない状態で読んでついていけるのかわかりません。まあ、いったん棚上げして半年後とかに続きを読むのもいいかと思いますので、今買うのはありでしょう。

言語仕様がJISで定められているいくつかのプログラミング言語のJIS規格票は、公式サイト
https://www.jisc.go.jp/app/jis/general/GnrJISSearch.html
で、ユーザー登録が必要ですが無料で閲覧できます。言語の規格票は JISX3000番台なので上記ページの規格番号検索欄にX3と入れて検索します。X3001はもちろんFortranです。
ただ、言語仕様を読んでも「何故こういう仕様なのか」はあまり書いてないので、他の知識から推測することになります。まあ、今だと「xx言語のJIS規格票をみると、これこれの仕様だが、なぜこのように定められているのか?」とかAIに聞くと多くの場合は教えてくれると思います。すべての仕様に理由があるとは限りませんが。

#32

この回答は、運営により削除されました。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

この意見交換はまだ受付中です。

会員登録して回答してみよう

アカウントをお持ちの方は

関連した質問