Code Aquarium

minazoko's blog -*- 水底のブログ -*-

(PowerShell)ダイナミックスコープなReduce

$1. 関数内再帰関数で Join-Paths 最初にちょっと寄り道。 前回エントリでは、引数を配列にして3つ以上のパス要素連結関数を書きました。 Join-Path 同様に可変長の引数にすることは出来ないでしょうか? できました。 function Join-Paths{ function rec (…

(PowerShell)配列の先頭要素だけ取り出す

分配束縛っぽい記述を使うと、配列の先頭要素と残りを分割できます。 $x = 1..5 $y,$z = $x $y #=> 1 $z #=> 2 3 4 5Lispの car と cdr の動作ですね。これは再帰処理と相性が良い形です。 例えば、PowerShellのパス文字列連結コマンドレット Join-Path は2…

(PowerShell) 配列を横一列に表示する

PowerShellでは、デフォルトでは配列は要素ごとに改行されて表示されます。 PS C:\> 1..5 1 2 3 4 5Write-Host を使うと、横一列に出力されます。 PS C:\> Write-Host (1..5) 1 2 3 4 5また、文字列内で変数展開を行うとスペースで連結した一行の文字列が得…

(Clojure)JavaFX2とseesawの連携

JavaFX2には JFXPanel という swing向けのコントロールがあります。 これをswingのJFrameに載せると、swing内で動くJavaFX2アプリが作れます。swingでできるってことは seesawでもできるはずですよね。 というわけで試してみました。「連携」というほどのこ…

それ sequence-m でできるよ

はじめに clojure.algo.monadsを使ってみました。 お題 例えば”Hail2U”という文字列を元にして、["hail2u","hail2U","haiL2u","haiL2U","haIl2u","haIl2U","haIL2u","haIL2U" ,"hAil2u","hAil2U","hAiL2u","hAiL2U","hAIl2u","hAIl2U","hAIL2u","hAIL2U" ,"H…

..

あまりにもぐだぐだな上、誤情報も含まれていたため削除します。

Java 8 を関数型っぽく使うための(中略)をClojureでやってみた

はじめに このエントリーは、Java8のlambda式についてのエントリー派生シリーズへの便乗記事です。まだ下の記事を見ていない方はリンク先を見ておいてください、そうしないと意味がわかりません。 Java 8を関数型っぽく使うためのおまじない - きしだのはて…

(Clojure)短絡評価なsome->マクロ

ぼくのかんがえたスレッディングマクロその2 評価がnilになったら即抜けるsome->とsome->> (ns cool-macros (:refer-clojure :exclude [some-> some->>])) (defmacro ^:private some->* [form & exprs] (let [[e-first & exprs] exprs [e-last & exprs] (re…

clojure.inspectorをちょっとだけ見やすく

(require '[clojure.inspector :as insp]) (import 'java.awt.Font) (defn find-children [^java.awt.Component co ^Class cls] (some->> co .getComponents (filter #(instance? cls %)))) (defn custom-inspect-tree [data] (let [font (Font. "VL Gothic"…

ぼくのかんがえたスレッディングマクロ

cond-> も as-> みたいにシンボルを指定できたらいいと思いました。 (defmacro cond-as-> [init name & forms] (when-not (even? (count forms)) (throw (IllegalArgumentException. "require an even number of forms"))) (if-not forms init `(let [~name …

Clojureでファイルパスの正規化

(def user-home-path (System/getProperty "user.home")) (defn get-canonical-path [^String path] {:pre [path]} (-> (cond-> path (.startsWith path "~") (.replaceFirst "~" user-home-path)) java.io.File. .getCanonicalPath)) ClojureというかJavaの…

instaparseでCSVパーサーを書いてみる

instaparseは文脈自由文法(CFG)による構文解析ライブラリです。ほぼそのままのEBNFと正規表現を使えます。ここでは手ごろなところでCSVの解析器を作ってみます。 leiningenプロジェクト依存モジュール 何はともあれproject.clj。最低限必要なライブラリは以…

some->でヌルポ回避

どってことないことですが、ふと気づいた。 (when-not (nil? obj) (.method obj)) は (some-> obj .method) と書けば短いしobjの出現を一回だけにできるね。*1 *1:もしかして常識だったり?

Emacs Lisp で as-> マクロ

Clojure1.5のas->マクロをelispで。 (defmacro as-> (expr name &rest forms) `(let* ((,name ,expr) ,@(mapcar '(lambda (f) `(,name ,f)) forms)) ,name)) 本家Clojureの実装はこんな感じ (defmacro as-> [expr name & forms] `(let [~name ~expr ~@(inter…

Clojure1.5 の New Thread Macro

Githubを眺めていたらClojure1.5でcoreに追加される新しいスレッドマクロが目にとまりました。スレッドマクロ大好きなのでちょっと気になり試してみました。 ● as-> これが一番分かりやすく出番もありそうです。 (require '[clojure.string :as string]) (as…

Clojure-Pyでファイルリード

●テキストファイルを読む 行単位で遅延リードしてテキスト処理。 ファイル終了判定は空文字列との一致判定。pythonのreadlineは行末に改行をくっつけたまま読み込むのでファイル終端でなけれな空行でも空文字列にはならない。 (defn repeatedly [f] (lazy-se…

Clojure-PyでWin32API

Clojureからネイティブライブラリ Pythonにはctypesというネイティブライブラリをダイレクトに扱うモジュールがあります。ということはClojure-Pyを使うとClojureからネイティブが呼べるということになりますね。 ;;-*- coding:utf-8 -*- (ns sample-ctypes …

遅延リスト遊び - Emacsで学ぶLazyな世界(後編)

前編に引き続き、使うのはEmacs Lispです。 -*- 遅延リスト -*- ものすごく基本的なことを書きます。 二つのオブジェクトのペアを作る関数consがあります。このペアはドット対とも呼ばれますが、cdr部がnilの場合、真のリスト*1になります。またcdr部が真の…

遅延リスト遊び - Emacsで学ぶLazyな世界(前編)

(これは、Lisp Advent Calendar 2012の20日目の記事です。)長いので前後編に分けます。お暇な方はどうぞ。 -*- delayとforce -*- 正格評価の言語でもクロージャがあれば遅延評価を行うことができます。計算式をクロージャに包んでしまえば、クロージャが呼…

もう一度、関数の引数をlexical-letするマクロ

昨日の「関数の引数をlexical-letするマクロ」が中途半端だったので、拡張してみた。 組み込みdefunと, clモジュールのdefun*のそれぞれに対応したものを作成。ヘルプで見たときにdocstringの位置が明示されるように、引数の調整もしました。 (require 'cl) …

関数の引数をlexical-letするマクロ

◎続編を書きましたのでそちらもよろしく。Emacs Lispを書いていると関数の引数が動的スコープで困ることがある。で、書いてみたマクロ (require 'cl) (defmacro* defun% (name args &rest rest) (let* ((docstr (when (and rest (stringp (car rest))) (car …

ClojureのスレッドマクロをSchemeで

Clojureのマクロ -> と ->> のScheme版です。動作確認はRacketでしましたが、syntax-rulesしか使ってないので他の処理系でも動くかな? apply->とapply->>は補助用のヘルパマクロです。似たような構造が並んでいるので共通部分を共通化することも考えました…

Windows8ホストでのVirtualBoxネットワーク設定

[2012/12/22 追記] VirtualBoxのバージョンアップ(4.2.6)を行ったところ、ブリッジアダプタが選択できるようになりました。 VirtualBox(4.2.4)をWindows7にインストールして利用していましたが、ホストOSをWindows8へアップグレードしたところ、ネットワーク…

Clojureで掛け算テーブル

お題はこちら 書きました。少し冗長でしょうか。 条件文はあえて言葉足らずに書きました。「負の数を含めるのか?」という疑問が出ると思いますがそこは各々の判断に任せました。条件に忠実にしたがえば負の数も範囲にはいるはずですが。 ->> 簡単に解説 mak…

【お題】掛け算テーブルを作成せよ

お題:次の条件をみたすプログラムを作成してください。 二つの整数 n, m (n <= m)をパラメータであたえるものとする。 n 以上 m 以下のすべての整数について、九九表の要領でテーブルを作成する。 すべての列が綺麗に縦に並ぶように位置合わせを行うこと。 …

JVM系言語比較にJythonが無いので書いてみた

新規記事:「関数型の考え方: 実にさまざまな変換処理」を公開いたしました ibm.co/P6AxBQ #Java #dWJapan— developerWorks Japanさん (@dW_Japan) 10月 25, 2012 このお題だと「Jythonならでは」という特色は出ないですね。CPythonでもIronPythonでも同じコ…

ClojureでJavaのpackage-info.javaを一括生成

少し前のネタですが twitter TLで見かけたので書いてみました。 お題: http://npnl.hatenablog.jp/entry/2012/08/17/014930 出力ファイルの文字コード指定可能 パスセパレータはシステム値からとるのでOS非依存。 改行コードもシステムプロパティから取得(…