2013年3月1日金曜日

開発環境

『初めてのPerl 第6版』(Randal L. Schwartz, Tom Phoenix, brian d foy 共著、近藤 嘉雪 訳、オライリー・ジャパン、2012年、ISBN978-4-87311-567-2)の4章(サブルーチン)、4.12(練習問題)5を解いてみる。

その他参考書籍

5.

コード(BBEdit)

sample.pl

#!/usr/bin/env perl
use strict;
use warnings;
use utf8;
use 5.016;
binmode STDOUT, ':utf8';
binmode STDIN, ':utf8';

sub greet {
    my $name = shift;
    state @last;
    if (@last) {
        print "Hi ${name}! I've seen: @last\n";
    } else {
        print "Hi ${name}! You are the first one here!\n";
    }
    push @last, $name;
}

greet( "Fred" );
greet( "Barney" );
greet( "Wilma");
greet( "Betty" );

入出力結果(Terminal)

$ ./sample.pl
Hi Fred! You are the first one here!
Hi Barney! I've seen: Fred
Hi Wilma! I've seen: Fred Barney
Hi Betty! I've seen: Fred Barney Wilma
$

ちなみにJavaScriptの場合。

コード(BBEdit)

$('#pre0').text("");
// JavaScriptで同様の事を実現する場合はクロージャーっていうのを使えばいいのかな。。
// (Perlではクロージャ使ってないけど)
var greet = (function () {
    var last = [];
    return function(name) {
        if (last.length) {
            $('#pre0').append("Hi " + name + "! I've seen: " + last.join(" ") + "\n");
        } else {
            $('#pre0').append("Hi " + name + "! You are the first one here!\n");
        }
        last.push( name );
    };
})(),
    names = ["Fred", "Barney", "Wilma", "Betty"],
    i, max;
for (i = 0, max = names.length; i < max; i += 1) {
    greet(names[i]);
}



pythonの場合。

コード(BBEdit)

sample.py

#!/usr/bin/env python3.3
#-*- coding: utf-8 -*-

class C:
    last = []
    def greet(self, name):
        if C.last:
            print("Hi {0}! I've seen: {1}".format(name, " ".join(C.last)))
        else:
            print("Hi {0}! You are the first one here!".format(name))
        C.last.append( name )

c = C()
for name in ["Fred", "Barney", "Wilma", "Betty"]:
    c.greet( name )

入出力結果(Terminal)

$ ./sample.py
Hi Fred! You are the first one here!
Hi Barney! I've seen: Fred
Hi Wilma! I've seen: Fred Barney
Hi Betty! I've seen: Fred Barney Wilma
$

0 コメント:

コメントを投稿