Hatena::Grouphackathon

zrail (a.k.a. tobira17, h14i, ...) の Learning Log

2016-08-21

[][] どうでもいいメモ 01:36  どうでもいいメモ - zrail (a.k.a. tobira17, h14i, ...) の Learning Log を含むブックマーク はてなブックマーク -  どうでもいいメモ - zrail (a.k.a. tobira17, h14i, ...) の Learning Log

let f = function
    [] -> 0
  | _ :: _ -> 1
;;
(* とか *)
let f x = match x with
    0 -> true
  | _ -> false
;;

みたいな書き方と

let f = function
  | [] -> 0
  | _ :: _ -> 1
;;
(* とか *)
let f x = match x with
  | 0 -> true
  | _ -> false
;;

みたいな書き方ありますよね。'|' の書き方。

見た目以外の差ってあるんすかね?

一行で書くときは上のほうが自然ですよね。

let f = function [] -> 0 | _ :: _ -> 1;;

2017-03-26 追記

Camlのスタイルガイドに「最初のパターンにも書け」って書いてあったし、ギッハブとかで見てもどのマッチでも(コンストラクタとかも)書くのが普通って慣習っぽいな。


ところでStandard MLだと上みたいな余分な'|'は置けないみたいですね。datatypeは知らん。

fun f l = case l
  of [] => 0
   | _ => 1;
(* とか *)
fun f [] = 0
  | f _ = 1;

みたいに書く(っぽい)。

もしかしたら処理系によるのかも知れない(どこかで見たような気がするけど、OCamlと混同しているような気もする)。

一応SML/NJ, MLKit, Mltonは試したけど駄目だったので言語仕様的には不正だとは思うけど。