Help us understand the problem. What is going on with this article?

D言語くんの繁殖についての新説

More than 3 years have passed since last update.

新個体の出現

2015年に繁殖期のD言語くんが発見され、D言語くんが単為生殖で増殖するようすが明らかになった。

しかしこの繁殖方法は

  • 並列で増えることができない
  • 繁殖期のD言語くんが増えない

等の問題点を抱えており、同時にD言語くんの絶滅が危惧された。

だが、最近現地の住民の証言からD言語くんが別の繁殖方法を獲得したらしいことがわかった。その様子を撮影しようと試みたが、その姿をカメラに捉える前に12月になり、D言語くんはクリスマスの装飾に擬態して見えなくなってしまった。かわりに現地住民のスケッチを用いて紹介しよう。

2匹で行われる繁殖

D言語くんの繁殖の様子を描いた現地住民のスケッチ

現地住民から得られた情報により再現されるD言語くんの繁殖は以下のようなプロセスを経る。

  1. 2匹が密着する
  2. 餅のように伸びる
  3. 伸びた部分が膨らんでくる
  4. スライスされ、分離する

ここで注目したいのは、スケッチ上でのD言語くんの胴体に穴が開いていることである。これがD言語くんの通常個体ならば1匹しかいない繁殖期のD言語くんに頼ることなく繁殖することが可能ということで、特定の個体に依存する繁殖方法から脱したということだ。タスマニアデビルがデビル顔面腫瘍性疾患に適応したように、D言語くんが突然変異により進化しているということが考えられる。おせちのカマボコにお餅のエッセンスがmixinしたのだ。また、さらに証言を集めるととんでもない長さに伸びたD言語くんの目撃情報も得られた。

全然キモくないD言語くんの画像

超絶キモい可愛らしい。並列で増える能力を獲得したことによりD言語くんは今後ますます発展していくだろう。

それはともかく

D言語には並列処理を簡単に行う方法がある。

import std.stdio;
import std.math : log;
import std.range : iota;
import std.string : format;
import std.parallelism : TaskPool;

void main()
{
    auto pool = new TaskPool();
    foreach(index,c;pool.parallel(iota(10)))
    {
        writeln(format("%s: %s",index,log(index)));
    }
    pool.finish();
}
/*
出力:
0: -inf
3: 1.09861
5: 1.60944
8: 2.07944
9: 2.19722
6: 1.79176
4: 1.38629
1: 0
2: 0.693147
7: 1.94591
*/

数分原因がわからなくて困ったのでメモする。pool.finish()がないとプログラムが終了しない。

import std.stdio;
import std.math : log;
import std.range : iota;
import std.string : format;
import std.parallelism : parallel;

void main()
{
    foreach(index,c;iota(10).parallel())
    {
        writeln(format("%s: %s",index,log(index)));
    }
}

こんなふうにも書ける。こっちのほうがお手軽。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away