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