Littlewood の S-function の standardization 2
夏休みの勉強のつづき
fortran66.hatenablog.com
分割{λ}= を S-function とみて、{λ}が弱い減少列になっていない時に弱い減少列に直す。
規則1 尻の 0 は取り去る。
規則2 尻に負数が出たら 0。(ここでは係数項 0 とする)
規則3 隣り合う数の入れ替えは
規則3 より になっているところがあると、となって S-function は 0 になる。
ソース・プログラム
書き直したプログラム
main = print (standard (1, [-5,1,1,1,1,1])) type Partition = [Int] type PartitionF = (Int, Partition) -- Partition with a (phase)factor standard :: PartitionF -> PartitionF standard (f, xs) = if is_std xs then (f, xs) else (standard . std) (f, xs) is_std :: Partition -> Bool is_std [] = True is_std xs = if last xs <= 0 then False else and [x >= y|(x,y) <- zip xs (tail xs)] std :: PartitionF -> PartitionF std (f, [])= (f, []) std (f, xs) = if (last xs) < 0 then (0, []) else if (last xs) == 0 then standard (f, init xs) else std' (f, xs) std' :: PartitionF -> PartitionF std' (f, []) = (f, []) std' (f, [x]) = (f, [x]) std' (f, x:y:xs) = if x == (y-1) then (0, []) else if x < y then (-f, (y-1):(x+1):xs) else (f', x:xs') where (f', xs') = std' (f, y:xs)
実行結果
[-5,1,1,1,1,1] = -[0]= -[] = -1
sh-4.3$ main (-1,[])
対称群の指標を目指して (マーナハン・中山方式)
Murnaghan-Nakayama の式の部品
チェック用
生意気に Maybe モナドを使ってみましたが、くるんだ数値を取り出すのに一苦労w
ソース・プログラム
import Data.Maybe xs3111_6 = [[-3,1,1,1], [3,-5,1,1], [3,1,-5,1], [3,1,1,-5]] xs21111_6 = [[-4,1,1,1,1], [2,-5,1,1,1], [2,1,-5,1,1], [2,1,1,-5,1], [2,1,1,1,-5]] main = print ((cmn . mn') xs3111_6) --xs21111_6) type Partition = [Int] type PartitionF = (Int, Partition) -- Partition with a (phase)factor mn' :: [Partition] -> [PartitionF] mn' xss = map (\xs -> standard (1, xs)) xss cmn :: [PartitionF] -> Int cmn [] = 0 cmn (x:xs) = fromJust (ipf0 x) + (cmn xs) ipf0 :: PartitionF -> Maybe Int ipf0 (f, []) = Just f ipf0 (f, _) = Nothing