Sum of squares
You are encouraged to solve this task according to the task description, using any language you may know.
Write a program to find the sum of squares of a numeric vector. The program should work on a zero-length vector (with an answer of 0).
See also Mean.
[edit] ACL2
(defun sum-of-squares (xs)
(if (endp xs)
0
(+ (* (first xs) (first xs))
(sum-of-squares (rest xs)))))
[edit] ActionScript
function sumOfSquares(vector:Vector.<Number>):Number
{
var sum:Number = 0;
for(var i:uint = 0; i < vector.length; i++)
sum += vector[i]*vector[i];
return sum;
}
[edit] Ada
with Ada.Text_IO; use Ada.Text_IO;
procedure Test_Sum_Of_Squares is
type Float_Array is array (Integer range <>) of Float;
function Sum_Of_Squares (X : Float_Array) return Float is
Sum : Float := 0.0;
begin
for I in X'Range loop
Sum := Sum + X (I) ** 2;
end loop;
return Sum;
end Sum_Of_Squares;
begin
Put_Line (Float'Image (Sum_Of_Squares ((1..0 => 1.0)))); -- Empty array
Put_Line (Float'Image (Sum_Of_Squares ((3.0, 1.0, 4.0, 1.0, 5.0, 9.0))));
end Test_Sum_Of_Squares;
Sample output:
0.00000E+00 1.33000E+02
[edit] ALGOL 68
The computation can be written as a loop.
PROC sum of squares = ([]REAL argv)REAL:(
REAL sum := 0;
FOR i FROM LWB argv TO UPB argv DO
sum +:= argv[i]**2
OD;
sum
);
test:(
printf(($g(0)l$,sum of squares([]REAL(3, 1, 4, 1, 5, 9))));
)
Output:
133
Another implementation could define a procedure (proc) or operator (op) called map.
[]REAL data = (3, 1, 4, 1, 5, 9);
PROC map = ( PROC(REAL)REAL func, []REAL argv)REAL:
( REAL out:=0; FOR i FROM LWB argv TO UPB argv DO out:=func(argv[i]) OD; out);
test:(
REAL sum := 0;
printf(($xg(0)l$, map ( ((REAL argv)REAL: sum +:= argv ** 2), data) ));
PRIO MAP = 5; # the same priority as the operators <, =<, >=, & > maybe... #
OP MAP = ( PROC(REAL)REAL func, []REAL argv)REAL:
( REAL out:=0; FOR i FROM LWB argv TO UPB argv DO out:=func(argv[i]) OD; out);
sum := 0;
printf(($g(0)l$, ((REAL argv)REAL: sum +:= argv ** 2) MAP data ))
)
Output:
133 133
[edit] Alore
def sum_squares(a)
var sum = 0
for i in a
sum = sum + i**2
end
return sum
end
WriteLn(sum_squares([3,1,4,1,5,9]))
end
[edit] AutoHotkey
list = 3 1 4 1 5 9
Loop, Parse, list, %A_Space%
sum += A_LoopField**2
MsgBox,% sum
[edit] AWK
Vectors are read, space-separated, from stdin; sum of squares goes to stdout. The empty line produces 0.
$ awk '{s=0;for(i=1;i<=NF;i++)s+=$i*$i;print s}'
3 1 4 1 5 9
133
0
[edit] BASIC
Assume the numbers are in an array called a.
sum = 0
FOR I = LBOUND(a) TO UBOUND(a)
sum = sum + a(I) ^ 2
NEXT I
PRINT "The sum of squares is: " + sum
[edit] BBC BASIC
BBC BASIC cannot have a zero-length array.
DIM vector(5)
vector() = 1, 2, 3, 4, 5, 6
PRINT "Sum of squares = " ; MOD(vector()) ^ 2
Output:
Sum of squares = 91
[edit] Brat
p 1.to(10).reduce 0 { res, n | res = res + n ^ 2 } #Prints 385
[edit] C
#include <stdio.h>
double squaredsum(double *l, int e)
{
int i; double sum = 0.0;
for(i = 0 ; i < e ; i++) sum += l[i]*l[i];
return sum;
}
int main()
{
double list[6] = {3.0, 1.0, 4.0, 1.0, 5.0, 9.0};
printf("%lf\n", squaredsum(list, 6));
printf("%lf\n", squaredsum(list, 0));
/* the same without using a real list as if it were 0-element long */
printf("%lf\n", squaredsum(NULL, 0));
return 0;
}
[edit] C++
#include <iostream>Alternative version using :
#include <numeric>
#include <vector>
double add_square(double prev_sum, double new_val)
{
return prev_sum + new_val*new_val;
}
double vec_add_squares(std::vector<double>& v)
{
return std::accumulate(v.begin(), v.end(), 0.0, add_square);
}
int main()
{
// first, show that for empty vectors we indeed get 0
std::vector<double> v; // empty
std::cout << vec_add_squares(v) << std::endl;
// now, use some values
double data[] = { 0, 1, 3, 1.5, 42, 0.1, -4 };
v.assign(data, data+7);
std::cout << vec_add_squares(v) << std::endl;
return 0;
}
#include <numeric>
#include <vector>
#include "boost/lambda/lambda.hpp"
double vec_add_squares(std::vector<double>& v)
{
using namespace boost::lambda;
return std::accumulate(v.begin(), v.end(), 0.0, _1 + _2 * _2);
}
[edit] C#
using System;
using System.Collections.Generic;
using System.Linq;
class Program {
static int sumsq(ICollection<int> i) {
if (i == null || i.Count == 0) return 0;
return i.Select(x => x * x).Sum();
}
static void Main() {
int[] a = { 1, 2, 3, 4, 5 };
Console.WriteLine(sumsq(a)); // 55
}
}
[edit] Chef
Sum of squares.
First input is length of vector, then rest of input is vector.
Ingredients.
1 g eggs
0 g bacon
Method.
Put bacon into the 1st mixing bowl.
Take eggs from refrigerator.
Square the eggs.
Take bacon from refrigerator.
Put bacon into 2nd mixing bowl.
Combine bacon into 2nd mixing bowl.
Fold bacon into 2nd mixing bowl.
Add the bacon into the 1st mixing bowl.
Ask the eggs until squared.
Pour contents of the 1st mixing bowl into the 1st baking dish.
Serves 1.
[edit] Clojure
(defn sum-of-squares [v]
(reduce #(+ %1 (* %2 %2)) 0 v))
[edit] Common Lisp
(defun sum-of-squares (vector)
(loop for x across vector sum (expt x 2)))
[edit] D
[edit] Iterative Version
import std.stdio: writeln;
T sumSquares(T)(T[] a) {
T sum = 0;
foreach (e; a)
sum += e ^^ 2;
return sum;
}
void main() {
auto items = [3.1, 1.0, 4.0, 1.0, 5.0, 9.0];
writeln(sumSquares(items));
}
- Output:
133.61
[edit] Polymorphic Functional Style
import std.stdio, std.algorithm, std.traits, std.range;
auto sumSquares(Range)(Range data) {
return reduce!q{a + b ^^ 2}(cast(ForeachType!Range)0, data);
}
void main() {
auto items = [3.1, 1.0, 4.0, 1.0, 5.0, 9.0];
writeln(sumSquares(items));
writeln(sumSquares(iota(10)));
}
- Output:
133.61 285
[edit] Dart
sumOfSquares(list) {
var sum=0;
list.forEach((var n) { sum+=(n*n); });
return sum;
}
main() {
print(sumOfSquares([]));
print(sumOfSquares([1,2,3]));
print(sumOfSquares([10]));
}
[edit] Delphi
Delphi has standard SumOfSquares function in Math unit:
program SumOfSq;
{$APPTYPE CONSOLE}
uses Math;
type
TDblArray = array of Double;
var
A: TDblArray;
begin
Writeln(SumOfSquares([]):6:2); // 0.00
Writeln(SumOfSquares([1, 2, 3, 4]):6:2); // 30.00
A:= nil;
Writeln(SumOfSquares(A):6:2); // 0.00
A:= TDblArray.Create(1, 2, 3, 4);
Writeln(SumOfSquares(A):6:2); // 30.00
Readln;
end.
[edit] E
def sumOfSquares(numbers) {
var sum := 0
for x in numbers {
sum += x**2
}
return sum
}
[edit] Erlang
lists:foldl(fun(X, Sum) -> X*X + Sum end, 0, [3,1,4,1,5,9]).
[edit] Euphoria
function SumOfSquares(sequence v)
atom sum
sum = 0
for i = 1 to length(v) do
sum += v[i]*v[i]
end for
return sum
end function
[edit] Factor
USE: math sequences ;
: sum-of-squares ( seq -- n ) [ sq ] map-sum ;
{ 1.0 2.0 4.0 8.0 16.0 } sum-of-squares
[edit] Fantom
class SumSquares
{
static Int sumSquares (Int[] numbers)
{
Int sum := 0
numbers.each |n| { sum += n * n }
return sum
}
public static Void main ()
{
Int[] n := [,]
echo ("Sum of squares of $n = ${sumSquares(n)}")
n = [1,2,3,4,5]
echo ("Sum of squares of $n = ${sumSquares(n)}")
}
}
[edit] Fish
v
\0&
>l?!v:*&+&
>&n;
[edit] Forth
: fsum**2 ( addr n -- f )
0e
dup 0= if 2drop exit then
floats bounds do
i f@ fdup f* f+
1 floats +loop ;
create test 3e f, 1e f, 4e f, 1e f, 5e f, 9e f,
test 6 fsum**2 f. \ 133.
[edit] Fortran
In ISO Fortran 90 orlater, use SUM intrinsic and implicit element-wise array arithmetic:
real, dimension(1000) :: a = (/ (i, i=1, 1000) /)
real, pointer, dimension(:) :: p => a(2:1) ! pointer to zero-length array
real :: result, zresult
result = sum(a*a) ! Multiply array by itself to get squares
result = sum(a**2) ! Use exponentiation operator to get squares
zresult = sum(p*p) ! P is zero-length; P*P is valid zero-length array expression; SUM(P*P) == 0.0 as expected
[edit] F#
[1 .. 10] |> List.fold (fun a x -> a + x * x) 0
[|1 .. 10|] |> Array.fold (fun a x -> a + x * x) 0
[edit] GAP
# Just multiplying a vector by itself yields the sum of squares (it's an inner product)
# It's necessary to check for the empty vector though
SumSq := function(v)
if Size(v) = 0 then
return 0;
else
return v*v;
fi;
end;
[edit] Go
package main
import "fmt"
func main() {
var sum float32
for _, x := range []float32{1,2,.5} {
sum += x*x
}
fmt.Println(sum)
}
[edit] Golfscript
{0\{.*+}%}:sqsum;
# usage example
[1 2 3]sqsum puts
[edit] Groovy
def array = 1..3
// square via multiplication
def sumSq = array.collect { it * it }.sum()
println sumSq
// square via exponentiation
sumSq = array.collect { it ** 2 }.sum()
println sumSq
Output:
14 14
[edit] Haskell
sumOfSquares = sum . map (^ 2)
> sumOfSquares [3,1,4,1,5,9]
133
[edit] IDL
print,total(array^2)
[edit] Icon and Unicon
procedure main()
local lst
lst := []
#Construct a simple list and pass it to getsum
every put(lst,seq()\2)
write(getsum(lst))
end
procedure getsum(lst)
local total
total := 0
every total +:= !lst ^ 2
return total
end
[edit] Inform 7
Sum Of Squares is a room.
To decide which number is the sum of (N - number) and (M - number) (this is summing):
decide on N + M.
To decide which number is (N - number) squared (this is squaring):
decide on N * N.
To decide which number is the sum of squares of (L - list of numbers):
decide on the summing reduction of squaring applied to L.
When play begins:
say the sum of squares of {};
say line break;
say the sum of squares of {1, 2, 3};
end the story.
[edit] Io
list(3,1,4,1,5,9) map(squared) sum
[edit] J
ss=: +/ @: *:
That is, sum composed with square. The verb also works on higher-ranked arrays. For example:
ss 3 1 4 1 5 9
133
ss $0 NB. $0 is a zero-length vector
0
x=: 20 4 ?@$ 0 NB. a 20-by-4 table of random (0,1) numbers
ss x
9.09516 5.19512 5.84173 6.6916
The computation can also be written as a loop. It is shown here for comparison only and is highly non-preferred compared to the version above.
ss1=: 3 : 0
z=. 0
for_i. i.#y do. z=. z+*:i{y end.
)
ss1 3 1 4 1 5 9
133
ss1 $0
0
ss1 x
9.09516 5.19512 5.84173 6.6916
[edit] Java
Assume the numbers are in a double array called "nums".
public class SumSquares
{
public static void main(final String[] args)
{
double sum = 0;
int[] nums = {1,2,3,4,5};
for (int i : sum)
sum += i * i;
System.out.println("The sum of the squares is: " + sum);
}
}
[edit] JavaScript
function sumsq(array) {
var sum = 0;
var i, iLen;
for (i = 0, iLen = array.length; i < iLen; i++) {
sum += array[i] * array[i];
}
return sum;
}
alert(sumsq([1,2,3,4,5])); // 55
An alternative using a while loop and Math.pow
function sumsq(array) {
var sum = 0,
i = array.length;
while (i--) sum += Math.pow(array[i], 2);
return sum;
}
alert(sumsq([1,2,3,4,5])); // 55
Functional.reduce("x+y*y", 0, [1,2,3,4,5])
map (JS 1.6) and reduce (JS 1.8)
[3,1,4,1,5,9].map(function (n) { return Math.pow(n,2); }).reduce(function (sum,n) { return sum+n; });
[edit] K
ss: {+/x*x}
ss 1 2 3 4 5
55
ss@!0
0
[edit] Liberty BASIC
' [RC] Sum of Squares
SourceList$ ="3 1 4 1 5 9"
'SourceList$ =""
' If saved as an array we'd have to have a flag for last data.
' LB has the very useful word$() to read from delimited strings.
' The default delimiter is a space character, " ".
SumOfSquares =0
n =0
data$ ="666" ' temporary dummy to enter the loop.
while data$ <>"" ' we loop until no data left.
data$ =word$( SourceList$, n +1) ' first data, as a string
NewVal =val( data$) ' convert string to number
SumOfSquares =SumOfSquares +NewVal^2 ' add to existing sum of squares
n =n +1 ' increment number of data items found
wend
n =n -1
print "Supplied data was "; SourceList$
print "This contained "; n; " numbers."
print "Sum of squares is "; SumOfSquares
end
[edit] Logo
print apply "sum map [? * ?] [1 2 3 4 5] ; 55
[edit] Logtalk
sum(List, Sum) :-
sum(List, 0, Sum).
sum([], Sum, Sum).
sum([X| Xs], Acc, Sum) :-
Acc2 is Acc + X,
sum(Xs, Acc2, Sum).
[edit] Lua
function squaresum(a, ...) return a and a^2 + squaresum(...) or 0 end
function squaresumt(t) return squaresum(unpack(t)) end
print(squaresumt{3, 5, 4, 1, 7})
[edit] Mathematica
As a function 1:
SumOfSquares[x_]:=Total[x^2]
SumOfSquares[{1,2,3,4,5}]
As a function 2:
SumOfSquares[x_]:=x.x
SumOfSquares[{1,2,3,4,5}]
Pure function 1: (postfix operator in the following examples)
{1,2,3,4,5} // Total[#^2] &
Pure function 2:
{1, 2, 3, 4, 5} // #^2 & // Total
Pure function 3:
{1, 2, 3, 4, 5} // #.#&
[edit] MATLAB
function [squaredSum] = sumofsquares(inputVector)
squaredSum = sum( inputVector.^2 );
[edit] Maxima
nums : [3,1,4,1,5,9];
sum(nums[i]^2,i,1,length(nums));
[edit] Mercury
:- module sum_of_squares.
:- interface.
:- import_module io.
:- pred main(io::di, io::uo) is det.
:- implementation.
:- import_module int, list.
main(!IO) :-
io.write_int(sum_of_squares([3, 1, 4, 1, 5, 9]), !IO),
io.nl(!IO).
:- func sum_of_squares(list(int)) = int.
sum_of_squares(Ns) = list.foldl((func(N, Acc) = Acc + N * N), Ns, 0).
[edit] Modula-3
MODULE SumSquares EXPORTS Main;
IMPORT IO, Fmt;
TYPE RealArray = ARRAY OF REAL;
PROCEDURE SumOfSquares(x: RealArray): REAL =
VAR sum := 0.0;
BEGIN
FOR i := FIRST(x) TO LAST(x) DO
sum := sum + x[i] * x[i];
END;
RETURN sum;
END SumOfSquares;
BEGIN
IO.Put(Fmt.Real(SumOfSquares(RealArray{3.0, 1.0, 4.0, 1.0, 5.0, 9.0})));
IO.Put("\n");
END SumSquares.
[edit] MOO
@verb #100:sum_squares this none this rd
@program #100:sum_squares
sum = 0;
list = args[1];
for i in (list)
sum = sum + (i^2);
endfor
player:tell(toliteral(list), " => ", sum);
.
Output:
;#100:sum_squares({3,1,4,1,5,9})
{3, 1, 4, 1, 5, 9} => 133
;#100:sum_squares({})
{} => 0
[edit] MUMPS
SUMSQUARE(X)
;X is assumed to be a list of numbers separated by "^"
NEW RESULT,I
SET RESULT=0,I=1
FOR QUIT:(I>$LENGTH(X,"^")) SET RESULT=($PIECE(X,"^",I)*$PIECE(X,"^",I))+RESULT,I=I+1
QUIT RESULT
[edit] Nemerle
SS(x : list[double]) : double
{
|[] => 0.0
|_ => x.Map(fun (x) {x*x}).FoldLeft(0.0, _+_)
}
[edit] NewLISP
(apply + (map (fn(x) (* x x)) '(3 1 4 1 5 9)))
-> 133
(apply + (map (fn(x) (* x x)) '()))
-> 0
[edit] Objeck
bundle Default {
class Sum {
function : native : SquaredSum(values : Float[]) ~ Float {
sum := 0.0;
for(i := 0 ; i < values->Size() ; i += 1;) {
sum += (values[i] * values[i]);
};
return sum;
}
function : Main(args : String[]) ~ Nil {
SquaredSum([3.0, 1.0, 4.0, 1.0, 5.0, 9.0])->PrintLine();
}
}
}
[edit] OCaml
List.fold_left (fun sum a -> sum + a * a) 0 ints
List.fold_left (fun sum a -> sum +. a *. a) 0. floats
[edit] Octave
a = [1:10];
sumsq = sum(a .^ 2);
[edit] Oz
declare
fun {SumOfSquares Xs}
for X in Xs sum:S do
{S X*X}
end
end
in
{Show {SumOfSquares [3 1 4 1 5 9]}}
[edit] PARI/GP
ss(v)={
sum(i=1,#v,v[i]^2)
};
[edit] Pascal
Example from the documenation of the run time library:
Program Example45;
{ Program to demonstrate the SumOfSquares function. }
Uses math;
Var
I : 1..100;
ExArray : Array[1..100] of Float;
begin
Randomize;
for I:=low(ExArray) to high(ExArray) do
ExArray[i]:=(Random-Random)*100;
Writeln('Max : ',MaxValue(ExArray):8:4);
Writeln('Min : ',MinValue(ExArray):8:4);
Writeln('Sum squares : ',SumOfSquares(ExArray):8:4);
Writeln('Sum squares (b) : ',SumOfSquares(@ExArray[1],100):8:4);
end.
[edit] Perl
sub sum_of_squares {
my $sum = 0;
$sum += $_**2 foreach @_;
return $sum;
}
print sum_of_squares(3, 1, 4, 1, 5, 9), "\n";
or
use List::Util qw(reduce);
sub sum_of_squares {
reduce { $a + $b **2 } 0, @_;
}
print sum_of_squares(3, 1, 4, 1, 5, 9), "\n";
[edit] Perl 6
say [+] map * ** 2, 3, 1, 4, 1, 5, 9;
If this expression seems puzzling, note that * ** 2 is equivalent to {$^x ** 2}— the leftmost asterisk is not the multiplication operator but the Whatever star, which specifies currying behavior.
Another convenient way to distribute the exponentiation is via the cross metaoperator, which
as a list infix is looser than comma in precedence but tighter than the reduction list operator:
say [+] 3,1,4,1,5,9 X** 2
[edit] PHP
function sum_squares(array $args) {
return array_reduce(
$args, create_function('$x, $y', 'return $x+$y*$y;'), 0
);
}
In PHP5.3 support for anonymous functions was reworked. While the above code would still work, it is suggested to use
function sum_squares(array $args) {
return array_reduce($args, function($x, $y) {
return $x+$y*$y;
}, 0);
}
Usage for both examples: sum_squares(array(1,2,3,4,5)); // 55
[edit] PicoLisp
: (sum '((N) (* N N)) (3 1 4 1 5 9))
-> 133
: (sum '((N) (* N N)) ())
-> 0
[edit] PL/I
declare A(10) float initial (10, 9, 8, 7, 6, 5, 4, 3, 2, 1);
put (sum(A**2));
[edit] Pop11
define sum_squares(v);
lvars s = 0, j;
for j from 1 to length(v) do
s + v(j)*v(j) -> s;
endfor;
s;
enddefine;
sum_squares({1 2 3 4 5}) =>
[edit] PostScript
/sqrsum{
/x exch def
/sum 0 def
/i 0 def
x length 0 eq
{}
{
x length{
/sum sum x i get 2 exp add def
/i i 1 add def
}repeat
}ifelse
sum ==
}def
[3 1 4 1 5 9] 0 {dup * +} fold
[edit] PowerShell
function Get-SquareSum ($a) {
if ($a.Length -eq 0) {
return 0
} else {
$x = $a `
| ForEach-Object { $_ * $_ } `
| Measure-Object -Sum
return $x.Sum
}
}
[edit] PureBasic
Procedure SumOfSquares(List base())
ForEach base()
Sum + base()*base()
Next
ProcedureReturn Sum
EndProcedure
[edit] Python
sum(x*x for x in [1, 2, 3, 4, 5])
[edit] Prolog
sum([],0). sum([H|T],S) :- sum(T, S1), S is S1 + (H * H).
[edit] R
arr <- c(1,2,3,4,5)
result <- sum(arr^2)
[edit] REXX
/*REXX program to sum the squares of a vector of 30 numbers. */
numeric digits 20 /*allow 20-digit numbers (default is 9)*/
v=-100 9 8 7 6 0 3 4 5 2 1 .5 10 /*define a vector with some numbers. */
sum=0 /*initialize SUM to zero. */
do k=1 while word(v,k)\=='' /*start with the first element (if any)*/
sum=sum + word(v,k)**2 /*add the squared element to the sum. */
end /*k*/
say 'The sum of' k-1 "elements for the V vector is:" sum
Output:
The sum of 13 elements for the V vector is: 10385.25
[edit] Ruby
[3,1,4,1,5,9].inject(0) { |sum,x| sum += x**2 }
or
[3,1,4,1,5,9].map { |x| x**2 }.reduce(:+)
[edit] Run BASIC
list$ = "1,2,3,4,5"
print sumOfSquares(list$)
FUNCTION sumOfSquares(sos$)
while word$(sos$,i+1,",") <> ""
i = i + 1
sumOfSquares = sumOfSquares + val(word$(sos$,i,","))^2
wend
END FUNCTION
[edit] Sather
class MAIN is
sqsum(s, e:FLT):FLT is
return s + e*e;
end;
sum_of_squares(v :ARRAY{FLT}):FLT is
return (#ARRAY{FLT}(|0.0|).append(v)).reduce(bind(sqsum(_,_)));
end;
main is
v :ARRAY{FLT} := |3.0, 1.0, 4.0, 1.0, 5.0, 9.0|;
#OUT + sum_of_squares(v) + "\n";
end;
end;
[edit] Scala
Unfortunately there is no common "Numeric" class that Int and Double both extend, since Scala's number representation maps closely to Java's. Those concerned about precision can define a similar procedure for integers.
def sum_of_squares(xs: Seq[Double]) = xs.foldLeft(0) {(a,x) => a + x*x}
[edit] Scheme
(define (sum-of-squares l)
(apply + (map * l l)))
> (sum-of-squares (list 3 1 4 1 5 9)) 133
[edit] Seed7
$ include "seed7_05.s7i";
include "float.s7i";
const array float: list1 is [] (3.0, 1.0, 4.0, 1.0, 5.0, 9.0);
const array float: list2 is 0 times 0.0;
const func float: squaredSum (in array float: floatList) is func
result
var float: sum is 0.0;
local
var float: number is 0.0;
begin
for number range floatList do
sum +:= number ** 2;
end for;
end func;
const proc: main is func
begin
writeln(squaredSum(list1));
writeln(squaredSum(list2));
end func;
[edit] Slate
{1. 2. 3} reduce: [|:x :y| y squared + x].
{} reduce: [|:x :y| y squared + x] ifEmpty: [0].
[edit] Smalltalk
#(3 1 4 1 5 9) inject: 0 into: [:sum :aNumber | sum + aNumber squared]
[edit] SNOBOL4
define('ssq(a)i') :(ssq_end)
ssq i = i + 1; ssq = ssq + (a<i> * a<i>) :s(sumsq)f(return)
ssq_end
* # Fill array, test and display
str = '1 2 3 5 7 11 13 17 19 23'; a = array(10)
loop i = i + 1; str len(p) span('0123456789') . a<i> @p :s(loop)
output = str ' -> ' sumsq(a)
end
Output:
1 2 3 5 7 11 13 17 19 23 -> 1557
[edit] Standard ML
foldl (fn (a, sum) => sum + a * a) 0 ints
foldl (fn (a, sum) => sum + a * a) 0.0 reals
[edit] SQL
SELECT SUM(x*x) FROM vector
Note that this assumes that the values in our vector are named x.
[edit] Tcl
proc sumOfSquares {nums} {
set sum 0
foreach num $nums {
set sum [expr {$sum + $num**2}]
}
return $sum
}
sumOfSquares {1 2 3 4 5} ;# ==> 55
sumOfSquares {} ;# ==> 0
package require struct::list
proc square x {expr {$x * $x}}
proc + {a b} {expr {$a + $b}}
proc sumOfSquares {nums} {
struct::list fold [struct::list map $nums square] 0 +
}
sumOfSquares {1 2 3 4 5} ;# ==> 55
sumOfSquares {} ;# ==> 0
Generic "sum of function"
package require Tcl 8.5
package require struct::list
namespace path ::tcl::mathop
proc sum_of {lambda nums} {
struct::list fold [struct::list map $nums [list apply $lambda]] 0 +
}
sum_of {x {* $x $x}} {1 2 3 4 5} ;# ==> 55
[edit] Trith
[3 1 4 1 5 9] 0 [dup * +] foldl
[edit] TUSCRIPT
$$ MODE TUSCRIPT
array="3'1'4'1'5'9",sum=0
LOOP a=array
sum=sum+(a*a)
ENDLOOP
PRINT sum
Output:
133
[edit] UnixPipes
folder() {
(read B; res=$( expr $1 \* $1 ) ; test -n "$B" && expr $res + $B || echo $res)
}
fold() {
(while read a ; do
fold | folder $a
done)
}
(echo 3; echo 1; echo 4;echo 1;echo 5; echo 9) | fold
[edit] Ursala
The ssq function defined below zips two copies of its argument together, maps the product function to all pairs, and then sums the result by way of the reduction operator, -:.
#import nat
ssq = sum:-0+ product*iip
#cast %n
main = ssq <21,12,77,0,94,23,96,93,72,72,79,24,8,50,9,93>
output:
62223
[edit] V
[sumsq [dup *] map 0 [+] fold].
[] sumsq
=0
[1 2 3] sumsq
=14
[edit] Visual Basic .NET
Private Shared Function sumsq(ByVal i As ICollection(Of Integer)) As Integer
If i Is Nothing OrElse i.Count = 0 Then
Return 0
End If
Return i.[Select](Function(x) x * x).Sum()
End Function
Private Shared Sub Main()
Dim a As Integer() = New Integer() {1, 2, 3, 4, 5}
' 55
Console.WriteLine(sumsq(a))
For K As Integer = 0 To 16
Console.WriteLine("SumOfSquares({0}) = {1}", K, SumOfSquares(K))
Next
End Sub
Function SumOfSquares(ByVal Max As Integer)
Dim Square As Integer = 0
Dim Add As Integer = 1
Dim Sum As Integer = 0
For J As Integer = 0 To Max - 1
Square += Add
Add += 2
Sum += Square
Next
Return Sum
End Function
Function SumOfSquaresByMult(ByVal Max As Integer)
Dim Sum As Integer = 0
For J As Integer = 1 To Max
Sum += J * J
Next
Return Sum
End Function
output:
55 SumOfSquares(0) = 0 SumOfSquares(1) = 1 SumOfSquares(2) = 5 SumOfSquares(3) = 14 SumOfSquares(4) = 30 SumOfSquares(5) = 55 SumOfSquares(6) = 91 SumOfSquares(7) = 140 SumOfSquares(8) = 204 SumOfSquares(9) = 285 SumOfSquares(10) = 385 SumOfSquares(11) = 506 SumOfSquares(12) = 650 SumOfSquares(13) = 819 SumOfSquares(14) = 1015 SumOfSquares(15) = 1240 SumOfSquares(16) = 1496
[edit] XPL0
include c:\cxpl\codes; \intrinsic 'code' declarations
func SumSq(V, L);
int V, L;
int S, I;
[S:= 0;
for I:= 0 to L-1 do S:= S+sq(V(I));
return S;
]; \SumSq
[IntOut(0, SumSq([1,2,3,4,5,6,7,8,9,10], 10)); CrLf(0);
IntOut(0, SumSq([0], 0)); CrLf(0); \zero-lenght vector "[]" doesn't compile
]
Output:
385 0
- Programming Tasks
- Arithmetic operations
- ACL2
- ActionScript
- Ada
- ALGOL 68
- Alore
- AutoHotkey
- AWK
- BASIC
- BBC BASIC
- Brat
- C
- C++
- Boost.Lambda
- C sharp
- Chef
- Clojure
- Common Lisp
- D
- Dart
- Delphi
- E
- Erlang
- Euphoria
- Factor
- Fantom
- Fish
- Forth
- Fortran
- F Sharp
- GAP
- Go
- Golfscript
- Groovy
- Haskell
- IDL
- Icon
- Unicon
- Inform 7
- Io
- J
- Java
- JavaScript
- Functional
- K
- Liberty BASIC
- Logo
- Logtalk
- Lua
- Mathematica
- MATLAB
- Maxima
- Mercury
- Modula-3
- MOO
- MUMPS
- Nemerle
- NewLISP
- Objeck
- OCaml
- Octave
- Oz
- PARI/GP
- Pascal
- Math
- Perl
- Perl 6
- PHP
- PicoLisp
- PL/I
- Pop11
- PostScript
- Initlib
- PowerShell
- PureBasic
- Python
- Prolog
- R
- REXX
- Ruby
- Run BASIC
- Sather
- Scala
- Scheme
- Seed7
- Slate
- Smalltalk
- SNOBOL4
- Standard ML
- SQL
- Tcl
- Tcllib
- Trith
- TUSCRIPT
- UnixPipes
- Ursala
- V
- Visual Basic .NET
- XPL0