// ========================================================================== // $Id: lambda.go,v 1.1 2014/03/27 03:27:49 jlang Exp $ // CSI2120 GO: Lambdas // ========================================================================== // (C)opyright: // // Jochen Lang // EECS, University of Ottawa // 800 King Edward Ave. // Ottawa, On., K1N 6N5 // Canada. // http://www.eecs.uottawa.ca // // Creator: Jochen Lang (based on example by R. Laganiere) // Email: jlang@eecs.uottawa.ca // ========================================================================== // $Log: lambda.go,v $ // Revision 1.1 2014/03/27 03:27:49 jlang // Created Go examples for intro lecture. // // ========================================================================== package main import ( "fmt" "math" ) type Point struct { x float64 y float64 } func Distance(p1 Point, p2 Point) (distance float64){ distance = math.Sqrt(math.Pow(p1.x - p2.x, 2.0) + math.Pow(p1.y - p2.y, 2.0)) return } func calc(p1 Point, p2 Point, d func(Point, Point)(float64))(float64) { return d(p1,p2) } func main() { a := Point{2.,4.} b := Point{5.,9.} dist := calc(a,b,Distance) fmt.Printf("result= %f\n", dist) dist = calc(a,b,func(p Point, q Point)float64{ return math.Abs(p.x-q.x)+math.Abs(p.y-q.y)}) fmt.Printf("result= %f\n", dist) }