Young の上昇演算子で、同次対象関数 h_λ を使って、シューア関数 s_λ を展開する(またはその逆)をやりたいのだがが、ががが。Murnaghan 式に、上昇・下降演算子ξ^-1,ξで表わして行けるかと思ったが、むしろ符号の問題が面倒で仕切り直しになった。
実行結果
[[2,2,1],[2,3,0],[3,2,0],[3,1,1],[3,2,0],[4,1,0]]
s221=h41-h32-h311+h221
をだしたい。
ソース・プログラム
Haskell は、相変わらず型の指定が難しくて思い通りにならない。大したことはしていないはずなのにw
xi :: Int -> [Int] -> [Int] xi k = xiop (-1) (k - 1) xi' k = xiop 1 (k - 1) xiop :: Int -> Int -> [Int] -> [Int] xiop m k xs = xs0 ++ x : xs1 where xs0 = take k xs x = m + xs !! k xs1 = drop (k + 1) xs r :: (Int,Int) -> [[Int]] -> [[Int]] r (x, y) xs = xs ++ [r_ (x,y) xx | xx <- xs] r_ :: (Int,Int) -> [Int] -> [Int] r_ (x,y) xs = xi' x (xi y xs) lij n = reverse [(i,j)| i<-[1..n], j<-[i+1..n]] s_h :: [(Int,Int)] -> [[Int]] -> [[Int]] s_h [] xs = xs s_h (y:ys) xs = s_h ys (kill (r y xs)) kill [] = [] kill (x:xs) = if head (reverse x) < 0 then kill xs else x:kill xs main = print (s_h (lij 3) [[2,2,1]])