2013年2月27日水曜日

開発環境

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

その他参考書籍

3.

コード(BBEdit)

sample.pl

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

sub total {
    my $result = 0;
    for (@_) {
        $result += $_;
    }
    $result;
}

sub average {
    return unless @_;
    total(@_) / @_;
}

sub above_average {
    my $a = average @_;
    grep {$_ > $a} @_;
}

my @fred = above_average(1..10);
print "\@fred is @fred\n";
print "(Should be 6 7 8 9 10)\n";
my @barney = above_average(100, 1..10);
print "\@barney is @barney\n";
print "(Should be just 100)\n";

入出力結果(Terminal)

$ ./sample.pl
@fred is 6 7 8 9 10
(Should be 6 7 8 9 10)
@barney is 100
(Should be just 100)
$

ちなみにJavaScriptの場合。

コード(BBEdit)

var nums1 = [],
    nums2 = [],
    total = function( nums ) {
        var result = 0,
            i, max;
        for (i = 0, max = nums.length; i < max; i += 1) {
            result += nums[i];
        }
        return result;
    },
    average = function( nums ) {
        return total(nums) / nums.length;
    },
    above_average = function( nums ) {
        var a = average(nums),
            result = [];
        for (i = 0, max = nums.length; i < max; i += 1) {
            if (nums[i] > a) {
                result.push(nums[i]);
            }
        }
        return result;
    },
    result = "",
    i, max;
for (i = 0, max = 10; i < max; i += 1) {
    nums1[i] = i + 1;
}
nums2[0] = 100;
for (i = 0, max = 10; i < max; i += 1) {
    nums2.push(i + 1);
}
result = above_average(nums1) + "\n" + above_average(nums2);
$('#pre0').text(result);



pythonの場合。

コード(BBEdit)

sample.py

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

def total(nums):
    result = 0
    for x in nums:
        result += x
    return result

def average(nums):
    return total(nums) / len(nums)

def above_average(nums):
    result = []
    a = average(nums)
    for x in nums:
        if x > a:
            result.append(x)
    return result

nums1 = [x for x in range(1,11)]
nums2 = [100] + [x for x in range(1, 10)]
for x in [nums1, nums2]:
    print(above_average(x))

入出力結果(Terminal)

$ ./sample.py
[6, 7, 8, 9, 10]
[100]
$

0 コメント:

コメントを投稿