Skip to content

Instantly share code, notes, and snippets.

<?php
paramsFromArgs($class, $method, $args) {
...
}
class Foo {
public function method($a, $b, $c) {
$params = static::paramsFromArgs(__CLASS__, __METHOD__, func_get_args());
var_dump($params);
@akanehara
akanehara / combinations.php
Last active August 29, 2015 13:58
sequence :: [m a] -> m [a] like function for PHP array
<?php
function combinations()
{
$xss = func_get_args();
return array_reduce($xss, function($yss, $xs) {
$zs = [];
foreach ($yss as $ys) {
foreach ($xs as $x) {
$zs[] = array_merge($ys, array($x));
}
@akanehara
akanehara / derivedprop.php
Created April 14, 2014 10:16
Yii AR - derived property
<?php
class Foo extends CActiveRecord
{
$public $derived;
public function beforeFind()
{
$this->dbCriteria->select = 'col1, col2, col3, deriving(col2) AS derived';
}
@akanehara
akanehara / primes.php
Created May 6, 2014 02:12
Ginqのunfoldで余再帰sieve。非効率きわまりないお遊びなので実用しないでね。
<?php
require_once("vendor/autoload.php");
$primes = Ginq::from([2])->concat(Ginq::unfold(
Ginq::range(3,null,2),
function($xs) {
$x = $xs->first();
return [
$x,
$xs->drop(1)->filter(['y'=>'y % x != 0', 'x'=>$x])

TypeScript勉強会 #1

altJS

トランスレートやコンパイルによってJavaScriptの問題点を克服しようという機運

  • CoffeeScript

  • Haxe

@akanehara
akanehara / scope.coffee
Last active August 29, 2015 14:04
var がないことによる問題
# var がないことによる問題
# 関数sum内の x がローカル変数であることをいつも保証できない
# このコメントアウトを外すと sum 内の x はローカル変数でなくなる
# x = 100
sum = (n) ->
x = 0
for i in [1..n]
x += i
@akanehara
akanehara / hashmap.ts
Last active August 29, 2015 14:05
HashMap
/**
* ハッシュ関数
*/
export interface HashFun<A> {
(o : A) : string;
}
/**
* マップ
* コンストラクタにキーのハッシュ関数を与えて使う。
fib(0, 0).
fib(1, 1).
fib(X, Y1 + Y2) :- fib(X - 1, Y1), fib(X - 2, Y2).
%% これだと X - 1 がいつまでも簡約(?)
%% されずに停まらなくなるのどうして?
% {trace}
% | ?- fib(2, What).
% 1 1 Call: fib(2,_279) ?
% 2 2 Call: fib(2-1,_311) ?
% 3 3 Call: fib(2-1-1,_341) ?
(* seiza int -> string *)
let seiza md =
if md < 0120 then
"牡羊座"
else if md <= 0218 then
"水瓶座"
else if md <= 0320 then
"魚座"
else if md <= 0419 then
"牡羊座"
(* string * string -> string *)
let seiseki name_seiseki_pair =
match name_seiseki_pair with
(n, s) -> n ^ "さんの評価は" ^ s ^ "です"
let seiseki1 = seiseki ("カネハラ", "最悪") = "カネハラさんの評価は最悪です"
let seiseki2 = seiseki ("山田", "最高") = "山田さんの評価は最高です"
let seiseki3 = seiseki ("鈴木", "普通") = "鈴木さんの評価は普通です"