T => T という型の関数 f, g, h があるとき
(f, g) を受け取って x => f(g(x)) となる関数を返す関数 Aと
(f, g, h) を受け取って x => f(g(h(x))) となる関数を返す関数 Bを考える
[1] AとBを実装せよ
[2] AとBを一般化して、
任意の数の T => T 型の関数のリスト [f, g, h, ... ] を受け取って
| (defun spamf-register-words-directory (corpus dirname) nil) | |
| (defun spamf-register-words-file (corpus filename) nil) | |
| (defun spamf-register-words-buffer (corpus buffer) nil) | |
| (defun spamf-register-words-string (corpus string) nil) | |
| (defun spamf-delete-words-directory (corpus dirname) nil) | |
| (defun spamf-delete-words-file (corpus filename) nil) | |
| (defun spamf-delete-words-buffer (corpus buffer) nil) | |
| (defun spamf-delete-words-string (corpus string) nil) |
| # encoding: utf-8 | |
| module TelSplitter | |
| MAP = { | |
| # 市外局番 , 市内局番の桁数のマップ | |
| # http://www.soumu.go.jp/main_sosiki/joho_tsusin/top/tel_number/number_shitei.html のデータを利用 | |
| # 固定電話以外の桁数は適当です... | |
| '050' => 4, # IP電話 | |
| '070' => 4, # 携帯電話/PHS | |
| '080' => 4, # 携帯電話 |
| (* point と colord_point の共通項を型として定義する *) | |
| type pointable = <get_pos : int> | |
| (* 明示的にキャストすれば同じリストにいれられる *) | |
| let lst = [(p :> ptwointable); (cp :> pointable)] | |
| # List.map (fun x -> x#get_pos) lst;; | |
| - : int list = [365; 123] | |
| (* リストに型制約をつけて宣言する *) | |
| # let l : pointable list = [p; cp];; |
| <?xml version="1.0"?> | |
| <root> | |
| <item> | |
| <name>TRONキーボード</name> | |
| <identifier>private.tron_kbd</identifier> | |
| <autogen>__KeyToKey__ KeyCode::OPTION_L, KeyCode::CONTROL_L</autogen> | |
| <autogen>__KeyToKey__ KeyCode::COMMAND_R, KeyCode::JIS_KANA</autogen> | |
| <autogen>__KeyToKey__ KeyCode::JIS_EISUU, KeyCode::COMMAND_L</autogen> | |
| <autogen>__KeyToKey__ KeyCode::JIS_KANA, KeyCode::SPACE</autogen> |
| #!/usr/bin/env sh | |
| mkdir $1 | |
| cd $1 | |
| npm init -y | |
| npm install -D babelify watchify babel-preset-es2015 babel-preset-react babel-plugin-syntax-flow babel-plugin-transform-flow-strip-types react react-dom | |
| echo '{"presets": ["es2015", "react"], "plugins": ["transform-flow-strip-types", "syntax-flow"]}' > .babelrc | |
| gibo Node OSX > .gitignore | |
| cat <<EOF > .flowconfig | |
| [ignore] |
| data Person = Person { firstName :: String, lastName :: String } deriving Show | |
| data DisplayPerson = DisplayPerson { name :: String } deriving Show | |
| names :: Person -> [String] | |
| names person = [firstName person, lastName person] | |
| translate :: Person -> DisplayPerson | |
| translate = DisplayPerson . unwords . names | |
| translateR :: Person -> DisplayPerson |
| require 'cgi/util' | |
| require 'cgi/html' | |
| ch5 = CGI::HTML5.new | |
| puts ch5.instance_eval { | |
| html { | |
| head { | |
| title { "XML encoding with Ruby" } | |
| } + | |
| body { |
| module DefaultConstructor | |
| def self.included(base) | |
| base.extend(ClassMethods) | |
| end | |
| module ClassMethods | |
| def constructor(*attributes) | |
| attr_reader *attributes | |
| define_method :initialize do |*attrs| |
T => T という型の関数 f, g, h があるとき
(f, g) を受け取って x => f(g(x)) となる関数を返す関数 Aと
(f, g, h) を受け取って x => f(g(h(x))) となる関数を返す関数 Bを考える
[1] AとBを実装せよ
[2] AとBを一般化して、
任意の数の T => T 型の関数のリスト [f, g, h, ... ] を受け取って
| scala> import org.mindrot.jbcrypt.BCrypt | |
| import org.mindrot.jbcrypt.BCrypt | |
| scala> val pw = "my password" | |
| pw: String = my password | |
| scala> val salt = BCrypt.gensalt() | |
| salt: String = $2a$10$AsMc1b5AYVudBaXWXTYpe. | |
| scala> val encryptedPassword = BCrypt.hashpw(pw, salt) |