home > さまざまな言語で数値計算 > 関数型プログラミングの基本 >

さまざまな言語で数値計算

Only Do What Only You Can Do

100未満の3の倍数の和 (reduce)

VBScript

JScript

range 機能を自作

Array.prototype.range = function(start, end)
{
    var array = new Array();
    var j = 0;
    for (var i = start; i <= end; i++)
    {
        array[j++] = i;
    }
    return array;
}

filter 機能を自作

Array.prototype.filter = function(func)
{
    var array = new Array();
    var j = 0;
    for (var i = 0; i < this.length; i++)
    {
        if (func(this[i])) array[j++] = this[i];
    }
    return array;
}

sum 機能を自作

Array.prototype.sum = function()
{
    var res = 0
    for (var i = 0; i < this.length; i++)
    {
        res += this[i];
    }
    return res;
}

100未満の3の倍数の和

var sum =   new Array().
                range(1, 99).
                filter(function (n) { return (n % 3 == 0); }).
                sum();
WScript.Echo(sum);
Z:\>cscript //nologo Js0203.js
1683

PowerShell

対話型実行環境を起動

Z:\>powershell
Windows PowerShell
Copyright (C) 2009 Microsoft Corporation. All rights reserved.

100未満の3の倍数の和

$sum = 0
1..99 | where {$_ % 3 -eq 0} | foreach {$sum += $_}
$sum
PS Z:\> $sum = 0
PS Z:\> 1..99 | where {$_ % 3 -eq 0} | foreach {$sum += $_}
PS Z:\> $sum
1683

終了

PS Z:\> exit

Perl

対話型実行環境を起動

Z:\>perl -de 0

Loading DB routines from perl5db.pl version 1.37
Editor support available.

Enter h or 'h h' for help, or 'perldoc perldebug' for more help.

main::(-e:1):   0

100未満の3の倍数の和

use List::Util;
print List::Util::reduce {$a + $b} grep {$_ % 3 == 0} 1..99
  DB<1> use List::Util;

  DB<2> print List::Util::reduce {$a + $b} grep {$_ % 3 == 0} 1..99
1683
print List::Util::sum grep {$_ % 3 == 0} 1..99
  DB<3> print List::Util::sum grep {$_ % 3 == 0} 1..99
1683

終了

  DB<4> q

PHP

対話型実行環境を起動

Z:\>php -a
Interactive mode enabled

100未満の3の倍数の和

<?php
$ary = array_filter(range(1,9), function ($n) {return ($n % 3 == 0);});
echo array_reduce($ary, function($x, $y) {return $x + $y;}, 0);
?>
<?php
$ary = array_filter(range(1,9), function ($n) {return ($n % 3 == 0);});
echo array_reduce($ary, function($x, $y) {return $x + $y;}, 0);
?>

終了

^Z
1683

Python

対話型実行環境を起動

Z:\>python
Python 2.7.5 (default, May 15 2013, 22:43:36) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.

100未満の3の倍数の和

ary = [n for n in range(1, 100) if (n % 3 == 0)]
reduce(lambda x, y: x + y, ary, 0)
>>> ary = [n for n in range(1, 100) if (n % 3 == 0)]
>>> reduce(lambda x, y: x + y, ary, 0)
1683
sum([n for n in range(1, 100) if (n % 3 == 0)])
>>> sum([n for n in range(1, 100) if (n % 3 == 0)])
1683

終了

>>> quit()

Ruby

対話型実行環境を起動

Z:\>irb

100未満の3の倍数の和

(1..99).select { |n| n % 3 == 0}.inject(:+)
irb(main):001:0> (1..99).select { |n| n % 3 == 0}.inject(:+)
=> 1683
(1..99).select { |n| n % 3 == 0}.inject("+")
irb(main):002:0> (1..99).select { |n| n % 3 == 0}.inject("+")
=> 1683

終了

irb(main):003:0> exit

Groovy

Pascal

Ada

VB.NET

C#

using System.Linq;

public class CS0203
{
    public static void Main()
    {
        int sum = Enumerable.Range(1, 99).Where(num => (num % 3 == 0)).Sum();
        System.Console.WriteLine(sum);

        sum = Enumerable.Range(1, 99).Where(num => (num % 3 == 0)).Aggregate((x, n) => x + n);
        System.Console.WriteLine(sum);
    }
}
Z:\>csc CS0203.cs -nologo

Z:\>CS0203
1683
1683

Java

C++

Objective-C

D

Go

Scala

対話型実行環境を起動

Z:\>scala
Welcome to Scala version 2.10.2 (Java HotSpot(TM) Client VM, Java 1.7.0_21).
Type in expressions to have them evaluated.
Type :help for more information.

100未満の3の倍数の和

(1 to 99).filter(n => n % 3 == 0).reduce((x, n) => x + n)
scala> (1 to 99).filter(n => n % 3 == 0).reduce((x, n) => x + n)
res0: Int = 1683

(1 to 99).filter(n => n % 3 == 0).sum
scala> (1 to 99).filter(n => n % 3 == 0).sum
res1: Int = 1683

終了

scala> :quit

F#

対話型実行環境を起動

Z:\>fsi
Microsoft (R) F# 2.0 Interactive build 4.0.40219.1
Copyright (c) Microsoft Corporation. All Rights Reserved.

For help type #help;;

100未満の3の倍数の和

[1..99]
|> List.filter (fun x -> x % 3 = 0)
|> List.reduce(+)
> [1..99]
- |> List.filter (fun x -> x % 3 = 0)
- |> List.reduce(+)
- ;;
val it : int = 1683
[1..99]
|> List.filter (fun x -> x % 3 = 0)
|> List.sum
> [1..99]
- |> List.filter (fun x -> x % 3 = 0)
- |> List.sum
- ;;
val it : int = 1683

終了

> #quit;;

Clojure

対話型実行環境を起動

Z:\>java -cp C:\ProgramFiles\clojure-1.5.1\clojure-1.5.1.jar clojure.main
Clojure 1.5.1

100未満の3の倍数の和

(apply +
    (filter #(= (mod  % 3) 0) 
    (range 1 100)))
user=> (apply +
    (filter #(= (mod  % 3) 0) 
    (range 1 100)))
1683
(reduce +
    (filter #(= (mod  % 3) 0)
    (range 1 100)))
user=> (reduce +
    (filter #(= (mod  % 3) 0)
    (range 1 100)))
1683

終了

user=> (. System exit 0)

Haskell

対話型実行環境を起動

Z:\>ghci
GHCi, version 7.6.3: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.

100未満の3の倍数の和

foldl (+) 0 $ filter (\x -> mod x 3 == 0) [1..99]
Prelude> foldl (+) 0 $ filter (\x -> mod x 3 == 0) [1..99]
1683
sum $ filter (\x -> mod x 3 == 0) [1..99]
Prelude> sum $ filter (\x -> mod x 3 == 0) [1..99]
1683

終了

Prelude> :quit
Leaving GHCi.
inserted by FC2 system