Skip to content

Instantly share code, notes, and snippets.

Created May 11, 2015 17:06
Show Gist options
  • Save anonymous/16639680599e7394ac41 to your computer and use it in GitHub Desktop.
Save anonymous/16639680599e7394ac41 to your computer and use it in GitHub Desktop.

プログラミング言語の紹介

本題:プログラム言語の紹介

  • にプログラミング言語を紹介します
    • 後半になるにつれ雑度が単調増加します
  • 独断と偏見と 知ったかぶり にまみれています
  • 使ったことのない言語も混じっています
  • 初心者向けではないものもあります
  • RosettaCode から引っ張ってきた FizzBuzz のコードを貼っておきます

C言語

  • 最初に学ぶ人が最も多い言語
  • とりあえずこれをやっておけ感がある
  • だが、文字列の扱いとかポインタとか意外と面倒な概念が多い
  • 一通りやって他の言語に触れるのがオススメ
  • ロ技研で講習会やります

C言語の使用例

  • マイコン / 組み込み
  • システムプログラミング (OSとかドライバとか)
  • 大学の講義(コンピュータサイエンス/情報実験第一/他)
#include<stdio.h>

int main (void)
{
    int i;
    for (i = 1; i <= 100; i++)
    {
        if (!(i % 15))
            printf ("FizzBuzz");
        else if (!(i % 3))
            printf ("Fizz");
        else if (!(i % 5))
            printf ("Buzz");
        else
            printf ("%d", i);
        printf("\n");
    }
    return 0;
}

Java

  • アイティー企業でよく使われる言語
  • 「オブジェクト指向型プログラミング言語」
    • 上手に使えば、大規模なシステムでもメンテナンス性の高いコードが書けるようになります
    • 上手な使い方は本で勉強するのがいいです
  • AndroidアプリはJavaで書けます

Javaの使用例

  • 業務システムプログラミング
  • 業務ウェブサービス
  • Android アプリ
  • 社会にはJavaを書く仕事が多いです。履歴書に書けます。
    • ただ、東工大生(の情報系)ならJavaぐらい書けて当然というイメージがあるので無意味な気がする…
public class FizzBuzz{
   public static void main(String[] args){
       for(int i= 1; i <= 100; i++){
           String output = "";
           if(i % 3 == 0) output += "Fizz";
           if(i % 5 == 0) output += "Buzz";
           if(output.equals("")) output += i;
           System.out.println(output);
       }
   }
}

C++

  • C の進化系 / オブジェクト指向言語でもある
  • 言語仕様が大きい
    • 標準ライブラリも大きい
    • ユーザーライブラリは無数にある
  • これで同人ゲームを作る人が多い (with DirectX)
    • 3DゲームならUnityとかUEを使おう (楽したいなら)
  • 部室に本が沢山あります

C++の使用例

  • 2Dゲーム
  • マイコンプログラミング
  • 競技プログラミング
    • ICPCとか
  • 社会
    • 某G社を始め、C++は社会で広く使われています
#include <iostream>
#include <algorithm>
#include <vector>

int main()
{
  std::vector<int> range(100);
  std::iota(range.begin(), range.end(), 1);

  std::vector<std::string> values;
  values.resize(range.size());

  auto fizzbuzz = [](int i) -> std::string {
    if ((i%15) == 0) return "FizzBuzz";
    if ((i%5) == 0)  return "Buzz";
    if ((i%3) == 0)  return "Fizz";
    return std::to_string(i);
  };

  std::transform(range.begin(), range.end(), values.begin(), fizzbuzz);

  for (auto& str: values) std::cout << str << std::endl;

  return 0;
}

C#

  • マイクロソフト謹製Javaっぽい言語
  • 実用的で書きやすいし、機能も多いので言語としてはGood.
    • 型周りがダメという人もいる
  • だが、環境が Windows + Visual Studio 限定である (通常)
    • 今後の発展に期待?

C# の使用例

  • WindowsのGUIアプリケーション
    • デザイナで配置ができる
  • ゲーム
    • Unity
using System;
using System.Linq;

namespace FizzBuzz
{
    class Program
    {
        static void Main(string[] args)
        {
            Enumerable.Range(1, 100)
                .Select(a => String.Format("{0}{1}", a % 3 == 0 ? "Fizz" : string.Empty, a % 5 == 0 ? "Buzz" : string.Empty))
                .Select((b, i) => String.IsNullOrEmpty(b) ? (i + 1).ToString() : b)
                .ToList()
                .ForEach(Console.WriteLine);
        }
    }
}

JavaScript

  • Webブラウザで動く唯一の言語
  • 最近Webブラウザを飛び出してきた
    • デスクトップアプリケーション(nwjs atomshell)
    • スマホアプリ(Titanium, React Native, ManifoldJS)
    • サーバー (node.js io.js)
    • IoT (モノのインターネット)
  • ユーザーライブラリが無数にある
  • Web系の仕事/作品やるなら必須
  • 部室に本はほぼ無いです。購入希望者がいたら部長に言ってください。
    • ネットで充分という説もある

AltJS

  • JavaScript sucks. (but) We need JavaScript.
    • 某純粋関数型言語の公式サイトより
  • JavaScriptに 不満 を抱く人が多い
    • でもブラウザはJSしか使えない…
  • JavaScript 変換するための言語/ソフトがある
  • JSにコンパイル出来る言語処理系 400以上
    • CoffeeScript, TypeScript, PureScript, Babel, JSX, Closure Compiler, Facebook Flow, Elm, emscripten
var i, output;
for (i = 1; i < 101; i++) {
   output = '';
   if (!(i % 3)) output += 'Fizz';
   if (!(i % 5)) output += 'Buzz';
   console.log(output || i);
}

Python

  • 学習コストが低い言語
    • プログラミング経験があれば短時間で書けるようになる
    • 初めてのプログラミング言語としてもいいかも
  • 研究で使われることもしばしば
    • numpy/scipyという科学計算用のライブラリが有る
      • MATLABの方が速い
  • ユーザーライブラリが多い
  • 確か部室にオライリーの本があったはず
for i in range(1, 101):
    if i % 15 == 0:
        print "FizzBuzz"
    elif i % 3 == 0:
        print "Fizz"
    elif i % 5 == 0:
        print "Buzz"
    else:
        print i

Ruby

  • Ruby on Rails というサーバー用ライブラリで一世を風靡した時代もあった
    • 今も一応案件があるので使われてるっぽいです
  • 自分は書き捨てスクリプトをよくRubyで書いています
    • 書き捨て→一回きり動かすために書く。ファイル一括操作とか
1.upto(100) do |n|
  print "Fizz" if a = (n % 3).zero?
  print "Buzz" if b = (n % 5).zero?
  print n unless (a || b)
  puts
end

PHP

  • Webアプリケーションを作るための言語
  • 超実用主義言語。メンテナンス性は…
    • 書く人による、という話もある
  • フレームワーク使えばちょっとはメンテナンス性上がります。
<?php
for ($i = 1; $i <= 100; $i++)
{
    if (!($i % 15))
        echo "FizzBuzz\n";
    else if (!($i % 3))
        echo "Fizz\n";
    else if (!($i % 5))
        echo "Buzz\n";
    else
        echo "$i\n";
}
?>

Objective-C / Swift

  • iOSアプリ, Macアプリを作る言語
  • Swiftは去年登場 (Obj-Cは1983...)
  • 今からならSwiftを勉強したほうがいいと思います
/* Swift */
for i in 1...100 {
        switch (i % 3, i % 5) {
            case (0, 0):
                println("FizzBuzz")
            case (0, _):
                println("Fizz")
            case (_, 0):
                println("Buzz")
            default:
                println(i)
        }
}

こっからは初心者向けではないです

  • 今までも初心者向けじゃないかもしれませんが…

Haskell

  • 純粋静的型付関数型言語
  • とりあえず怖い人が使っているというイメージが有る言語
  • だが、関数型言語の中ではトップレベルにコミュニティがデカい
  • 「モナドは実際スゴイ」「ナンデ!?副作用ナンデ?!」「圏論な」 などのマサカリめいた脅し文句がTwitterで跋扈している◆備えよう◆
  • 圏論をやる必要はないです!
fizzbuzz :: Int -> String
fizzbuzz n = fromMaybe (show n) $
    (guard (n `mod` 3 == 0) >> pure "Fizz") <>
    (guard (n `mod` 5 == 0) >> pure "Buzz")

main :: IO ()
main = forM_ [1..100] $ putStrLn . fizzbuzz

https://gist.github.com/tanakh/8006086

OCaml

  • 非純粋静的型付関数型言語
  • 実は処理速度がC/C++に迫る勢いである
  • コンパイラを作るのにオススメ?
  • 日本語の本として五十嵐 淳先生の「プログラミング in OCaml」があります
  • 親戚に F# (Microsoft) という言語が居ます
  • 次Ocaml言うたらキレるで
let (=>) cond f a = if cond then f a else a
let append s a = a^s

let fizzbuzz i =
  "" |> (i mod 3 = 0 => append "Fizz")
     |> (i mod 5 = 0 => append "Buzz")
     |> (function "" -> string_of_int i
                | s  -> s)

Lisp / Scheme

  • 非純粋動的型付関数型言語
  • カッコがたくさん出てくる言語です
(define (fizzbuzz x y)
 (println
  (cond (( = (modulo x 15) 0 ) "FizzBuzz")
   (( = (modulo x 3) 0 ) "Fizz")
   (( = (modulo x 5) 0 ) "Buzz")
   (else x)))
 (if (< x y) (fizzbuzz (+ x 1) y)))

(fizzbuzz 1 100)
  • 昔はLISPは人工知能向けの言語と言われた
    • 現在では流石にこれ使って研究してる人はいないと思う……

Lisp / Clojure

  • LISP言語
  • Java VMの上で動きます
  • core.* ライブラリは楽しい物が多いです
    • core.logic, core.typed
  • ClojureScript という AltJS もあります
    • om というサーバーライブラリが有名
  • 4clojure でコードを書きながら勉強が出来ます
 (defn fizzbuzz [start finish]
  (map (fn [n]
        (cond
         (zero? (mod n 15)) "FizzBuzz"
         (zero? (mod n 3)) "Fizz"
         (zero? (mod n 5)) "Buzz"
         :else n))
   (range start finish)))
 (fizzbuzz 1 100)

Scala

  • Javaの実行環境で動く言語
  • 関数型プログラミング(とオブジェクト指向プログラミング)が出来る
  • 最近本が何冊か出版された(初心者向けではない)
  • Play Framework というサーバーライブラリが有名
  • 「これから来る言語」と数年前から言われている

one-liner

for (i <- 1 to 100) println(Seq(15 -> "FizzBuzz", 3 -> "Fizz", 5 -> "Buzz").find(i % _._1 == 0).map(_._2).getOrElse(i))

Go

  • Google謹製言語
  • 軽量 / 高速 / 安全
  • Python/RubyなどのLL系言語っぽさがあるが、C言語っぽさもある。
  • 最近じわじわと話を聞くようになってきた
    • サーバーサイド周りをGoで書き直す話とか
package main

import "fmt"

func main() {
    for i := 1; i <= 100; i++ {
        switch {
        case i%15==0:
            fmt.Println("FizzBuzz")
        case i%3==0:
            fmt.Println("Fizz")
        case i%5==0:
            fmt.Println("Buzz")
        default:
            fmt.Println(i)
        }
    }
}

D

  • C++の光景として開発された言語
  • コンパイル時処理周り(型推論含め)が強い
  • 速度も良いしコンパイルも速い (C++とかScalaではコンパイルが遅いのが問題)
  • コミュニティが小さく情報が少ないのが問題、あとユーザーライブラリも少ない。
import std.stdio;

void main() {
    foreach (immutable i; 1 .. n + 1) {
        if (!(i % 15))
            "FizzBuzz".writeln;
        else if (!(i % 3))
            "Fizz".writeln;
        else if (!(i % 5))
            "Buzz".writeln;
        else
            i.writeln;
    }
}

Lua

  • C/C++のスクリプティングで使われる
  • ゲームでのスクリプティングで最も使われている(らしい)
    • PHANTASY STAR ONLINE 2, ファイナルファンタジーXIV, アイドルマスター2 ....
    • 東方花映塚のAIをLuaで記述できる「花AI塚」というものをロ技研の先輩が作った
  • 動作速度が速い (LuaJIT)
for i = 1, 100 do
	if i % 15 == 0 then
		print("FizzBuzz")
	elseif i % 3 == 0 then
		print("Fizz")
	elseif i % 5 == 0 then
		print("Buzz")
	else
		print(i)
	end
end

Shell Script

  • UNIXのシェル(Windowsでいうコマンドプロンプトみたいなの)で動かすための言語
  • いろいろなコマンドを組み合わせて(主に文字列)処理を描きます
    • awk, grep, tr, cat, ...
  • シェルでエレガントにデータ処理することを「シェル芸」、またその人を「シェル芸人」と呼ぶ。
#!/bin/bash
for ((n=1; n<=100; n++))
do
  fb=''
  [ $(( n % 3 )) -eq 0 ] && fb="${fb}Fizz"
  [ $(( n % 5 )) -eq 0 ] && fb="${fb}Buzz"
  [ -n "${fb}" ] && echo "${fb}" || echo "$n"
done

Perl

  • 古典言語 (Ruby や Python比)
    • 古典言語さながらに魔術を扱えます
    • 古典ラテン語で記述できるライブラリが有る → Lingua::Romana:Perligata
  • 2000年代前半の掲示板とかチャットとかはこれで実装されてました
    • とほほのCGIとか
  • Perl 6 は別物です
use strict;
use warnings;
use feature qw(say);

for my $i (1..100) {
    say $i % 15 == 0 ? "FizzBuzz"
        : $i %  3 == 0 ? "Fizz"
        : $i %  5 == 0 ? "Buzz"
        : $i;
}

R

  • 統計向け言語
  • 統計やテキストマイニングに非常に特化しており、その周りのライブラリが豊富
  • プログラミング言語として他の言語と比較して見ると割りとアレ
xx <- x <- 1:100
xx[x %% 3 == 0] <- "Fizz"
xx[x %% 5 == 0] <- "Buzz"
xx[x %% 15 == 0] <- "FizzBuzz"
xx

Julia

  • 数値計算に特化した言語
    • MATLAB や Numpy/Scipy と方向性が似ている
    • 構文は割りととっつきやすい
    • グラフプロットする機能が便利
  • 高速
    • ベンチマークが公式サイトにあります
    • FortranやJavaに迫る勢い
  • 新しい言語なので情報が少ない
for i = 1:100
    msg = "Fizz" ^ (i%3==0) * "Buzz" ^ (i%5==0)
    println(msg=="" ? i : msg)
end

Erlang

  • 電話会社が作った言語
  • スケーラビリティを重視
  • 関数型っぽい作りになっている
  • 「並行/並列/分散」に興味あるなら触ってみるといいかもしれない
    • でもTSUBAMEには向いてません。多分。
  • 派生で文法をRubyっぽくした Elixir という言語も有る。
fizzbuzz() ->
    F = fun(N) when N rem 15 == 0 -> "FizzBuzz";
           (N) when N rem 3 == 0  -> "Fizz";
           (N) when N rem 5 == 0  -> "Buzz";
           (N) -> integer_to_list(N)
        end,
    [F(N)++"\n" || N <- lists:seq(1,100)].

(ただ、このコードにErlangの醍醐味であるマルチスレッドはない)

アセンブリ

  • 機械語を人間が読めるようにしたもの
  • つまり、CPUへの命令文を直接書く
    • 普通のプログラミング言語はコンパイラを通して機械語に変換されます
    • すなわち、普通は人間は書かない
  • 何があっても高速化したい人、直接CPUの機能を使いたい人、情報工学科の人はこれに向き合わなければなりません
    • 情報工学科は3種類のアセンブリを使う…
	.section	__TEXT,__text,regular,pure_instructions
	.macosx_version_min 10, 10
	.globl	_main
	.align	4, 0x90
_main:                                  ## @main
## BB#0:
	pushl	%ebp
	movl	%esp, %ebp
	pushl	%ebx
	pushl	%edi
	pushl	%esi
	subl	$28, %esp
	calll	L0$pb
L0$pb:
	popl	%eax
	movl	$1, %esi
	movl	$-2004318071, %edi      ## imm = 0xFFFFFFFF88888889
	leal	L_.str-L0$pb(%eax), %ecx
	movl	%ecx, -16(%ebp)         ## 4-byte Spill
	movl	$1431655766, %ebx       ## imm = 0x55555556
	leal	L_.str1-L0$pb(%eax), %ecx
	movl	%ecx, -24(%ebp)         ## 4-byte Spill
	leal	L_.str2-L0$pb(%eax), %ecx
	movl	%ecx, -28(%ebp)         ## 4-byte Spill
	leal	L_.str3-L0$pb(%eax), %eax
	movl	%eax, -20(%ebp)         ## 4-byte Spill
	.align	4, 0x90
LBB0_1:                                 ## =>This Inner Loop Header: Depth=1
	movl	%esi, %eax
	imull	%edi
	addl	%esi, %edx
	movl	%edx, %eax
	shrl	$31, %eax
	sarl	$3, %edx
	addl	%eax, %edx
	imull	$15, %edx, %eax
	cmpl	%eax, %esi
	je	LBB0_2
## BB#3:                                ##   in Loop: Header=BB0_1 Depth=1
	movl	%esi, %eax
	imull	%ebx
	movl	%edx, %eax
	shrl	$31, %eax
	addl	%edx, %eax
	leal	(%eax,%eax,2), %eax
	cmpl	%eax, %esi
	je	LBB0_4
## BB#5:                                ##   in Loop: Header=BB0_1 Depth=1
	movl	%esi, %eax
	movl	$1717986919, %ecx       ## imm = 0x66666667
	imull	%ecx
	movl	%edx, %eax
	shrl	$31, %eax
	sarl	%edx
	addl	%eax, %edx
	leal	(%edx,%edx,4), %eax
	cmpl	%eax, %esi
	je	LBB0_6
## BB#7:                                ##   in Loop: Header=BB0_1 Depth=1
	movl	%esi, 4(%esp)
	movl	-20(%ebp), %eax         ## 4-byte Reload
	jmp	LBB0_8
	.align	4, 0x90
LBB0_2:                                 ##   in Loop: Header=BB0_1 Depth=1
	movl	-16(%ebp), %eax         ## 4-byte Reload
	jmp	LBB0_8
	.align	4, 0x90
LBB0_4:                                 ##   in Loop: Header=BB0_1 Depth=1
	movl	-24(%ebp), %eax         ## 4-byte Reload
	jmp	LBB0_8
LBB0_6:                                 ##   in Loop: Header=BB0_1 Depth=1
	movl	-28(%ebp), %eax         ## 4-byte Reload
	.align	4, 0x90
LBB0_8:                                 ##   in Loop: Header=BB0_1 Depth=1
	movl	%eax, (%esp)
	calll	_printf
	movl	$10, (%esp)
	calll	_putchar
	incl	%esi
	cmpl	$101, %esi
	jne	LBB0_1
	xorl	%eax, %eax
	addl	$28, %esp
	popl	%esi
	popl	%edi
	popl	%ebx
	popl	%ebp
	retl
	.section	__TEXT,__cstring,cstring_literals
L_.str:                                 ## @.str
	.asciz	"FizzBuzz"
L_.str1:                                ## @.str1
	.asciz	"Fizz"
L_.str2:                                ## @.str2
	.asciz	"Buzz"
L_.str3:                                ## @.str3
	.asciz	"%d"
.subsections_via_symbols

Rust

  • 朝令暮改言語
    • 破壊的変更がしょっちゅう起こる
  • 次世代の C++ になるかならないかといった感じ
    • いかんせん仕様変更が激しいので…
  • 言語オタク向け
fn main() {
    for i in 1..101 {
        let value = i.to_string();
        println!("{}", match (i % 3, i % 5) {
                         (0,0) => "FizzBuzz",
                         (0,_) => "Fizz",
                         (_,0) => "Buzz",
                          _ => value.as_ref(),
                       });
    }
}

Haxe

  • Alt(JavaScript|ActionScript|C++|C#|Java|PHP|Python)
    • 色々な言語に翻訳できる
    • NecoVMという機構でHaXeをそのまま実行することもできる
  • 言語としてはJavaっぽい(AS派生)
    • Generics、型推論、マクロなど高度な機能も
  • コンパイラがOCamlで実装されています
 
    static function main() {
        for(i in 1...100){
            var result = switch([i % 3, i % 5]){
                case [0, 0]: "FizzBuzz";
                case [0, _]: "Fizz";
                case [_, 0]: "Buzz";
                case _ : Std.string(i);
            }
            trace(result);
        }
    }
}

(RosettaCodeに無かったので自分で書きました……)

APL / J

  • 可読性を窓から投げ捨てて、極限まで簡潔に書けるようにした言語
  • J言語はAPLをキーボードで打てるようにしたもの
  • Project Euler という数学の問題をプログラムで解くサイトで見ます
    • 寧ろそれ以外で見たことがない
A[I]←1+I←(0⍷A)/⍳⍴A←('FIZZBUZZ' 'FIZZ’ 'BUZZ' 0)[2⊥¨×(⊂3 5)|¨1+⍳100]
// APL言語
;:inv}.(":&.> [^:(0 = #@])&.> [: ,&.>/ (;:'Fizz Buzz') #&.>~ 0 = 3 5 |/ ])i.101
// J言語

Brainf**k

  • 命令が8つしか無い非実用言語
+++++++++[>++++++++>+++++++++++>+++++<<<-]>.>++.+++++++..+++.>-.
    .<++++++++.  --.+++.  .  --.>+.
  • 自分はこれでC言語のポインタを理解しました
  • 8つの命令を適当な文字列に置き換えて「プログラミング言語作ったったwwwww」というのが昔流行りました
    • 今やってもそっぽ向かれるのでおすすめしません
+++++++++[>++++++++++[>+>+<<-]<-]>>>>++++++++++++++++++++++++++++++++++++++++++++++++[>+>+>+<<<-]<<<<>>[->->>>>+>>>>+><<<<<<<<++++++++++>>>>>>>>++++++++++<[-<<<<<<<->>>>>>>>-<]++++++++++<<<<<<<[->>>>>>>-<<<<<<<]>>>>[-]+>>>>[<<<<->>>>[-]]<<<<<<<<>>>>[<<<<>>>   ->>>>   -<+<<<<+<<++++++++++>>>>>>>>++++++++++<<[-<<<<<<->>>>>>>>-<<]++++++++++<<<<<<[->>>>>>-<<<<<<]>>>>[-]+>>>>[<<<<->>>>[-]]<<<<<<<<>>>>[<<<<>>   ->>>>   -<+<<<<+<>>>>[-]]<<<<>>>>[-]]<<<<>>>>>>>>>>>[-]+<<<[-]+++>>>>[-]+<<<<>+[-<->]+++<[->->>>[-]<<<<]>>>>[<[-]>[-]++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.+++++++++++++++++++++++++++++++++++.+++++++++++++++++..[-]<<< >>>]<<<<[-]+++++>>>>[-]+<<<<>>+[-<<->>]+++++<<[->>->>[-]<<<<]>>>>[<[-]>[-]++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.+++++++++++++++++++++++++++++++++++++++++++++++++++.+++++..[-]<< -->>]<<<<>>>[<<<<<<<<<<<>.>.>.<<<>>>>>>>>>>>[-]]<<<<<<<<<<<<<<<[-]+++++++++++++. .[-]>>]<<

COBOL

  • 56年前に事務処理用に開発された言語
    • C言語の13年前です
    • BASICよりも古い
  • CやPerlがラテン語ならCOBOLはヒエログリフみたいなもんです
  • ただしピラミッド・パワーによるものなのか金融系/勘定系のシステムで未だ使われているらしい…
    • やめてくれ
 IDENTIFICATION        DIVISION.
 PROGRAM-ID.           fizzbuzz.
 DATA                  DIVISION.
 WORKING-STORAGE       SECTION.
 01 CNT      PIC 9(03) VALUE 1.
 01 REM      PIC 9(03) VALUE 0.
 01 QUOTIENT PIC 9(03) VALUE 0.
 PROCEDURE             DIVISION.
 PERFORM UNTIL CNT > 100
   DIVIDE 15 INTO CNT GIVING QUOTIENT REMAINDER REM
   IF REM = 0
     THEN
       DISPLAY "FizzBuzz " WITH NO ADVANCING
     ELSE
       DIVIDE 3 INTO CNT GIVING QUOTIENT REMAINDER REM
       IF REM = 0
         THEN
           DISPLAY "Fizz " WITH NO ADVANCING
         ELSE
           DIVIDE 5 INTO CNT GIVING QUOTIENT REMAINDER REM
           IF REM = 0
             THEN
               DISPLAY "Buzz " WITH NO ADVANCING
             ELSE
               DISPLAY CNT " " WITH NO ADVANCING
           END-IF
       END-IF
   END-IF
   ADD 1 TO CNT
 END-PERFORM
 DISPLAY ""
 STOP RUN.

FORTRAN

  • 科学計算のための言語
  • COBOLよりも古く、1957年に登場
    • 最も古いプログラミング言語?
  • 物理学科や化学科では現役っぽいです
program fizzbuzz_if
   integer :: i

   do i = 1, 100
      if     (mod(i,15) == 0) then; print *, 'FizzBuzz'
      else if (mod(i,3) == 0) then; print *, 'Fizz'
      else if (mod(i,5) == 0) then; print *, 'Buzz'
      else;                         print *, i
      end if
   end do
end program fizzbuzz_if
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment