OCamlでのゴルフのヒント


9

他の「言語xyzでゴルフするためのヒント」の品揃えに触発されました。通常どおり、一般的なプログラミングではなく、OCamlに固有のヒントのみを提案してください。回答ごとに1つのヒントを入力してください。


1
明らかなヒントをいくつか追加してもよろしいですか?
エドゥアール2015

回答:


3

一致の代わりに関数を使用する

let rec f=function[]->0|_::t->1+f t

より短い

let rec f x=match x with[]->0|_::t->1+f t

2

開始を使用しない[…]終了

この:

begin […] end 

これは常にこれと同義です:

([…])

1

複数の変数または関数を一度に定義する

タプルのおかげで、一度に複数の変数を定義できます。そして、関数は一流の市民なので…:

let f,g=(fun x->x+1),fun x->2*x

ただし、次のように書くことはできません。

let f,g=(fun x->x+1),fun x->2*f x

エラー:非バインド値f

残念ながら、以下を使用して問題を回避することはできませんrec

let rec f,g=(fun x->x+1),fun x->2*f x

エラー:変数のみが左辺として許可されています let rec


1

エクスプロイトcurryied機能を

OCamlの関数はカリー化されています。その事実を時々利用することは有用かもしれません。

let n y=f x y

書くことができます

let n=f x

算術演算が必要な場合は、それらを括弧で囲んで、標準の前置関数のように動作させることができます。(+)(-)、...

let n=(+)1;;
n 3;;

- : int = 4

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.