1と2のリビジョン間の差分
2011-06-06 01:59:24時点のリビジョン1
サイズ: 630
編集者: furaga
コメント:
2011-06-06 02:42:36時点のリビジョン2
サイズ: 1850
編集者: furaga
コメント:
削除された箇所はこのように表示されます。 追加された箇所はこのように表示されます。
行 27: 行 27:
多分下のように使うと思います。(無限長の素数を作っています。)

{{{
# let rec find_prime n =
          let rec check_prime n i =
                  if n mod i = 0 then false
                  else if n < i * i then true
                  else check_prime n (i + 1) in
          if check_prime n 2 then n
          else find_prime (n + 1);;
val find_prime : int -> int = <fun>
# let primes = unfold (fun x -> Cons (x, find_prime (x + 1))) 2;;
val primes : stream = <abstr>
# head (tail primes);;
- : int = 3
# head (tail (tail primes));;
- : int = 5
# head (tail (tail (tail primes)));;
- : int = 7
# head (tail (tail (tail (tail primes))));;
- : int = 11
# head (tail (tail (tail (tail (tail primes)))));;
- : int = 13
# head (tail (tail (tail (tail (tail (tail primes))))));;
- : int = 17
# head (tail (tail (tail (tail (tail (tail (tail primes)))))));;
- : int = 19
# head (tail (tail (tail (tail (tail (tail (tail (tail primes))))))));;
- : int = 23
}}}

第7回

課題7

載せていいのか微妙な気もしますが、EXISTモジュールの定義は下の通り。

行番号表示/非表示切替
   1 module EXIST: functor (T : sig type 'a t end) ->
   2 sig
   3         type t
   4         type 'b u = {f : 'a. 'a T.t -> 'b}
   5         val pack : 'a T.t -> t
   6         val unpack : t -> 'b u -> 'b
   7 end = 
   8 functor (T : sig type 'a t end) ->
   9 struct
  10         type 'b u = {f: 'a. 'a T.t -> 'b}
  11         type t = {t: 'false_t. 'false_t u -> 'false_t}
  12         let rec pack (x: 'a T.t) = {t = fun x1 -> x1.f x}
  13         let rec unpack x f = x.t f
  14 end;;

多分下のように使うと思います。(無限長の素数を作っています。)

# let rec find_prime n = 
          let rec check_prime n i =
                  if n mod i = 0 then false
                  else if n < i * i then true
                  else check_prime n (i + 1) in
          if check_prime n 2 then n
          else find_prime (n + 1);;
val find_prime : int -> int = <fun>
# let primes = unfold (fun x -> Cons (x, find_prime (x + 1))) 2;;      
val primes : stream = <abstr>
# head (tail primes);;                                                 
- : int = 3
# head (tail (tail primes));;                                          
- : int = 5
# head (tail (tail (tail primes)));;                                   
- : int = 7
# head (tail (tail (tail (tail primes))));;                            
- : int = 11
# head (tail (tail (tail (tail (tail primes)))));;                     
- : int = 13
# head (tail (tail (tail (tail (tail (tail primes))))));;              
- : int = 17
# head (tail (tail (tail (tail (tail (tail (tail primes)))))));;       
- : int = 19
# head (tail (tail (tail (tail (tail (tail (tail (tail primes))))))));;
- : int = 23


Categoryノート

関数・論理型プログラミング実験/課題メモ/第7回 (最終更新日時 2011-06-14 01:48:22 更新者 TakuyaKuwahara)