2009-01-01から1年間の記事一覧

インストール済みのモジュールを列挙

メモ ghc-pkgの出力をパーズするより遥かに速い ghciで型を見ながら試行錯誤しちゃうとコードが酷いことになりがち… -- $ ghc --make listmodules.hs -package ghc -hide-package Cabal-1.7.0 -O import DynFlags import ParsePkgConf import Module import …

mark-current-lineのときのエラーとprocess-candidate

async-processをcandidateにした時にanything-mark-current-lineでエラーが出るので、適当に回避するようにした。 あと、非同期プロセス側で(display . real)の形式で出力してprocess-filter内部でreadしてelispのconsにし、anything-insert-match内で他の候…

powerset

import Data.List (inits, tails) inits1, tails1 :: [a] -> [[a]] inits1 = tail . inits tails1 = init . tails segs1, powerSet :: [a] -> [[a]] segs1 = tails1 xs >>= inits1 powerSet xs = []: if null xs then [] else segs1 xs

mapの再発明

(use util.match) (use gauche.test) (define (mymap f . xss) (if (or (null? xss) (any null? xss)) '() (match-let1 (ys . yss) xss (cons (apply f (cons (car ys) (mymap car yss))) (apply mymap f (cdr ys) (mymap cdr yss)))))) (test* "mymap" '(12…

CPSでfoldrとfoldlを汎化する

同様にして とすると とすると foldrの形にして foldrとmapを合成する とfoldlがfoldrで表現できる foldl f e xs = foldr (flip (.) . flip f) id xs e ここでをパラメータにして cfold f z xs = foldr f z xs という式を作り、これにとを代入して計算すると…

とすると より より をfoldrを使って表すと とすると から ここでとを代入して計算すると foldrc f c [] = foldr ((.) . f) c [] -- foldr _ c [] = c foldrc f c [] = c -- foldrc f c xs = foldr ((.) . f) c xs と 仮定 foldrc f c (x:xs) = foldr ((.) .…

srfi-26 cut とか boost::lambda 風の部分適用をelispで

(defun my-lookup-function (object) (loop with count = 0 while (and (symbolp object) (fboundp object)) if (= count 10) do (return nil) else do (progn (setq object (symbol-function object)) (incf count)) finally return object)) (defun my-mac…

anything-yank-selection

id:rubikitch:20090420:1240153246 において候補の anything-realvalue プロパティーが文字列以外のときに、エラーになってしまうので強制的に表示値の方を対象とするようにanything.elを変更してみた。パッチにする方が長くなる場合でもパッチにするべきな…

join

join :: (Monad m) => m (m a) -> m a -- x :: m (m a)と仮定 x :: m (m a) -- mはMonad, (>>=) :: m a' -> (a' -> m b) -> m b -- => { a' = m a, b = aで具現化 } -- (>>=) :: m (m a) -> (m a -> m a) -> m a (x >>=) :: (m a -> m a) -> m a -- id :: a …

HaskellのList Monadを使って論理パズルを解くことができるらしい。 -- choose correctly one from three casckets portia :: [[Bool]] portia = do g <- bool s <- bool v <- bool gc <- bool sc <- bool pc <- bool guard $ (==1) $ length $ filter id [g…

*1236704629* test

test