haskell-src-extsの関数の解析結果
perm [] = [[]] perm xs = concatMap f xs where f x = map (x :) (perm (delete x xs)) ----------------- FunBind [Match (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 5, srcColumn = 1}) (Ident "perm") [PList []] Nothing (UnGuardedRhs (List [List []])) (BDecls []), Match (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 6, srcColumn = 1}) (Ident "perm") [PVar (Ident "xs")] Nothing (UnGuardedRhs (App (App (Var (UnQual (Ident "concatMap"))) (Var (UnQual (Ident "f")))) (Var (UnQual (Ident "xs"))))) (BDecls [FunBind [Match (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 7, srcColumn = 10}) (Ident "f") [PVar (Ident "x")] Nothing (UnGuardedRhs (App (App (Var (UnQual (Ident "map"))) (LeftSection (Var (UnQual (Ident "x"))) (QConOp (Special Cons)))) (Paren (App (Var (UnQual (Ident "perm"))) (Paren (App (App (Var (UnQual (Ident "delete"))) (Var (UnQual (Ident "x")))) (Var (UnQual (Ident "xs"))))))))) (BDecls [])]])]
safe p n = all not [ check (i,j) (m,n) | (i,j) <- zip [1..] p ] where m = 1 + length p ----------------- FunBind [Match (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 4, srcColumn = 1}) (Ident "safe") [PVar (Ident "p"),PVar (Ident "n")] Nothing (UnGuardedRhs (App (App (Var (UnQual (Ident "all"))) (Var (UnQual (Ident "not")))) (ListComp (App (App (Var (UnQual (Ident "check"))) (Tuple [Var (UnQual (Ident "i")),Var (UnQual (Ident "j"))])) (Tuple [Var (UnQual (Ident "m")),Var (UnQual (Ident "n"))])) [QualStmt (Generator (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 4, srcColumn = 51}) (PTuple [PVar (Ident "i"),PVar (Ident "j")]) (App (App (Var (UnQual (Ident "zip"))) (EnumFrom (Lit (Int 1)))) (Var (UnQual (Ident "p")))))]))) (BDecls [PatBind (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 5, srcColumn = 27}) (PVar (Ident "m")) Nothing (UnGuardedRhs (InfixApp (Lit (Int 1)) (QVarOp (UnQual (Symbol "+"))) (App (Var (UnQual (Ident "length"))) (Var (UnQual (Ident "p")))))) (BDecls [])])]
f1 a1 = a1 ----------------- FunBind [Match (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 24, srcColumn = 1}) (Ident "f1") [PVar (Ident "a1")] Nothing (UnGuardedRhs (Var (UnQual (Ident "a1")))) (BDecls [])]
f2 = 1 + 2 ----------------- PatBind (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 25, srcColumn = 1}) (PVar (Ident "f2")) Nothing (UnGuardedRhs (InfixApp (Lit (Int 1)) (QVarOp (UnQual (Symbol "+"))) (Lit (Int 2)))) (BDecls [])
firstNLines n cs = unlines $ take n $ lines cs ----------------- FunBind [Match (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 26, srcColumn = 1}) (Ident "firstNLines") [PVar (Ident "n"),PVar (Ident "cs")] Nothing (UnGuardedRhs (InfixApp (Var (UnQual (Ident "unlines"))) (QVarOp (UnQual (Symbol "$"))) (InfixApp (App (Var (UnQual (Ident "take"))) (Var (UnQual (Ident "n")))) (QVarOp (UnQual (Symbol "$"))) (App (Var (UnQual (Ident "lines"))) (Var (UnQual (Ident "cs"))))))) (BDecls [])]
firstNLinesParen n cs = unlines (take n (lines cs)) ----------------- FunBind [Match (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 26, srcColumn = 1}) (Ident "firstNLinesParen") [PVar (Ident "n"),PVar (Ident "cs")] Nothing (UnGuardedRhs (App (Var (UnQual (Ident "unlines"))) (Paren (App (App (Var (UnQual (Ident "take"))) (Var (UnQual (Ident "n")))) (Paren (App (Var (UnQual (Ident "lines"))) (Var (UnQual (Ident "cs"))))))))) (BDecls [])]
ramanujan :: [((Int, Int), (Int, Int))] ramanujan = [(x, y) | (x, y) <- zip s (tail s)] where s = fsort sumcubes 1 ----------------- PatBind (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 29, srcColumn = 1}) (PVar (Ident "ramanujan")) Nothing (UnGuardedRhs (ListComp (Tuple [Var (UnQual (Ident "x")),Var (UnQual (Ident "y"))]) [QualStmt (Generator (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 29, srcColumn = 21}) (PTuple [PVar (Ident "x"),PVar (Ident "y")]) (App (App (Var (UnQual (Ident "zip"))) (Var (UnQual (Ident "s")))) (Paren (App (Var (UnQual (Ident "tail"))) (Var (UnQual (Ident "s")))))))])) (BDecls [PatBind (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 30, srcColumn = 9}) (PVar (Ident "s")) Nothing (UnGuardedRhs (App (App (Var (UnQual (Ident "fsort"))) (Var (UnQual (Ident "sumcubes")))) (Lit (Int 1)))) (BDecls [])])
isSophie :: Integer -> Bool isSophie p = let q = 2 * p + 1 in ordElem q primes ----------------- FunBind [Match (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 33, srcColumn = 1}) (Ident "isSophie") [PVar (Ident "p")] Nothing (UnGuardedRhs (Let (BDecls [PatBind (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 33, srcColumn = 18}) (PVar (Ident "q")) Nothing (UnGuardedRhs (InfixApp (InfixApp (Lit (Int 2)) (QVarOp (UnQual (Symbol "*"))) (Var (UnQual (Ident "p")))) (QVarOp (UnQual (Symbol "+"))) (Lit (Int 1)))) (BDecls [])]) (App (App (Var (UnQual (Ident "ordElem"))) (Var (UnQual (Ident "q")))) (Var (UnQual (Ident "primes")))))) (BDecls [])]
isHappyNumber n | n <= 0 = error ("isHappyNumber: not a positive integer " ++ show n) | otherwise = let m = sum $ map (\ x -> x * x) $ splitInt n in if m == 1 then True else if m == 4 then False else isHappyNumber m ----------------- FunBind [Match (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 36, srcColumn = 1}) (Ident "isHappyNumber") [PVar (Ident "n")] Nothing (GuardedRhss [GuardedRhs (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 37, srcColumn = 3}) [Qualifier (InfixApp (Var (UnQual (Ident "n"))) (QVarOp (UnQual (Symbol "<="))) (Lit (Int 0)))] (App (Var (UnQual (Ident "error"))) (Paren (InfixApp (Lit (String "isHappyNumber: not a positive integer ")) (QVarOp (UnQual (Symbol "++"))) (App (Var (UnQual (Ident "show"))) (Var (UnQual (Ident "n"))))))), GuardedRhs (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 38, srcColumn = 3}) [Qualifier (Var (UnQual (Ident "otherwise")))] (Let (BDecls [PatBind (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 38, srcColumn = 23}) (PVar (Ident "m")) Nothing (UnGuardedRhs (InfixApp (Var (UnQual (Ident "sum"))) (QVarOp (UnQual (Symbol "$"))) (InfixApp (App (Var (UnQual (Ident "map"))) (Paren (Lambda (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 38, srcColumn = 38}) [PVar (Ident "x")] (InfixApp (Var (UnQual (Ident "x"))) (QVarOp (UnQual (Symbol "*"))) (Var (UnQual (Ident "x"))))))) (QVarOp (UnQual (Symbol "$"))) (App (Var (UnQual (Ident "splitInt"))) (Var (UnQual (Ident "n"))))))) (BDecls [])]) (If (InfixApp (Var (UnQual (Ident "m"))) (QVarOp (UnQual (Symbol "=="))) (Lit (Int 1))) (Con (UnQual (Ident "True"))) (If (InfixApp (Var (UnQual (Ident "m"))) (QVarOp (UnQual (Symbol "=="))) (Lit (Int 4))) (Con (UnQual (Ident "False"))) (App (Var (UnQual (Ident "isHappyNumber"))) (Var (UnQual (Ident "m")))))))]) (BDecls [])]
queens number_of_queens = qu number_of_queens where qu 0 = [[]] qu (m+1) = [p++[n] | p<-qu m, n<-[1..number_of_queens], safe p n] ----------------- FunBind [Match (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 4, srcColumn = 1}) (Ident "queens") [PVar (Ident "number_of_queens")] Nothing (UnGuardedRhs (App (Var (UnQual (Ident "qu"))) (Var (UnQual (Ident "number_of_queens"))))) (BDecls [FunBind [Match (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 5, srcColumn = 5}) (Ident "qu") [PLit (Int 0)] Nothing (UnGuardedRhs (List [List []])) (BDecls []), Match (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 6, srcColumn = 5}) (Ident "qu") [PParen (PNPlusK (Ident "m") 1)] Nothing (UnGuardedRhs (ListComp (InfixApp (Var (UnQual (Ident "p"))) (QVarOp (UnQual (Symbol "++"))) (List [Var (UnQual (Ident "n"))])) [QualStmt (Generator (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 6, srcColumn = 29}) (PVar (Ident "p")) (App (Var (UnQual (Ident "qu"))) (Var (UnQual (Ident "m"))))), QualStmt (Generator (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 6, srcColumn = 38}) (PVar (Ident "n")) (EnumFromTo (Lit (Int 1)) (Var (UnQual (Ident "number_of_queens"))))), QualStmt (Qualifier (App (App (Var (UnQual (Ident "safe"))) (Var (UnQual (Ident "p")))) (Var (UnQual (Ident "n")))))])) (BDecls [])]])]
haskell-src-extsのdataの解析結果
data Hoge = Hoge ---------------------- DataDecl (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 12, srcColumn = 1}) DataType [] (Ident "Hoge") [] [QualConDecl (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 12, srcColumn = 13}) [] [] (ConDecl (Ident "Hoge") [])] []
data Hoge1 = Hoge String ---------------------- DataDecl (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 13, srcColumn = 1}) DataType [] (Ident "Hoge1") [] [QualConDecl (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 13, srcColumn = 14}) [] [] (ConDecl (Ident "Hoge") [UnBangedTy (TyCon (UnQual (Ident "String")))])] []
data Hoge2 = Hoge [String] ---------------------- DataDecl (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 14, srcColumn = 1}) DataType [] (Ident "Hoge2") [] [QualConDecl (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 14, srcColumn = 14}) [] [] (ConDecl (Ident "Hoge") [UnBangedTy (TyList (TyCon (UnQual (Ident "String"))))])] []
data Hoge3 = Hoge String | FOO Int ---------------------- DataDecl (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 15, srcColumn = 1}) DataType [] (Ident "Hoge3") [] [QualConDecl (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 15, srcColumn = 14}) [] [] (ConDecl (Ident "Hoge") [UnBangedTy (TyCon (UnQual (Ident "String")))]), QualConDecl (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 16, srcColumn = 14}) [] [] (ConDecl (Ident "FOO") [UnBangedTy (TyCon (UnQual (Ident "Int")))])] []
data Hoge4 = Hoge [String] Int ---------------------- DataDecl (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 17, srcColumn = 1}) DataType [] (Ident "Hoge4") [] [QualConDecl (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 17, srcColumn = 14}) [] [] (ConDecl (Ident "Hoge") [UnBangedTy (TyList (TyCon (UnQual (Ident "String")))), UnBangedTy (TyCon (UnQual (Ident "Int")))])] []
data Hoge5 = Hoge | Foo | Bar ---------------------- DataDecl (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 18, srcColumn = 1}) DataType [] (Ident "Hoge5") [] [QualConDecl (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 18, srcColumn = 14}) [] [] (ConDecl (Ident "Hoge") []), QualConDecl (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 18, srcColumn = 21}) [] [] (ConDecl (Ident "Foo") []), QualConDecl (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 18, srcColumn = 27}) [] [] (ConDecl (Ident "Bar") [])] []
data Hoge6 a = Hoge | Foo a ---------------------- DataDecl (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 19, srcColumn = 1}) DataType [] (Ident "Hoge6") [UnkindedVar (Ident "a")] [QualConDecl (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 19, srcColumn = 16}) [] [] (ConDecl (Ident "Hoge") []), QualConDecl (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 19, srcColumn = 23}) [] [] (ConDecl (Ident "Foo") [UnBangedTy (TyVar (Ident "a"))])] []
data T = C1 {f :: Int, g :: Float} | C2 {f :: Int, h :: Bool} ---------------------- DataDecl (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 21, srcColumn = 1}) DataType [] (Ident "T") [] [QualConDecl (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 21, srcColumn = 10}) [] [] (RecDecl (Ident "C1") [([Ident "f"], UnBangedTy (TyCon (UnQual (Ident "Int")))), ([Ident "g"],UnBangedTy (TyCon (UnQual (Ident "Float"))))]), QualConDecl (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 22, srcColumn = 10}) [] [] (RecDecl (Ident "C2") [([Ident "f"], UnBangedTy (TyCon (UnQual (Ident "Int")))), ([Ident "h"],UnBangedTy (TyCon (UnQual (Ident "Bool"))))])] []
haskell-src-extsのtypeの解析結果
type Cont = [Op] type Test = Hoge type Test1 a = [a] type Test2 = (Cont, String) type Test3 = (Cont, [String]) type Test4 = [(Cont, String)] type Test5 a = a
TypeDecl (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 4, srcColumn = 1}) (Ident "Cont") [] (TyList (TyCon (UnQual (Ident "Op")))) TypeDecl (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 5, srcColumn = 1}) (Ident "Test") [] (TyCon (UnQual (Ident "Hoge"))) TypeDecl (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 6, srcColumn = 1}) (Ident "Test1") [UnkindedVar (Ident "a")] (TyList (TyVar (Ident "a"))) TypeDecl (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 7, srcColumn = 1}) (Ident "Test2") [] (TyTuple Boxed [TyCon (UnQual (Ident "Cont")),TyCon (UnQual (Ident "String"))]) TypeDecl (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 8, srcColumn = 1}) (Ident "Test3") [] (TyTuple Boxed [TyCon (UnQual (Ident "Cont")),TyList (TyCon (UnQual (Ident "String")))]) TypeDecl (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 9, srcColumn = 1}) (Ident "Test4") [] (TyList (TyTuple Boxed [TyCon (UnQual (Ident "Cont")),TyCon (UnQual (Ident "String"))])) TypeDecl (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 10, srcColumn = 1}) (Ident "Test5") UnkindedVar (Ident "a")] (TyVar (Ident "a"))
CentOSの色々メモ
自動ログイン
centos5.5にmoodle1.9のインストール
下準備
moodleはPHPのバージョンが5.2系列でないといけないらしい.
しかしCentOSにyumで入るのは5.1系列なのでまずアップデートした.
(PHPのアップデート)
http://vps.fean.info/archives/server410.html
# wget -q -O – http://www.atomicorp.com/installers/atomic.sh | sh
# yum update
wgetがうまくいかなかったので,オプションつけずにやった.
アップデート後にはそれぞれ以下のバージョンになった.
Updated: mysql.i386 0:5.1.53-2.el5.art perl-Archive-Tar.noarch 1:1.39.1-2.el5.art php.i386 0:5.2.14-2.el5.art php-cli.i386 0:5.2.14-2.el5.art php-common.i386 0:5.2.14-2.el5.art php-ldap.i386 0:5.2.14-2.el5.art spamassassin.i386 1:3.2.5-1.el5.art
インストール
moodleのインストール
Moodle 1.9を http://download.moodle.org/ からダウンロード.
1.9.10+をダウンロードした.
/var/www/htmlに展開(以下では /var/www/html/moodle19).展開コマンドは
# cd # unzip moodle-weekly-19.zip # mv moodle /var/www/html/
データ用ディレクトリを /var/www/moodledata に設定.apache が読み書きできるようにする.アップロードされたファイルはここに入る.
# cd /var/www/ # mkdir moodledata # chown -R apache.apache /var/www/moodledata/
http://localhost/moodle/install.php にアクセスして日本語を選択したら,GDのところで警告が出たため,以下のことをした.
# yum install php-gd
で,
PHPを再コンパイルせずにGDを有効にできた。php-gdというパッケージがあったのでそれをインストールした後(というかされていた)、 /etc/php.d/gd.ini という設定ファイルがあったので、この中のコメントアウトをはずしたら有効になった。(これはCentOS標準のリポジトリからインストールしたから?)
http://www-section.cocolog-nifty.com/blog/2008/06/moodle.html
とやって,再起動したら警告は出なくなった.
mysql
mysqlがどーたら言われたのでインストール
# yum install mysql-server
MySQLサーバーを動かし,
/etc/init.d/mysqld start
rootユーザのパスワード設定
# mysql -u root
mysql> set password for root@localhost=password('rootパスワード');
mysql> exit;
データベース作成(データベース名 moodle,ユーザ名 moodleuser,パスワード ???)
# mysql -u root -p
mysql> show databases;
mysql> CREATE DATABASE moodle DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,CREATE TEMPORARY TABLES,DROP,INDEX,ALTER ON moodle.* TO moodleuser@localhost IDENTIFIED BY '???';
Haskell-src-extsにおけるマイナスの扱い
マイナスはどうなってんのかなということで解析.
結果として別々である.
x = -3 y = 5 - 6
Module (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 1, srcColumn = 1}) (ModuleName "Main") [] Nothing (Just [EVar (UnQual (Ident "main"))]) [] [PatBind (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 1, srcColumn = 1}) (PVar (Ident "x")) Nothing (UnGuardedRhs (NegApp (Lit (Int 3)))) (BDecls []), PatBind (SrcLoc {srcFilename = "<unknown>.hs", srcLine = 2, srcColumn = 1}) (PVar (Ident "y")) Nothing (UnGuardedRhs (InfixApp (Lit (Int 5)) (QVarOp (UnQual (Symbol "-"))) (Lit (Int 6)))) (BDecls [])]