sequence関係のユーティリティ関数で自分がよく知らないものをまとめておく。
昔はindexed
っていうそのまんまな関数があったけど、1.3くらいからなくなっていた。今はmap-indexed
っていう関数を使う。よく使うのはこんな感じの使い方。
(map-indexed #(vector %1 %2) ["a" "b" "c" "d" "e"])
; ([0 "a"] [1 "b"] [2 "c"] [3 "d"] [4 "e"])
#! /opt/local/bin/ruby | |
# -*- coding: utf-8 -*- | |
require 'open3' | |
error = "" | |
Open3.popen3("R --vanilla -q -e \"parse(file=\\\"#{ARGV[0]}\\\")\""){|stdin, stdout, stderr| | |
error = stderr.read.to_s | |
} |
# -*- coding: utf-8 -*- | |
require "rubygems" | |
require "mechanize" | |
require "optparse" | |
require "hpricot" | |
require "text/hatena" | |
require "pp" | |
@options = { | |
:c => false, |
(require '[clojure.tools.cli :as cli]) | |
(defn- get-cli-opts [args] | |
(cli/cli args | |
["--file" "File name of training" :default "./filtered_docs/all.json"] | |
["--alpha" "Hyperparameter for domain dependent/independant prior" | |
:default 1.0 :parse-fn #(Double. %)] | |
["--beta" "Hyperparameter for word prior" | |
:default 0.01 :parse-fn #(Double. %)] | |
["--gamma" "Hyperparameter for sentiment prior" |
(defmacro sum [bindings expr] | |
`(reduce + (for ~bindings ~expr))) | |
(macroexpand-1 '(sum [x '(1 2 3) | |
y '(4 5 6)] | |
(+ x y))) | |
(clojure.core/reduce | |
clojure.core/+ | |
(clojure.core/for [x (quote (1 2 3)) |
(dolist (var init-form result) S式 ... )
dolist は名前が示すように、リストに関係があります。最初に init-form を評価します。このとき、評価結果はリストでなければいけません。リスト以外の場合はエラーとなります。dolist は、このリストの要素を順番に変数 var に代入して S 式を評価します。リストの要素がなくなったら result を評価し、その値が dolist の返り値になります。次の例を見てください。
(defmacro hash-map-by-names [names] | |
`(let [ks# (map keyword '~(keys &env)) | |
vs# (list ~@(keys &env)) | |
names# (map keyword '~names)] | |
(select-keys (zipmap ks# vs#) names#))) | |
(let [x 1 | |
y 2 | |
z 3] | |
(hash-map-by-names [x y])) ; {:y 2, :x 1} |
(defprotocol Contains? | |
(contains? [this item])) | |
(extend-type clojure.lang.PersistentList | |
Contains? | |
(contains? [this item] | |
(some #(= % item) this))) | |
(contains? '(1 2 3) 1) ; true |
;; {:x x, :y y}みたいなhash-mapを毎回作るのがダルくなってきたので... | |
(defmacro hash-map-by-names [& names] | |
`(let [pairs# (map (fn [name#] | |
(list (keyword name#) (deref (resolve name#)))) | |
'~names)] | |
(apply hash-map (flatten pairs#)))) | |
(def x 1) | |
(def y 2) |
Cocoa Emacsをインストールして使っています。
Mountain Lionは素直にsudo port install emacs-app
でよいみたい。
Lionはフルスクリーンなどいくつかパッチをあてる必要があるので、自分でコンパイルします。