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
(defn fib [n]
(case n
0 0
1 1
(+ (fib (- n 1))
(fib (- n 2)))))
(let [x (-> *command-line-args*
first
js/parseInt)]
(defn english->french [words]
(clojure.walk/postwalk-replace '{are vas
book livre
friend ami
hello bonjour
how comment
my mon
red rouge
you tu
today aujourd'hui}
@lagenorhynque
lagenorhynque / clojurescript-re-frame.md
Last active November 11, 2022 07:14
ClojureScript/re-frame開発における思考フロー

Clojurianのlagénorhynque (a.k.a. カマイルカ)です。

先日、Shibuya.lisp lispmeetup #62で「re-frame à la spec」と題してre-frameというClojureScriptフレームワークの概要とclojure.specとの統合方法の一例について発表しました。

本記事では、その発表内容に関連してClojureScriptとre-frameでのSPA開発の流れについてご紹介します。

@ababup1192 さんのElmについての素晴らしい記事 Elm開発における思考フロー からサンプルコードと本文の構成を参考にさせていただきました。

こちらの記事と比較してみると、両言語/アーキテクチャの共通点や差異が見られて面白いかもしれません。

@lagenorhynque
lagenorhynque / deps.edn
Last active August 24, 2024 01:41
fibonacci with matrix exponentiation
{:paths ["."]
:deps {org.clojure/algo.generic {:mvn/version "0.1.2"}}}

whatever -> input -> whatever という reduce 関数に渡すような関数("reducing関数"と呼ばれる)を受け取ってreducing関数を返す関数、つまり

(whatever -> input -> whatever) -> (whatever -> input -> whatever)

のことを"transducer"と呼んでいる。

cf. https://japan-clojurians.github.io/clojure-site-ja/reference/transducers

(println
(loop [lines (rest (line-seq (clojure.java.io/reader *in*)))
numbers #{}]
(if (empty? lines)
(count numbers)
(let [n (first lines)]
(recur (rest lines)
(if (contains? numbers n)
(disj numbers n)
(conj numbers n)))))))
cljs.user> (defprotocol INode
(entry [this])
(left [this])
(right [this])
(contains-value? [this v])
(insert-value [this v]))
nil
cljs.user> (declare ->Node)
#'cljs.user/->Node
cljs.user> (deftype Node [val l r]
@lagenorhynque
lagenorhynque / re-frame-a-la-spec.md
Last active November 11, 2022 07:15
re-frame à la spec

re-frame à la spec


Self-introduction

lagénorhynque /laʒenɔʁɛ̃k/ カマイルカ

(defprofile lagénorhynque
sicp.chapter1.2-2> (defn my-odd? [n]
(letfn [(odd? [n]
(if (zero? n)
false
(even? (dec n))))
(even? [n]
(if (zero? n)
true
(odd? (dec n))))]
(odd? n)))
user> (defn f [n]
(* 2 n))
#'user/f
user> (map f (range (inc 5)))
(0 2 4 6 8 10)
user> (require '[clojure.math.numeric-tower :refer [expt]])
nil
user> (defn g [n]
(if (zero? n)
0