Clean 2. Clean のC嬬 W决u 徭咼リ`晒 侏クラス 旗方議デ`タ夛 Milner/Mycroft に児づく侏システム マクロ 匯吭侏 t各侏 ダイナミック 7. } let a1 = fread f ?:: String let f = fwrite 'a' f :: File let a2 = fread f ?:: String a1 == a2 <false> 匯佩朕と眉佩朕のY惚が`う 歌孚邑苧來が欧譴襭 ? 12. 匯吭侏をつかった箭 WriteAB :: *File -> File? WriteAB file = fileAB? where fileA = fwritec 'a' file? ? fileAB = fwritec 'b' fileA 13. 匯吭侏の箭 AppendAB :: *File -> (File, File)? AppendAB file = (fileA, fileB)? where fileA = fwritec 'a' file? ? fileB = fwritec 'b' file < エラ`になる > Uniqueness error [tak.icl,23,AppendAB]:?"file" demanded attribute cannot be offered by shared object 17. こういうLにもける WriteAB :: *File -> File? WriteAB file? ? # file = fwritec 'a' file? ? # file = fwritec 'b'? file = file 凋綜侏みたいにこういうLにもかけます。 19. GUI module hello import StdEnv, StdIO Start :: *World -> *World Start world = startIO NDI Void (snd o openDialog undef hello) [] world where hello = Dialog "" (TextControl "Hello world!" [])? ? ? ? ? ? ? ? ? [WindowClose (noLS closeProcess)] 20. 畠各楚晒徨 :: T2 b = C2 (b: b -> b) --?〜? :: T2 b = C2 (A.b: b -> b) ? ? ? ? ? ?-- ? f2:: (T2 b) -> (Int,Char) f2 (C2 g) = (g 1, g 'a') たぶん Haskell と揖じなので冱うことは蒙にない´ 21. 贋壓楚晒徨 :: List = E.a: Cons a List | Nil newlist = Cons 1 Nil Hd :: List -> ? // 床議に侏原けできない Hd (Cons x xs) = x // コンパイルエラ`になる Tl :: List -> List //OK Tl (Cons x xs) = xs 函り竃す圭隈がない L盈された彜Bを燕F辛嬬 22. 塘双 リストと塘双のQ NewArray = {elem elem <- ListA}NewList = {elem elem <-: ArrayA} 塘双の厚仟 {Array5 & [i]=2*i+1 i <- [0..4]} // 塘双の厚仟 {1,3,5,7,9} を竃薦する 塘双のパタ`ン CopyFirst j a=:{[0]=a0} = {a & [j] = a0} 23. マクロ :: Color :== Int Black :== 1 White :== 0 invert :: Color -> Color invert Black = White invert White = Black 25. グラフきQ Clean の吭龍はグラフきQ Clean のプログラムは Start から兵まるグラフ v方はグラフきQえt グラフにしてグラフきQえtをm喘するのが麻 グラフきQえが竃栖なくなったものを屎ミ 26. ? Start :: Int? Start = Length [3,4]? ? Length :: [x] -> Int? Length [a:x] = 1 + Length x? Length [] = 0 27. ? Start ||a: ? ? ? ? ? ? ? ? これは率匯の辛s塀であり、 Start tをm喘する ->? Length [3,4] ||b: ? ? ? このグラフは、畠悶として仟しい辛s塀である ->? 1 + Length [4] ||c: ? ? ? 紗麻處麻徨 + は、2桑朕の哈方のuを崙する ->? 1 + 1 + Length [] ||d: ? また + の2桑朕の哈方 ->? 1 + 1 + 0 ||e: ? ? ? ? ? ? 2桑朕の + の2桑朕の哈方は、 (r)nf にQえられる ->? 1 + 1 ||f: ? ? ? ? ? ? ? ? グラフは、畠悶として仟しい辛s塀である ->? 2 ||g: ? ? ? ? ? ? ? ? ? ? ? ? グラフは、 (r)nf の嶄にある 29. グラフときQえt GRS = {Rule} ; Rule = RedexPattern '->' ContractumPattern [',' Redirection] ? ? ? ? ? | RedexPattern '->' Redirection ; RedexPattern ? ? ? ? = Graph ; ContractumPattern = Graph ; Graph ? ? ? ? ? ? ? = [Nodeid ':'] Node {',' NodeDef} ; Nodeid ? ? ? ? ? ? ?= NodeIdVariable | NodeIdConstant ; Node ? ? ? ? ? ? ? ?= Symbol {Arg} | EmptyNode ; Symbol ? ? ? ? ? ?= Constant ; Arg ? ? ? ? ? ? ? ? ?= Nodeid | [Nodeid ':'] Symbol ? ? ? ? ? ? ? ? ? ? ? ? | [Nodeid ':'] '(' Node ')' ; EmptyNode ? ?= '_|_'; NodeDef ? ? ? ? = Nodeid ':' Node ; Redirection ? ? = Nodeid ':=' Nodeid | Nodeid ; Editor's Notes #3: Hindley-Damas-Milner の ML と`って侏容できない並があるらしい。 ランク 2 の畠各楚晒侏 3.7.4 歌孚が聞喘される栽、プログラマによる苧幣議な侏原けを駅勣とする Haslell は System F お #10: ムスカさん 28 蒙Cv #13: File にアスタリスクがついているのが匯吭侏だという並 fwritec のな篤乙銚仟を軟こすv方に嚥える哈方は匯吭侏でないといけない File&quot;argument 2 of fwritec&quot; attribute at indicated position could not be coerced ^ File #14: オブジェクトk #16: fileA が歌孚すのは fileA によってかきかえ #18: Let-before 塀坪では協方xk徨┘哀薀婉xし # を原ける並によってシャド`イングがおこなわれ #20: Clean のプログラムは Start で_兵 World は翌何彜Bすなわち仝繁伏、嚴帑、すべての基え々が StartIO の 及匯哈方は NDI,SDI,MDI 及屈哈方は兜豚彜B 及眉哈方はv方 (PSt .l) -> (PSt .l) で、ダイアログやメニュ`のようなプロセスコンポ`ネントを伏撹 及膨哈方はプロセス奉來のリスト 及励哈方は World 児云議に匯吭な弊順を鞭け函って Dialog の 及匯哈方はタイトル 及屈哈方は コントロ`ルの撹 及眉哈方はウィンドウ奉來のリスト ダイアログやボタンはハンドルと柵ばれプロセス彜Bを鞭け函って卦す彜Bw卞v方とs #21: A が forall n しくはしらいしさん #22: Haskell と揖吉のことは易墳さんにいてください #23: Clean では猟忖双は Char の塘双です。 gHにおぶ #25: 徭強議にクラスを恬撹しインスタンスのv方を協吶しなくても廖むようにする