Skip to content

Instantly share code, notes, and snippets.

View lagenorhynque's full-sized avatar
🐬
architecting & managing

Kent OHASHI lagenorhynque

🐬
architecting & managing
View GitHub Profile
@lagenorhynque
lagenorhynque / Monoid.scala
Last active April 16, 2016 10:20
Monoid implementation in Scala
trait Monoid[A] {
def mempty: A
def mappend(x: A, y: A): A
def mconcat(xs: Seq[A]): A = xs.foldLeft(mempty)(mappend)
}
object MonoidTest {
def sum[A: Monoid](xs: A*): A = implicitly[Monoid[A]].mconcat(xs)
implicit def numericMonoid[A: Numeric] = new Monoid[A] {
@lagenorhynque
lagenorhynque / Fibonacci.scala
Last active April 16, 2016 10:21
Fibonacci number in Scala
import scala.annotation.tailrec
object Fibonacci {
@tailrec
def fibo(i: Int, prev: BigInt = 1, curr: BigInt = 0): BigInt = i match {
case 0 => 0
case i if i < 2 => prev + curr
case _ => fibo(i - 1, curr, prev + curr)
}
module MonadTransformers where
import Control.Monad.Trans.Class
import Control.Monad.Trans.Maybe
data User = User {
id' :: Int,
firstName :: Maybe String,
lastName :: Maybe String
} deriving Show
(ns random-alphanumeric-generator)
(def alphanumeric "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890")
(defn rand-alphanumeric [len]
(repeatedly len #(rand-nth alphanumeric)))
(->> (repeatedly #(rand-alphanumeric 5))
(filter (fn [[a _ _ _ b]] (= a b)))
(map #(apply str %))
@lagenorhynque
lagenorhynque / favourites.jpg
Last active November 11, 2022 07:21
self-introduction
favourites.jpg
;;;; cf. http://riktor.hatenablog.com/entry/2012/07/20/224806
(defn fib [n]
(if (or (= n 0) (= n 1))
1
(+ (fib (- n 1))
(fib (- n 2)))))
(let [memo (atom {})]
(defn fib-memoized [n]
import scala.collection.mutable.ListBuffer
val messageBoxes = Array.fill(3)(ListBuffer[String]())
messageBoxes(0) += "message1"
messageBoxes(0) += "message2"
messageBoxes(0) += "message4"
messageBoxes(0) += "message5"
messageBoxes(1) += "message1"
messageBoxes(1) += "message2"
messageBoxes(1) += "message3"
;;;; cf. http://riktor.hatenablog.com/entry/2012/07/22/223937
(def counter
(let [cnt (atom 0)]
(fn [] (swap! cnt inc))))
(counter)
(counter)
(counter)
;;;; cf. http://riktor.hatenablog.com/entry/2012/07/25/001118
(first '(1 2 3))
(first '((1 2 3) 4 5 6))
(rest '(1 2 3))
(rest '(1 2 (3 4 5)))
(cons 1 '(2 3))
(cons '(1 2 3) '((4 5 6)))
(cons 1 nil)