17

OCaml で、cons 演算子を単独で参照する方法はありますか?

たとえば、次の例に示すように、 (+)and( * )を関数として使用できますが、関数としてint -> int -> int使用することはできません。(::)'a -> 'a list -> 'a list

# (+) 3 5;;
- : int = 8
# ( * ) 4 6;;
- : int = 24
# (::) 1 [2;3;4];;
Error: Syntax error: operator expected.

(::)以外のような結果を生成する方法はありfun x y -> x::yますか? (::)OCaml で実装されなかった理由を知っている人はいますか?

4

3 に答える 3

11

いいえ。短所 (::) はコンストラクターです。コンストラクターは中置演算子にすることはできません。使用できる中置記号は次のとおりです。

http://caml.inria.fr/pub/docs/manual-caml-light/node4.9.html

いくつかの回避策は(あなたが言及したように)冗長です

(fun x l -> x :: l)

独自の非伝統的な中置コンスを定義する

let (+:) x l = x :: l
于 2013-10-20T14:27:23.633 に答える