私はこのOCamlプログラムを持っています
open Core.Std;;
open Printf;;
let all l = List.fold ~f:(&&) ~init:true l;;
let any l = List.fold ~f:(||) ~init:false l;;
let main () = let bools = [true; false; true; true; false; true] in
printf "%b %b\n" (all bools) (any bools);;
main();;
そして2つのメイクファイル、最初は
all: a.out
@true
a.out: fold.cmx
ocamlfind ocamlopt -g -linkpkg -package core -package core_kernel -thread -w -10 fold.cmx
fold.cmx: fold.ml fold.cmi
ocamlfind ocamlopt -g -c fold.cmx -package core -package core_kernel -thread -w -10 fold.ml
fold.cmi: fold.mli
ocamlfind ocamlopt -g -c -package core -package core_kernel -thread -w -10 fold.mli
fold.mli: fold.ml
ocamlfind ocamlc -i -package core -package core_kernel -thread -w -10 fold.ml > fold.mli
clean:
@rm *.cmx *.cmi *.o tests 2>/dev/null || true
の期待される出力を与える a.out を生成しますfalse true
。2つ目は
all: fold
@true
fold: fold.cmx
ocamlfind ocamlopt -g -o fold -linkpkg -package core -package core_kernel -thread -w -10 fold.cmx
fold.cmx: fold.ml fold.cmi
ocamlfind ocamlopt -g -c fold.cmx -package core -package core_kernel -thread -w -10 fold.ml
fold.cmi: fold.mli
ocamlfind ocamlopt -g -c -package core -package core_kernel -thread -w -10 fold.mli
fold.mli: fold.ml
ocamlfind ocamlc -i -package core -package core_kernel -thread -w -10 fold.ml > fold.mli
clean:
@rm *.cmx *.cmi *.o tests 2>/dev/null || true
私のマシンでは、出力なしでハングする折り目を生成します。この 2 つの唯一の違いは、一方がその出力を fold に入れ、もう一方がそれを a.out に入れることです。私の ocaml、ocamlc、ocamlopt、および ocamlfind のバージョン番号はすべて 4.02.1 で、opam show core
バージョンは 112.06.01 です。何が違いを引き起こしているのか知っている人はいますか?