Clamping in this context is a term of art.

l8r
Sean


> On Mar 15, 2017, at 5:22 AM, Neil Cowburn via swift-evolution 
> <[email protected]> wrote:
> 
> A suggestion, if I may: change the verb `clamped` to `bound`. The verb 
> `clamp` means to immobilise or fix in place. That seems counterintuitive 
> given the sole function argument is a range. 
> 
> Compare the interpretation of clamped vs bound: 
> 
> foo.clamped(to: 0...100) --> “The integer, foo, is clamped to a range between 
> 0 and 100”
> 
> 
> foo.bound(to: 0...100) --> “The integer, foo, is bound to a range between 0 
> and 100”
> 
> The latter, to me, reads more naturally than the former. 
> 
> -- Neil
> 
> 
> 
> On 15/03/2017, 02:07, "Nicholas Maccharoli via swift-evolution" 
> <[email protected] on behalf of [email protected]> 
> wrote:
> 
>    I am starting to worry that I left something out.
> 
> 
> 
>    On Tue, Mar 14, 2017 at 11:16 AM, Nicholas Maccharoli 
> <[email protected]> wrote:
> 
>    Swift-Evolution,
> 
>    After considering the indispensable feedback from the community here is a 
> slightly more polished draft.
> 
>    If anyone is interested the draft can be downloaded here:
>    
> https://github.com/Nirma/swift-evolution/blob/clamp_function/proposals/NNNN-add-clamp-function.md
> 
> 
>    Thank you so much, 
> 
>    - Nick
> 
> 
>    Add clamp(to:) to the stdlib
>    * Proposal: SE-NNNN 
> <https://github.com/Nirma/swift-evolution/blob/clamp_function/proposals/NNNN-filename.md>
>    * Authors: Nicholas Maccharoli <https://github.com/Nirma>
>    * Review Manager: TBD
>    * Status: Awaiting review
> 
>    During the review process, add the following fields as needed:
> 
>    * Decision Notes: Rationale 
> <https://lists.swift.org/pipermail/swift-evolution/>, Additional Commentary 
> <https://lists.swift.org/pipermail/swift-evolution/>
>    * Bugs: SR-NNNN <https://bugs.swift.org/browse/SR-NNNN>, SR-MMMM 
> <https://bugs.swift.org/browse/SR-MMMM>
>    * Previous Revision: 1 
> <https://github.com/apple/swift-evolution/blob/...commit-ID.../proposals/NNNN-filename.md>
>    * Previous Proposal: SE-XXXX 
> <https://github.com/Nirma/swift-evolution/blob/clamp_function/proposals/XXXX-filename.md>
> 
>     
> <https://github.com/Nirma/swift-evolution/blob/clamp_function/proposals/NNNN-add-clamp-function.md#introduction>IntroductionThis
>  proposal aims to add functionality to the standard library for clamping a 
> value to a ClosedRange. The proposed function would allow the user to specify 
> a range to clamp a value to where if the value fell within the range, the 
> value would be returned as is, if the value being clamped exceeded the upper 
> or lower bound in value the value of the boundary the value exceeded would be 
> returned.
>    Swift-evolution thread: Add a clamp function to Algorithm.swift 
> <https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20170306/thread.html#33674>
>     
> <https://github.com/Nirma/swift-evolution/blob/clamp_function/proposals/NNNN-add-clamp-function.md#motivation>MotivationThere
>  have been quite a few times in my professional and personal programming life 
> where I reached for a clampedfunction and was disappointed it was not part of 
> the standard library.
>    Having functionality like clamped(to:) added to Comparable as a protocol 
> extension would benefit users of the Swift language who wish to guarantee 
> that a value is kept within bounds.
>     
> <https://github.com/Nirma/swift-evolution/blob/clamp_function/proposals/NNNN-add-clamp-function.md#proposed-solution>Proposed
>  solutionThe solution proposed is simply that there be a clamped(to:) 
> function added to the Swift Standard Library. The function would behave much 
> like its name describes.
>    Given a clamped(to:) function existed it could be called in the following 
> way, yielding the results in the adjacent comments:
>    let foo = 100// Closed range variant
>    foo.clamped(to: 0...50) // 50foo.clamped(to: 200...300) // 
> 200foo.clamped(to: 0...150) // 100// Half-Open range variant
>    foo.clamped(to: 0..<50) // 49foo.clamped(to: 200..<300) // 
> 200foo.clamped(to: 0..<150) // 100
>     
> <https://github.com/Nirma/swift-evolution/blob/clamp_function/proposals/NNNN-add-clamp-function.md#detailed-design>Detailed
>  designThe implementation of clamped(to:) that is being proposed is composed 
> of two protocol extensions; one protocol extension on Comparable and another 
> on Strideable.
>    The implementation for clamped(to:) as an extension to Comparable 
> accepting a range of type ClosedRange<Self>would look like the following:
>    extension Comparable {
>        func clamped(to range: ClosedRange<Self>) -> Self {
>            if self > range.upperBound {
>                return range.upperBound
>            } else if self < range.lowerBound {
>                return range.lowerBound
>            } else {
>                return self
>            }
>        }
>    }
>    The implementation of clamped(to:) as an extension on Strideable would be 
> confined to cases where the stride is of type Integer. The implementation 
> would be as follows:
>    extension Strideable where Stride: Integer {
>        func clamped(to range: Range<Self>) -> Self {
>            return clamped(to: range.lowerBound...(range.upperBound - 1))
>        }
>    }
>     
> <https://github.com/Nirma/swift-evolution/blob/clamp_function/proposals/NNNN-add-clamp-function.md#source-compatibility>Source
>  compatibilityThis feature is purely additive; it has no effect on source 
> compatibility.
>     
> <https://github.com/Nirma/swift-evolution/blob/clamp_function/proposals/NNNN-add-clamp-function.md#effect-on-abi-stability>Effect
>  on ABI stabilityThis feature is purely additive; it has no effect on ABI 
> stability.
>     
> <https://github.com/Nirma/swift-evolution/blob/clamp_function/proposals/NNNN-add-clamp-function.md#effect-on-api-resilience>Effect
>  on API resilienceThe proposed function would become part of the API but 
> purely additive.
>     
> <https://github.com/Nirma/swift-evolution/blob/clamp_function/proposals/NNNN-add-clamp-function.md#alternatives-considered>Alternatives
>  consideredAside from doing nothing, no other alternatives were considered.
> 
> 
> 
> 
> 
> 
> 
>    _______________________________________________
>    swift-evolution mailing list
>    [email protected]
>    https://lists.swift.org/mailman/listinfo/swift-evolution
> 
> 
> 
> 
> _______________________________________________
> swift-evolution mailing list
> [email protected]
> https://lists.swift.org/mailman/listinfo/swift-evolution

_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to