エンジニアのソフトウェア的愛情

または私は如何にして心配するのを止めてプログラムを・愛する・ようになったか

Io FizzBuzz

昨日のFizzBuzz のつづき。

再掲。

久しぶりに Io でコードを書いたら、すっかり作法を忘れてしまっていることに気がつきました。if 文の書き方、期待する動きになるように書けたはいいのだけれど、こんな書き方でよかったのか未だにこころもとない。

Number fizz := method(
  if(self % 3 == 0,
    result := "Fizz"
    result n := self
    result,
    self
  )
)

Number buzz := method(
  if(self % 5 == 0,
    result := "Buzz"
    result n := self
    result,
    self
  )
)

Sequence fizz := method(
  if(self n % 3 == 0,
    result := self .. "Fizz"
    result n := self n
    result,
    self
  )
)

Sequence buzz := method(
  if(self n % 5 == 0,
    result := self .. "Buzz"
    result n := self n
    result,
    self
  )
)

 1 fizz println
 2 fizz println
 3 fizz println
 5 fizz println
 9 fizz println
10 fizz println
12 fizz println
15 fizz println

"---" println

 1 buzz println
 2 buzz println
 3 buzz println
 5 buzz println
 9 buzz println
10 buzz println
12 buzz println
15 buzz println

"---" println

 1 fizz buzz println
 2 fizz buzz println
 3 fizz buzz println
 5 fizz buzz println
 9 fizz buzz println
10 fizz buzz println
12 fizz buzz println
15 fizz buzz println

"---" println

 1 buzz fizz println
 2 buzz fizz println
 3 buzz fizz println
 5 buzz fizz println
 9 buzz fizz println
10 buzz fizz println
12 buzz fizz println
15 buzz fizz println

実行。

$ io fizzbuzz.io 
1
2
Fizz
5
Fizz
10
Fizz
Fizz
---
1
2
3
Buzz
9
Buzz
12
Buzz
---
1
2
Fizz
Buzz
Fizz
Buzz
Fizz
FizzBuzz
---
1
2
Fizz
Buzz
Fizz
Buzz
Fizz
BuzzFizz

Ruby や Io でならば簡単に実現できるこの FizzBuzz。簡単に実現できるその特徴とは。

いつか読むはずっと読まない:へびつかい座

読んで真っ先に思い出した作品がこれでした。

あるいはグレッグ・イーガン

解説にも、 「アイデンティティを揺るがせ、人間の定義を変容させていく行為が日常化した〈八世界〉は、サイバーパンクグレッグ・イーガン作品などの先駆に位置づけられるだろう」 とあり、ギミックは多少時代が感じられるものの、その物語は1970年代に書かれたとは思えない強烈さがあります。