# papl / src / PaplMetric.mli

 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133``` ```(* Copyright (c) 2012 Anders Lau Olsen. See LICENSE file for terms and conditions. *) (** Distance measures A {b metric} is a function that measures the distance between a pair of values. Mathematically speaking, a metric must satisfy properties of - non-negativity - symmetry - reflexivity - triangle inequality but metric implementations aren't required to satisfy these laws. It is the responsibility of each algorithm that uses a metric to specify the laws that the metric must satisfy. *) (** {2 Types} *) type 'a pair_t = 'a * 'a type 'a t = 'a -> 'a -> float (** The type of a metric. A metric measures the distance between a pair of values. *) type 'a norm_t = 'a -> float (** The type of a norm. A norm measures the magnitude of a value. *) type 'a option_t = 'a -> 'a -> float option (** A metric that can refuse to return a result. *) type 'a norm_option_t = 'a -> float option (** A norm that can refuse to return a result. *) type 'a threshold_t = 'a t * float (** A threshold is a tuple [(metric, eps)] containing a metric [metric] for measuring the distance between points and a threshold value [eps] for the distance. Whether [eps] is a lower, upper, or equality boundary for values returned by [metric] depends on the context. *) (** {2 Constructors} *) val to_option : 'a t -> 'a option_t (** Convert a metric to an option metric. Given [(a, b)] the option metric [m' = to_option m] always returns [Some (m a b)]. *) val map_result : (float -> float) -> 'a t -> 'a t (** Map a function onto the result of a metric. If [m' = map_result f m] then [m' a b] is equivalent to [f (m a b)]. *) val scale : float -> 'a t -> 'a t (** A metric that scales the result of a metric. [scale s] is equivalent to [map_result (( *. ) s)]. *) val add : 'a t -> 'a t -> 'a t (** A metric that sums the results of two metrics. If [m = add m1 m2] then [m a b] is equivalent to [m1 a b +. m2 a b]. *) val pow : 'a t -> float -> 'a t (** [pow m p] is equivalent to [map_result (fun v -> v**p) m]. *) val path_length : 'a t -> 'a list -> float (** The length of a path. The length [path_length dist path] is equal to the sum of the distances between adjacent elements of [path]. The distances are computed by [dist]. The length of an empty path or a one-element path is undefined and raises an exception. *) (** {2 Float metrics} *) module Float : sig val dist : float t (** [Float.dist a b] returns the absolute value of [b -. a]. *) end (** {2 Int metrics} *) module Int : sig val dist : int t (** [Int.dist a b] returns the absolute value of [b - a] converted to a [float]. *) end (** {2 Tuple metrics} *) (** The tuple metrics apply a separate metric for each coordinate of the tuple. *) module Tuple2 : sig val dist1 : 'a t -> 'b t -> ('a * 'b) t (** The Manhattan distance. *) val dist2 : 'a t -> 'b t -> ('a * 'b) t (** The Euclidean distance. *) val dist2_sqr : 'a t -> 'b t -> ('a * 'b) t (** The square of Euclidean distance. *) val dist_inf : 'a t -> 'b t -> ('a * 'b) t (** The max distance. *) end module type OPTION = sig type t val dist : t option_t end ```
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.