Skip to content

Instantly share code, notes, and snippets.

View syou6162's full-sized avatar

Yasuhisa Yoshida syou6162

View GitHub Profile
@syou6162
syou6162 / flycheck_R.rb
Created September 8, 2012 04:44
R用のflymake
#! /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
}
@syou6162
syou6162 / convert_from_hatena_to_html.rb
Created September 8, 2012 04:32
はてな記法からhtmlへのconvertするためのスクリプト
# -*- coding: utf-8 -*-
require "rubygems"
require "mechanize"
require "optparse"
require "hpricot"
require "text/hatena"
require "pp"
@options = {
:c => false,
@syou6162
syou6162 / cli_example.clj
Created September 6, 2012 00:36
cliの使い方のメモ
(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"
@syou6162
syou6162 / clj-seq-utils.md
Created September 6, 2012 00:24
Clojureのsequence関係のユーティリティ関数のまとめ

sequence関係のユーティリティ関数で自分がよく知らないものをまとめておく。

map-indexed

昔は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"])

reductions

@syou6162
syou6162 / summation.clj
Created August 20, 2012 10:40
何重和みたいなものをexpressionを取って簡単に書けるようにするマクロ
(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))
@syou6162
syou6162 / Difference_between_cl_and_clojure.md
Created August 19, 2012 11:09
On Lispを読んでいて分からなかったCommon LispとClojureの違いについて自分なりにまとめていきます

Common Lispの関数

dolist

(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)