记录清单上的SML功能 [英] SML function on record list

查看:86
本文介绍了记录清单上的SML功能的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试声明一个函数,该函数将元组内的记录列表作为参数,但是语法不如我所希望的直观.

I'm trying to declare a function that takes a list of records inside a tuple as an argument but the syntax is not as intuitive as I would have liked.

这就是我想要做的:

type Player = {id:int, privateStack:int list};
fun foo(({id, x::xs}:Player)::players, ...) = (* wrong syntax *)
    (* do something *)

推荐答案

模式匹配需要将记录字段绑定到某些值,因此您必须使用显式记录语法.因此,

Pattern matching requires binding record fields to some values so you have to use explicit record syntax. Therefore,

fun foo(({id = id, privateStack = x::xs})::players, ...) =
    (* do something *)

会工作的.

请注意,上面的模式匹配并不详尽,请注意players的空白列表和privateStack的空白列表:

Note that above pattern matching is not exhaustive, be aware of empty list for players and empty list for privateStack:

fun foo([], ...) = (* do something *)
   | foo({id = id, privateStack = []}::players, ...) = (* do something else *)
   | foo({id = id, privateStack = x::xs}::players, ...) = (* do something else *)

这篇关于记录清单上的SML功能的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆