Skip to content

Instantly share code, notes, and snippets.

View kazk's full-sized avatar

Kaz Yoshihara kazk

  • Andela
  • Los Angeles, CA
  • 07:24 (UTC -07:00)
View GitHub Profile
// [D std.range.chain]: http://dlang.org/phobos/std_range.html#chain
/// Concatenates several sequences of same kind into a single one.
public func chain<S : SequenceType>(sequences: S...) -> SequenceOf<S.Generator.Element> {
return SequenceOf {_ -> GeneratorOf<S.Generator.Element> in
var ss = sequences.generate()
var g = ss.next()?.generate()
return GeneratorOf {
if let x = g?.next() { return x }
// Must be `while let` not `if let` to handle empty sequence in between
// accumulate (scanl)
public func accumulate<S : SequenceType, T>
(sequence: S, initial: T, combine: (T, S.Generator.Element)->T)
-> SequenceOf<T>
{
return SequenceOf {_ -> GeneratorOf<T> in
var g = sequence.generate()
var value:T? = initial
return GeneratorOf {
switch value {
@kazk
kazk / vForceFunctions.swift
Last active August 29, 2015 14:12
Wrappers of functions from vForce.h.
import Accelerate.vecLib.vForce
// Convenience functions wrapping functions from vForce.h.
//
// Function names are orignal name without `vv` prefix with few exceptions listed below.
// - trunc = vvint
// - round = vvnint
// - reciprocal = vvrec
//
// Arguments are adjusted to match standard <math.h> functions when applicable.
// MARK: - zip (longest)
// Zip sequences continue to the end of the longest sequence.
// Treats as if the shorter sequences have .None elements to fill the gap.
// MARK: ([A], [B]) -> [(A?, B?)]
/// Generalized zip2 longest, zipping with the given function instead of a tupling function.
public func zipLongest<A : SequenceType, B : SequenceType, R>
(sequenceA: A, sequenceB: B, with f: (A.Generator.Element?, B.Generator.Element?)->R)
-> SequenceOf<R>
{
@kazk
kazk / roundRobin.swift
Created December 29, 2014 21:16
`roundRobin` function from D std.range in Swift.
// [roundRobin](http://dlang.org/phobos/std_range.html#roundRobin)
public func roundRobin<S:SequenceType>(sequences:S ...)
-> SequenceOf<S.Generator.Element>
{
func isDone(gs:[S.Generator?]) -> Bool {
for g in gs { if (g != nil) { return false } }
return true
}
return SequenceOf {_ -> GeneratorOf<S.Generator.Element> in