2
にコックの抽出にbig_intする
私はnat
私は、ライブラリを使用変換のNATはOCamlの
big_int
に変換抽出をしています(ファイルExtrOcamlNatBigInt)を変更してください、しかし、私は関数nat_case
を定義する方法を見つけることができません。なぜなら、Ocamlのlibary Big_int
には、関数nat_case
がないからです。私はラインのn
でエラーが発生しました
(** val nat_rect :
'a1 -> (Big_int.big_int -> 'a1 -> 'a1) -> Big_int.big_int -> 'a1 **)
let rec nat_rect f f0 n =
let one = Big_int.unit_big_int in
if n = Big_int.zero_big_int then f() else f0 (n - one)
(fun _ ->
f)
(fun n0 ->
f0 n0 (nat_rect f f0 n0)) n
:ここ
Extract Inductive nat => "Big_int.big_int"
[ "Big_int.zero_big_int" "Big_int.succ_big_int" ] "(fun fO fS n ->
let one = Big_int.unit_big_int in
if n = Big_int.zero_big_int then fO() else fS (n - one))".
は、2番目の定義を使用した後の結果である:
Extract Inductive nat => "Big_int.big_int"
[ "Big_int.zero_big_int" "Big_int.succ_big_int" ] "Big_int.nat_case".
は私がでnat_case
のための2番目の定義を定義しようelse f0 (n - one)
:
ファイル「Datatypes.ml」、行68、文字51-52:エラー:この式はBig_int.big_int型を持つが、発現は、私はそれが理由minus
(-
)
int型で期待されていました
私もminus
抽出変更:
Extract Constant minus => "fun n m -> Big_int.max_big_int Big_int.zero_big_int
(Big_int.sub_big_int n m)".
あなたがBig_int
のための機能nat_case
を定義するために私を助けてもらえますか?どうもありがとうございました。
または 'Big_int.pred_big_int N ':によって
を交換してください – newacct