Sum of squares: Difference between revisions

→‎{{header|Tcl}}: Cleaned it up.
(Added 11l)
(→‎{{header|Tcl}}: Cleaned it up.)
Line 2,418:
 
=={{header|Tcl}}==
<lang tcl>procpackage sumOfSquaresrequire {nums}Tcl {8.6
set sum 0
foreach num $nums {
set sum [expr {$sum + $num**2}]
}
return $sum
}
sumOfSquares {1 2 3 4 5} ;# ==> 55
sumOfSquares {} ;# ==> 0</lang>
 
{{tcllib|struct::list}}
<lang tcl>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</lang>
Generic "sum of <i>function</i>"
<lang tcl>package require Tcl 8.5
package require struct::list
namespace path ::tcl::mathop
 
# {*} is like apply in Scheme--it turns a list into multiple arguments
proc sum_of {lambda nums} {
proc sum_of_squares lst {
struct::list fold [struct::list map $nums [list apply $lambda]] 0 +
+ {*}[lmap x {}$lst {** $x 2$x}]; # ==> 0
}
+puts {*}[lmap xsum_of_squares {1 2 3 4} {** $x 2}]; # ==> 30
 
sum_ofputs {x[sum_of_squares {*}]; $x $x}} {1 2 3 4 5} ;# ==> 55</lang>0
Modern version
<lang tcl>package require Tcl 8.6
namespace path ::tcl::mathop
 
+ {*}[lmap x {1 2 3 4} {** $x 2}]; # ==> 30
+ {*}[lmap x {} {** $x 2}]; # ==> 0
</lang>
 
27

edits