トップ
新規
単語検索
ヘルプ
活動記録/第6回
をテンプレートにして作成
開始行:
//*予定のみ [#d16f4ec7]
--
- 日時 :2006/6/19 (Mon)
- 場所 :名大 理学部1号館(多元数理科学研究科) 307室?
- 時刻 :18:00〜19:30
- 参加者:??名
- 話題 :
--value restriction と 副作用の関係について
--テキストが終わったらどうする?
---ライブラリ/マニュアルの引き方を知っておきたい ← 小笠原...
---''OBJECTIVE'' な OCaml を知りたい
---ゲームを作る (さめがめとか)
---ocamlp4
---Haskell / Parsec 勉強会へシフト
---SICPまたはTAPLをやる ← 英語はヤメてという意見も
---水野くんがCGIフレームワークを作る
---圏論勉強会? ← 群論が『具体的』とかいう人とは友達にな...
- Chapt. 6 Ex 10のf4おかしいんじゃね?の件について聞いて...
- Thanks!! -- [[けいご]] &new{2006-06-21 (水) 03:57:20};
- ユーザーマニュアルに言語の定義やスタンダードライブラリ...
- そういえば、TKベースのocamlbrowserという便利な標準ツー...
----
#contents
*Chapter 6. Exercise続き [#b24a5ea9]
**Exercise 10 (末次)[#g3e08704]
次の型をもつ関数を定義せよ.
'a * ('b, 'c) sum -> ('a * 'b, 'a * 'c) sum
let f1 (x, y) =
match y with
Left n -> Left (x, n)
| Right n -> Right (x, n);;
('a, 'b) sum * ('c, 'd) sum -> (('a * 'c, 'b * 'd) sum, (...
let f2 (x, y) =
match (x, y) with
(Left n, Left m) -> Left (Left (n, m))
| (Left n, Right m) -> Right (Left (n, m))
| (Right n, Left m) -> Right (Right (n, m))
| (Right n, Right m) -> Left (Right (n, m));;
('a -> 'b) * ('c -> 'b) -> ('a, 'c) sum -> 'b
let f3 (x, y) = function
Left m -> x m
| Right m -> y m;;
(('a, 'b) sum -> 'c) -> ('a -> 'c) * ('b -> 'c)
let f4 f = (fun x -> f(Left x), fun y -> f(Right y));;
('a -> 'b, 'a -> 'c) sum -> ('a -> ('b,'c) sum)
let f5 = function
Left l -> (fun x -> Left (l x))
| Right r -> (fun x -> Right (r x));;
ただし,
type ('a, 'b) sum = Left of 'a | Right of 'b;;
*** f4を突っ込んだときの表示について [#ic56b447]
(('a, 'b) sum -> 'c) -> ('a -> 'c) * ('b -> 'c)
# type ('a, 'b) sum = Left of 'a | Right of 'b;;
type ('a, 'b) sum = Left of 'a | Right of 'b
# let f4 f = (fun x -> f(Left x), fun y -> f(Right y));;
val f4 : (('a, 'b) sum -> 'c) -> 'a -> 'c * ('b -> 'c) =...
テキスト3.2.3によると,* は -> より強く結合するとあるので,
val f4 : (('a, 'b) sum -> 'c) -> ('a -> 'c) * ('b -> 'c)...
こうでないと意図している型を意味しないのでは?
%%??pretty-printerのバグ?%%それとも?~
*** f4を突っ込んだときの表示について(続報) [#j1824f84]
~ガリグ先生曰く,
","の方がより強く結合するので,
このf4の定義がそもそも課題の指定する型になっていない.~
すなわち,現行のf4の定義は次のものと同じ事になっている
_ _
# let f4 f = (fun x -> ( f(Left x), fun y -> f(Right y) ...
val f4 : (('a, 'b) sum -> 'c) -> 'a -> 'c * ('b -> 'c) =...
課題の要件を満たすようにするためには,
次のようにfun x -> ...を括弧でくくる必要がある.
_ _
# let f4' f = ((fun x -> f(Left x)), fun y -> f(Right y)...
val f4' : (('a, 'b) sum -> 'c) -> ('a -> 'c) * ('b -> 'c...
*Chapter 7. Exercise [#bfc07932]
**[[活動記録/第7回]] に移動しました [#qc3e1f84]
終了行:
//*予定のみ [#d16f4ec7]
--
- 日時 :2006/6/19 (Mon)
- 場所 :名大 理学部1号館(多元数理科学研究科) 307室?
- 時刻 :18:00〜19:30
- 参加者:??名
- 話題 :
--value restriction と 副作用の関係について
--テキストが終わったらどうする?
---ライブラリ/マニュアルの引き方を知っておきたい ← 小笠原...
---''OBJECTIVE'' な OCaml を知りたい
---ゲームを作る (さめがめとか)
---ocamlp4
---Haskell / Parsec 勉強会へシフト
---SICPまたはTAPLをやる ← 英語はヤメてという意見も
---水野くんがCGIフレームワークを作る
---圏論勉強会? ← 群論が『具体的』とかいう人とは友達にな...
- Chapt. 6 Ex 10のf4おかしいんじゃね?の件について聞いて...
- Thanks!! -- [[けいご]] &new{2006-06-21 (水) 03:57:20};
- ユーザーマニュアルに言語の定義やスタンダードライブラリ...
- そういえば、TKベースのocamlbrowserという便利な標準ツー...
----
#contents
*Chapter 6. Exercise続き [#b24a5ea9]
**Exercise 10 (末次)[#g3e08704]
次の型をもつ関数を定義せよ.
'a * ('b, 'c) sum -> ('a * 'b, 'a * 'c) sum
let f1 (x, y) =
match y with
Left n -> Left (x, n)
| Right n -> Right (x, n);;
('a, 'b) sum * ('c, 'd) sum -> (('a * 'c, 'b * 'd) sum, (...
let f2 (x, y) =
match (x, y) with
(Left n, Left m) -> Left (Left (n, m))
| (Left n, Right m) -> Right (Left (n, m))
| (Right n, Left m) -> Right (Right (n, m))
| (Right n, Right m) -> Left (Right (n, m));;
('a -> 'b) * ('c -> 'b) -> ('a, 'c) sum -> 'b
let f3 (x, y) = function
Left m -> x m
| Right m -> y m;;
(('a, 'b) sum -> 'c) -> ('a -> 'c) * ('b -> 'c)
let f4 f = (fun x -> f(Left x), fun y -> f(Right y));;
('a -> 'b, 'a -> 'c) sum -> ('a -> ('b,'c) sum)
let f5 = function
Left l -> (fun x -> Left (l x))
| Right r -> (fun x -> Right (r x));;
ただし,
type ('a, 'b) sum = Left of 'a | Right of 'b;;
*** f4を突っ込んだときの表示について [#ic56b447]
(('a, 'b) sum -> 'c) -> ('a -> 'c) * ('b -> 'c)
# type ('a, 'b) sum = Left of 'a | Right of 'b;;
type ('a, 'b) sum = Left of 'a | Right of 'b
# let f4 f = (fun x -> f(Left x), fun y -> f(Right y));;
val f4 : (('a, 'b) sum -> 'c) -> 'a -> 'c * ('b -> 'c) =...
テキスト3.2.3によると,* は -> より強く結合するとあるので,
val f4 : (('a, 'b) sum -> 'c) -> ('a -> 'c) * ('b -> 'c)...
こうでないと意図している型を意味しないのでは?
%%??pretty-printerのバグ?%%それとも?~
*** f4を突っ込んだときの表示について(続報) [#j1824f84]
~ガリグ先生曰く,
","の方がより強く結合するので,
このf4の定義がそもそも課題の指定する型になっていない.~
すなわち,現行のf4の定義は次のものと同じ事になっている
_ _
# let f4 f = (fun x -> ( f(Left x), fun y -> f(Right y) ...
val f4 : (('a, 'b) sum -> 'c) -> 'a -> 'c * ('b -> 'c) =...
課題の要件を満たすようにするためには,
次のようにfun x -> ...を括弧でくくる必要がある.
_ _
# let f4' f = ((fun x -> f(Left x)), fun y -> f(Right y)...
val f4' : (('a, 'b) sum -> 'c) -> ('a -> 'c) * ('b -> 'c...
*Chapter 7. Exercise [#bfc07932]
**[[活動記録/第7回]] に移動しました [#qc3e1f84]
ページ名: