2009/08/31
SchemeとJsでしつこくYCombinator
Schemeの方はTechEd2009中に、眠くなったときや話がわからなくなった時に書いた(w
download - ycombinator.scm.txt
download - ycombinator.js.txt
2009/08/24
Jsのfunctionで暇つぶし(ejax)
またもや眠気覚ましに少し遊んでみた。
意味のあるコードではない。
いつまでたってもScheme初級者から抜け出せない私はJavaScriptよくで遊ぶ。
functionはもうちょっと短くfunくらいにならないかな。まぁ改めてみるとlambdaもなかなか冗長だな。^でいんじゃね。
ところで、ejaxとjs2-modeはやはりかなり良い。この二つが完全に連携してくれると助かるけどなー。
(ejaxはemacs lispで書かれたECMA標準に準拠したJavaScriptインタプリタ)
download - 10times.recursive.helloworld.js
普通の再帰
(function f (n){ |
マッチポンプ的な再帰に変換。自分に自分を呼び出す自分を渡して・・・
(function (f){ |
リテラルを一つ外にくくりだしてみる。無名関数はローカル変数の変わりになるというあれ。Schemeのletはlambdaでくくり出すのと同じだよーっていうあれ。
(function (x){ |
出力を行う部分を関数として外に出してみる。この辺から後はとくに面白みがない。
(function (y, action){ |
反復条件も関数として外に出してみる。pはpredicateのpということで。
(function (y, a, p){ |
ここで再帰のたびにデクリメントされる部分を関数として外に出したらfor文ぽいよねーなどと思いながら外にだしてみる。iはincrementのiかな。
(function (y, a, p, i){ |
2009/08/12
[C#]再帰的四則演算(加減乗除)
KPF第四回勉強会でやったネタのC#版ですね。
The Little Schemerの4章のNumbers Gamesのコード片です。
using System;
// The Little Schemer
//デクリメント
//加算
//減算
//大なり
//小なり
//乗算
//除算
Console.ReadLine(); |
[C#]九九テーブル
先日schemeで書いたものをC#で書いてみようかなーと。
型宣言でかなりごちゃごちゃ。varはいいな。
using System; namespace QxQ
tblmaker = new Func<IEnumerable<int>, IEnumerable<int> col.ToList().ForEach(j => List<List<KeyValuePair<KeyValuePair<int, int>, int>>> tbl Console.WriteLine(tbl); /*
var tablemaker2 = new Func<IEnumerable<int>, IEnumerable<int> row.ToList().ForEach(i => col.ToList().ForEach(j => private static void Display(List<List<KeyValuePair<KeyValuePair<int, int>, int>>> tbl) |
[C#]名前空間の外にクラスを定義する
というようなことができるということだったので、やってみた。
使いどころは思いつかない。
download - GlobalNamespaceClasss
using System;
namespace Sample.GlobalNamespaceClass
//グローバル名前空間に定義されたクラス(名前空間の指定無し)
public T Value
public GlobalClass(T val)
public T Print(Func<T, T> printer) |
2009/08/11
[js]map,iota,times
map, iotaは何度か同じようなの書いてる。
timesはNumberクラスいじったらできるんじゃね?って思ったらできた。
// Arrayクラスのprototypeにmapを追加 for (var i = 0; i < this.length; i++) |
// Arrayクラスにiotaクラスメソッドを追加(したつもり) var ret = []; for (var i = 0, j = init; ret.length < cnt; i++, j = j + inc) return ret;
/*
|
// 数値(Numberクラス?)のprototypeにtimesメソッドを追加 /*
js> (10).times(function (i) { print ('hello'); }) |
[scheme]九九っぽい
(use srfi-1) (define 9x9 (lambda (row cnt inc mul) (append (cons (map (lambda (n) (cons (cons mul n)(cons (* n mul) '()))) (iota cnt 1 inc)) (if (zero? row) '() (9x9 (- row 1) cnt inc (+ mul 1))))))) (9x9 9 9 1 1) ;; => ((((1 . 1) 1) ((1 . 2) 2) ((1 . 3) 3) ((1 . 4) 4) ((1 . 5) 5) ((1 . 6) 6) ((1 . 7) 7) ((1 . 8) 8) ((1 . 9) 9)) (((2 . 1) 2) ((2 . 2) 4) ((2 . 3) 6) ((2 . 4) 8) ((2 . 5) 10) ((2 . 6) 12) ((2 . 7) 14) ((2 . 8) 16) ((2 . 9) 18)) (((3 . 1) 3) ((3 . 2) 6) ((3 . 3) 9) ((3 . 4) 12) ((3 . 5) 15) ((3 . 6) 18) ((3 . 7) 21) ((3 . 8) 24) ((3 . 9) 27)) (((4 . 1) 4) ((4 . 2) 8) ((4 . 3) 12) ((4 . 4) 16) ((4 . 5) 20) ((4 . 6) 24) ((4 . 7) 28) ((4 . 8) 32) ((4 . 9) 36)) (((5 . 1) 5) ((5 . 2) 10) ((5 . 3) 15) ((5 . 4) 20) ((5 . 5) 25) ((5 . 6) 30) ((5 . 7) 35) ((5 . 8) 40) ((5 . 9) 45)) (((6 . 1) 6) ((6 . 2) 12) ((6 . 3) 18) ((6 . 4) 24) ((6 . 5) 30) ((6 . 6) 36) ((6 . 7) 42) ((6 . 8) 48) ((6 . 9) 54)) (((7 . 1) 7) ((7 . 2) 14) ((7 . 3) 21) ((7 . 4) 28) ((7 . 5) 35) ((7 . 6) 42) ((7 . 7) 49) ((7 . 8) 56) ((7 . 9) 63)) (((8 . 1) 8) ((8 . 2) 16) ((8 . 3) 24) ((8 . 4) 32) ((8 . 5) 40) ((8 . 6) 48) ((8 . 7) 56) ((8 . 8) 64) ((8 . 9) 72)) (((9 . 1) 9) ((9 . 2) 18) ((9 . 3) 27) ((9 . 4) 36) ((9 . 5) 45) ((9 . 6) 54) ((9 . 7) 63) ((9 . 8) 72) ((9 . 9) 81)) (((10 . 1) 10) ((10 . 2) 20) ((10 . 3) 30) ((10 . 4) 40) ((10 . 5) 50) ((10 . 6) 60) ((10 . 7) 70) ((10 . 8) 80) ((10 . 9) 90)))
[scheme]iotaっぽいの書いてみた
(こんなんだったかなーと思い出しながら)
download
;; (iota cnt init inc (define iota (lambda (cnt . opt) (letrec ((init (if (null? opt) 0 (car opt))) (inc (cond ((or (null? opt) (null? (cdr opt))) 1) (else (cadr opt)))) (iter (lambda (cnt init inc ret) (if (zero? cnt) '() (cons ret (iter (- cnt 1) init inc (+ ret inc))))))) (iter cnt init inc init)))) (iota 10 0 1) ;; => (0 1 2 3 4 5 6 7 8 9) (iota 10 1) ;; => (1 2 3 4 5 6 7 8 9 10) (iota 15) ;; => (0 1 2 3 4 5 6 7 8 9 10 11 12 13 14) (iota 10 0 2) ;; => (0 2 4 6 8 10 12 14 16 18) |
2009/08/10
[Twitter]最近ブログを書いていなかったので
【近況】
- 引っ越した
- 転職した
- しばらく家がオフラインだった
- 転職した会社の椅子が全部アーロンチェア
- MSの資格取った(MCP、MCTS)
- 70-536 (C# 2005) Microsoft .NET Framework 2.0 Application Development Foundation
- 70-528 Microsoft .NET Framework 2.0 Web-Based Client Development for C# 2005
- 70-526 Microsoft .NET Framework 2.0 Windows-Based Client Development for C# 2005
- 取得予定
- 分散アプリケーション(C#)
- Design Enterprise
- 苦手なネットワーク分野の勉強を始めた(仕事で)
- SNMP
- TCP/IP
- 新しく学ぶ必要があるものが増えた
- SharePointServer
- TeamFoundationServer
- VMWare
- Windows Communication Foundation
- SNMP
- 読書
- 6月は14冊読んだ
[JavaScript]srfiのiota
今日は少し寝不足で仕事中に激しい睡魔に襲われたので気分転換に書いた。
Arrayに非破壊的なmap追加してiotaっぽいの書いてfizzbuzzってみた。
Array.prototype.map = function (f) function iota(cnt, init, inc) for (var i = 0, j = init; j < cnt; i++, (j = j + inc)) iota(100, 1).map(function (n){ if (modulo(3) == 0) return ret; |
[KPF]第4回勉強会をやってきた
取り急ぎ。
「SchemeとJavaScriptで数字遊び」と題してライブコーディングをやるつもりでしたが、途中でテンパってしまって自ら強制終了というなんともヒドイ醜態をさらしてきましたorz
ライブコーディングも中途半端だったので取り急ぎコードをさらします。
- 参考はこちら
var inc = function (n) var dec = function (n) var add = function (n, m) var sub = function (n, m) var bgr = function (n, m) var sml = function (n, m) var mul = function (n, m) var div = function (n, m) function fact (n) function tailCallFact(n) function tailCallFact(n) var i = 10; (function () { var i = 10; do{ print("hello"); i--;}while(0 < i);})(); Array.prototype.each = function (f) (function (f){ (function (f){ (function (f){ function map (f, array) map(function (v) Array.prototype.map = function (f) [1,2,3,4,5].map(function(v){print(v);return v;}); |
(define inc (define dec (define add (define sub (define bgr (define sml (define mul (define div (define fact (define tail-call-fact (do ((i 0 (+ i 1))) (let loop ((s 0)) (for-each ((lambda (f) ((lambda (f) (define fact (define tail-call-fact (define e '(define (fact n) (car e) (use srfi-1) |