素敵!

らばQ:「え?なに?なんなの?」この世で最も役に立たないマシンが完成していた(動画)
「最も」とか「一番」と言った最上級の表現は、安易に使うべきではないかもしれません。
ですが、さすがにこれ以上無意味なものも無いのでは、と思ってしまう機械がありました。

これをソフトウェアでやるとどうなるか。

Javascript (@spidermonkey)

簡単に出来た。が、arguments.calleeへの代入はやはり駄目。

#!/usr/bin/js
pointless = function(){
    print("turning off myself");
    // arguments.callee = undefined;
    pointless = undefined;
};

pointless();
pointless();

Scheme (@gauche)

こちらも素直。

#!/usr/bin/gosh
(define (pointless)
  (print "Turning off myself = " pointless)
  (set! pointless #f))

(pointless)
(pointless)

Perl

意外なことに、これが動かない。

#!/usr/bin/perl
use strict;
use warnings;

sub pointless{
    printf "Turning off myself = 0x%X\n", \&pointless;
    *pointless = undef; # undef &pointless;
};

pointless;
pointless;

そしてこれはもっと以外なエラーになる。

#!/usr/bin/perl
use strict;
use warnings;

sub pointless{
    printf "Turning off myself = 0x%X\n", \&pointless;
    undef &pointless;
};

pointless;
pointless;

しかし、以下は期待通り。

#!/usr/bin/perl
use strict;
use warnings;

my $pointless;
$pointless = sub {
    printf "Turning off myself = 0x%X\n", $pointless;
    undef $pointless;
};

$pointless->();
$pointless->();

Ruby

他と同様。だけどdefでやるにはどうしたらよいのだろう....

#!/usr/bin/ruby
pointless = Proc.new do
  p "Turning off myself = #{pointless}"
  pointless = nil
end

pointless.call
pointless.call

あと、Pythonだとなんだかうまく行かない。解答募集中。

C

クロージャーがサポートされている言語でこれが出来るのはそれほど驚かない。が、Cでも出来てしまう。久しぶりにCodePadのお世話に。

ただし、これでは駄目。

#include <stdlib.h>
#include <stdio.h>

void pointless(){
    fprintf(stderr, "turing off myself = 0x%X\n", (int)pointless);
    pointless = NULL;
}

int main (){
    pointless();
    pointless();
    return 0;
}
Run @codepad

こう書き換えればおk。

void pointless(){
    fprintf(stderr, "turing off myself = 0x%X\n", (int)pointless);
    /* pointless = NULL */
    void **point = (void **)pointless;
    *point = NULL;
}
Run @codepad

こうして意味のない関数をいろいろ書いたら、意味のないものづくりにも意義が感じられてしまった。他の解答も募集中。

Dan the Pointless Programmer