No Such Blog or Diary

«Prev || 1 | 2 | 3 |...| 1193 | 1194 | 1195 |...| 1252 | 1253 | 1254 || Next»

forall A

Haskell で forall A. A -> A 系の型を作ってみる.まずもっとも単純に.

let x = x

t を型変数として x :: t で,undef 以外の何者でもない気がする.

んで,次.

let f x = x

これで f :: t->t . id 関数なような.

続いて

let y f = f (y f)

これで y :: (t->t)->t . fixpoint 関数とうか Y コンビネータなような.

ついでに,

let g y z = if True then y else z

とすると g :: t->t->t になる.意味のある関数ではないが... さて,これ以降はどうなるのだろうか?

ついでなので,forall a,b,... . a -> b -> ... も作ろうとすると

let f x y = f x y

とかで引数の数を増やせばいくらでもいける.意味はないけど.意味のあるものってどれくらいあるんだろう? undef, id, fixpoint 以外に意味のあるのがあるか?

ふと思ったこと@DT上P244

live を逆さまにすると evil だなぁ.逆さまになる英単語って意識したことなかったので新鮮な感じだ.

ICPC by Haskell

ICPC2005 Regional, Tokyo の問題Bを Haskell で.queue を使ったシミュレーションだけど面倒だから一ターンごとにリスト生成...

 -- Problem B in ACM/ICPC 2005 ASIA Regional Tokyo
 -- 2005/11/04     Brute Force
import Control.Monad
import Debug.Trace
main = getProblems >>= mapM_ (putStrLn.show.solve)
  
getProblems = 
    do
    [m, c, n] <- getNums
    if (n==0 && m==0 && c==0) then return []
       else do
            xs <- replicateM n getEntry
            liftM ((m,c,n,xs):) getProblems
    where 
    getEntry = getNums >> getNums
    getNums = liftM (map read.words) getLine
  
 -- it's better to make each entry of ds the pair of it and its length 
solve (m,c,n,xs) = sl xs 0 (take m $ repeat [])
    where
    sl [] t _ = t
    sl ys t ds = let
                 (hs, ys') = unzip $ map (\x->(head x, tail x)) ys
                 (t', ds') = sl' ds hs
                 in sl (filter (not.(==[])) ys') (t'+t) ds'
    sl' ds = foldl searchOne (0,ds)
    searchOne (t, ds) x = let 
                          p = length $ takeWhile (not.or.map (==x)) ds 
                          ds' =if p<m then take p ds++[filter (not.(==x)) (ds!!p)]++drop (p+1) ds
                               else ds  
                          in insertOne (t+p+1) ds' x
    insertOne t ds x =
        if length (head ds) < c then (t+1, (x:head ds):tail ds)
        else let
             p = length $ takeWhile ((==c).length) ds 
             ds' = if p<m then take p ds++[x:(ds!!p)]++drop (p+1) ds
                   else ds
             p' = length $ takeWhile ((==c).length) ds'
             hds = head ds
             tds = tail ds
             q = p'-1
             tds' =if p'<m then take q tds++[last hds:(tds!!q)]++drop (q+1) tds
                   else tds
             in (t+p+p'+p+5, (x:init hds):tds')

希望が見えたか?

Microsoft から来たメールによると,どうやら theSpokeアカウント を使わずに「Visual Studio 2005 Professional」を手に入れられるようになるらしい.いろいろと文句や問い合わせが行った結果なのかどうかしらんけどありがたいかも.

どうにかならんかなぁ

ASCII24の記事によると『Visual Studio .NET the Spoke Premium 2003』を購入、登録した学生を対象に『Visual Studio 2005 Professional Edition』を追加費用なしでダウンロード提供してくれるらしい.詳しい情報を得ようとだいぶ前に登録したきりの"the Spoke”のサイトへ行ってみるが... 3ヶ月間ログインしないと登録が抹消されますって言われて登録消えているらしい orz. もう一回登録しなおしてもいいものなのかどうか...

シャナXI,終クロ6上下購入

終クロ6上巻600ページ弱,下巻600ページ超え.なんだかもう記録に挑戦? 同時に買ったシャナの5冊分って... とりあえず7巻の1250円が何ページになるか楽しみだ,と.(つーか,文庫本のカバーがかかるのだろうか?)

«Prev || 1 | 2 | 3 |...| 1193 | 1194 | 1195 |...| 1252 | 1253 | 1254 || Next»
Search
Feeds

Page Top