01122009 Haskell
RWHのp.99
右から畳み込むはずなのに、、、不思議な感じがする。
myfilter p xs = foldr step [] xs where step x ys | p x = x:ys | otherwise = ys myfilter odd [1,2,3,4,5,6] [1,3,5]
結局これは
(1:(3:(5:[])))
を評価してんのか。
01122009 Haskell
RWHのp.99
右から畳み込むはずなのに、、、不思議な感じがする。
myfilter p xs = foldr step [] xs where step x ys | p x = x:ys | otherwise = ys myfilter odd [1,2,3,4,5,6] [1,3,5]
結局これは
(1:(3:(5:[])))
を評価してんのか。
openbabelのringsearchがちょっと使いにくい気がする。部分構造をmolオブジェクトで返すメソッドがあっても良いんではないか?
from openbabel import *
obconversion = OBConversion()
obconversion.SetInFormat("smi")
obconversion.SetOutFormat("smi")
obmol = OBMol()
notatend = obconversion.ReadString(obmol,"c1ccccc1CC(=O)C2CCC2C(=O)O")
for r in obmol.GetSSSR():
for a in r._path:
print a
これだと原子のIDしか返さない。
でも縮環チェックしたいんだったら、原子のリストがかぶるかどうかをリングの構成原子のIDをつかって調べればいいのでminimumの環からmaximumの環にするのは難しくはないか。
アトムのリストを渡したら部分構造検索を実行して、結果としてマッチした構造をmolとして返すメソッドがあればいいのか。
29112009 Python
来年の冬に出るのか。
SQLAlchemy: Database Access Using Python (Developer's Library)アイデアは考えるなと同時に注文してた。
基本的にはビジネスってのは自分の手を離れるような仕組みにすることみたいな金持ち父さん的な話だった。ただ、それを会社に属しながら如何にやるか?という場合に、どういうあたりに気を使わなければならないかという内容。
リスクを最小限に抑えながら起業にそなえるには、税金とか就業規則みたいな法律関係にも注意する必要がある。
表紙の
「自分は起業にむいているかどうか」など、考える必要はありません。選択肢を選ぶ権利は、もはや雇用者側にはないからです。何も考えずに、いざというときに備えて、、、
ってあたりにピンと来るものがあれば、読むと面白いかもしれません。
説明だけみるとPro Scalaのほうが面白そうな気がするが両方とも欲しい気分
昨晩から嫌な予感はしていたのだが、朝起きたら喉がザラザラで熱っぽい(+今月まだ有給とってないわ)ってことで、休んだ。
午前中寝てたら、佐川のヒトが本持ってきてくれたので読んだ。
ライフハック系の本というよりは働き方のメッセージ色が強いかな。 アイデア出しの本が読みたいんだったら、本書の参考のとこにあげられている本を何冊が読めばいいんではないかな。
「おわりに」に
断言します。これからはカヤックのように、面白く働くことにこだわる会社や個人が増えてきます
ってのがまずあって、そういう結論をイメージしながら本を組み立てたのかなと思った。
会社があってそこにヒトが集まるんじゃなくて、ヒトが集まって面白いことをやるから結果法人格としての会社という体裁になんだろうなぁと。
27112009 Haskell
プログラミングHaskell8章
本の通りにdo記法使うと動かなかったのでbindをつかってせっせと書いた。そのおかげで、←とか>>=見るとラムダ式が意識できるようになってきた。
第14回 関数脳のつくり方 Second Season 〜モナドで悟りをひらく〜
関数型言語で「プログラムの実行順序を保証」したり
import Char type Parser a = String -> [(a,String)] myreturn :: a -> Parser a myreturn v = \inp -> [(v,inp)] myfailure :: Parser a myfailure = \inp -> [] myitem :: Parser Char myitem = \inp -> case inp of [] -> [] (x:xs) -> [(x,xs)] parse :: Parser a -> String -> [(a,String)] parse p inp = p inp (>>==) :: Parser a -> (a -> Parser b) -> Parser b p >>== f = \inp -> case parse p inp of [] -> [] [(v,out)] -> parse (f v) out -- p :: Parser (Char,Char) -- p = myitem >>== \x -> -- myitem >>== \y -> -- myitem >>== \z -> -- myreturn (x,z) (+++) :: Parser a -> Parser a -> Parser a p +++ q = \inp -> case parse p inp of [] -> parse q inp [(v,out)] -> [(v,out)] sat :: (Char -> Bool) -> Parser Char sat p = myitem >>== \x -> if p x then myreturn x else myfailure digit :: Parser Char digit = sat isDigit lower :: Parser Char lower = sat isLower upper :: Parser Char upper = sat isUpper letter :: Parser Char letter = sat isAlpha alphanum :: Parser Char alphanum = sat isAlphaNum char :: Char -> Parser Char char x = sat (== x) string :: String -> Parser String string [] = myreturn [] string (x:xs) = char x >>== \_ -> string xs >>== \_ -> myreturn (x:xs) many :: Parser a -> Parser [a] many p = many1 p +++ myreturn [] many1 :: Parser a -> Parser [a] many1 p = p >>== \v -> many p >>== \vs -> myreturn (v:vs) ident :: Parser String ident = lower >>== \x -> many alphanum >>== \xs -> myreturn (x:xs) nat :: Parser Int nat = many1 digit >>== \xs -> myreturn (read xs) space :: Parser () space = many (sat isSpace) >>== \_ -> myreturn () token :: Parser a -> Parser a token p = space >>== \_ -> p >>== \v -> space >>== \_ -> myreturn v identifer :: Parser String identifer = token ident natural :: Parser Int natural = token nat symbol :: String -> Parser String symbol xs = token (string xs) -- 8-1 -- int :: Parser Int int = char '-' >>== \_ -> nat >>== \n -> myreturn (-n) +++ nat -- -- -- -- 8-2 -- comment :: Parser () comment = string "--" >>== \_ -> many (sat (/= '\n')) >>== \_ -> myreturn () -- -- --
26112009 Python matplotlib
Pythonの描画ライブラリであるmatplotlibの本が出てた。
Matplotlib for Python Developers: Build Remarkable Publication Quality Plots the Easy Way欲しいのう
ダイレクトメッセージを送れるかどうかで判断するみたいなつぶやきが流れてたので。
setでごにょれば良かろうと。
import twitter
api = twitter.Api(username='user',password='pass')
friends = set([u.name for u in api.GetFriends()])
followers = set([u.name for u in api.GetFollowers()])
print "follow and followed: " + ",".join(list(friends.intersection(followers)))
print "not follow but followed: " + ",".join(list(followers.difference(friends)))
print "follow but not followed: " + ",".join(list(friends.difference(followers)))