【问题标题】:SML function on record list记录列表上的 SML 功能
【发布时间】:2012-02-01 10:24:14
【问题描述】:

我正在尝试声明一个函数,该函数将元组内的记录列表作为参数,但语法并不像我希望的那样直观。

这是我想要做的:

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

【问题讨论】:

  • 我想我刚刚意识到我的错误:显然你必须像 {id=ID, privateStack=x::xs} 那样在参数中重新声明记录标签,否则我猜它会将它们视为构造函数。

标签: list record sml smlnj


【解决方案1】:

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

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

会起作用的。

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

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

【讨论】:

    猜你喜欢
    • 2018-09-11
    • 2011-07-10
    • 1970-01-01
    • 2013-12-31
    • 1970-01-01
    • 1970-01-01
    • 2013-10-20
    • 2014-07-15
    • 1970-01-01
    相关资源
    最近更新 更多