0

以下にソースコードがあります。camlp4が見つからないため、機能しないことはわかっていました。現在、私のOSはUbuntuで、emacsエディターにcamlモードを使用しています。このコードを実行できるように、emacs 用に camlp4 を設定するのを手伝ってくれませんか? どうもありがとう

type term = V of string | F of string * term list

let rec symbols = function
  | V x -> [x]
  | F (f, ts) -> f :: [ g | t <- ts; g <- symbols t ]

let rec functions = function
  | V _ -> []
  | F (f, ts) -> f :: [ g | t <- ts; g <- functions t ]
4

2 に答える 2

3

Camlp4 の一部であるリスト内包表記を使用しています。端末エミュレータでこのコードをコンパイルするには、次のように入力する必要があります

ocamlfind c -package camlp4.listcomprehension -syntax camlp4o -c a.ml

コンパイル行は、emacs や camlmode とは関係ありません。ただし、このコードをトップレベルで試したい場合は、次のように入力する必要があります。

$ ocaml
    OCaml version 4.02.1

Findlib has been successfully loaded. Additional directives:
  #require "package";;      to load a package
  #list;;                   to list the available packages
  #camlp4o;;                to load camlp4 (standard syntax)
  #camlp4r;;                to load camlp4 (revised syntax)
  #predicates "p,q,...";;   to set these predicates
  Topfind.reset();;         to force that packages will be reloaded
  #thread;;                 to enable threads

# #camlp4o;;
/home/kakadu/.opam/4.02.1/lib/ocaml/dynlink.cma: loaded
/home/kakadu/.opam/4.02.1/lib/ocaml/camlp4: added to search path
/home/kakadu/.opam/4.02.1/lib/ocaml/camlp4/camlp4o.cma: loaded
        Camlp4 Parsing version 4.02.1

# #require "camlp4.listcomprehension";;
/home/kakadu/.opam/4.02.1/lib/ocaml/camlp4/Camlp4Parsers/Camlp4ListComprehension.cmo: loaded
# type term = V of string | F of string * term list;;
type term = V of string | F of string * term list
# let rec symbols = function
    | V x -> [x]
    | F (f, ts) -> f :: [ g | t <- ts; g <- symbols t ];;
val symbols : term -> string list = <fun>

$ cat ~/.ocamlinit
#use "topfind";;

camlp4 をマシンにインストールするには、Ubuntu またはopam用のコンパイル済みパッケージが必要です。

于 2015-02-28T15:35:35.320 に答える
0

カカドゥさん、どうもありがとう。私は自分の答えを理解していると思います。まず、ubuntu に camlp4 をインストールします。

apt-get install camlp4
apt-get install camlp4-extra

次に、ソース コードにファイル .ocamlinit を作成し、以下を追加します。

#load "dynlink.cma";;
#load "camlp4of.cma";;

これらの手順で上記の問題は解決したと思いますが、

于 2015-03-02T02:14:55.107 に答える