gpt4 book ai didi

sml - 处理数据类型列表

转载 作者:行者123 更新时间:2023-12-04 02:15:27 25 4
gpt4 key购买 nike

如何从数据类型列表中获取数据?

我在 SML 中有一个简单的代码:

datatype (''a, 'b) dict = 
Nil
| Dictionary of {key:''a, value:'b} list;

datatype 'dict list =
nil
| :: of 'dict * ('dict list);

val d = (Dictionary [{key="hello",value=[1,2]}]);
fun aux ((x::y):{key:''a, value:'b} list) = [x];

我想从列表的头部获取 key ,但我什至无法将它分开。

当我插入时:

aux d;

我得到下一个错误:

stdIn:2.1-2.6 Error: operator and operand don't agree [tycon mismatch]
operator domain: {key:''Z, value:zY} list
operand: (string,int ?.list) dict
in expression:
aux d

如何拆分列表的头部?我怎样才能得到 key ?

最佳答案

SML 似乎在解释多态函数定义中的数据类型定义时遇到了一些麻烦。我怀疑问题在于它无法在定义中推断出 Nil 的类型。我建议删除该子句并使用数据类型定义:

datatype (''a, 'b) dict = Dictionary of {key: ''a, value: 'b} list;

这样所有的字典都是 Dictionary 模式的实例。如果您需要空字典基础,则函数定义中的基础案例将是模式 Dictionary([])Dictionary(Nil)

您确实需要在函数定义中包含 Dictionary 构造函数。要从第一个条目中提取 key ,您可以执行以下操作:

fun aux (Dictionary(entries)) = #key(hd(entries));

这使用 # 运算符从条目列表的头部提取标记为 key 的字段。您还可以像这样使用更多模式匹配:

fun aux (Dictionary({key = x, value = y}::entries)) = x;

无论哪种情况,您都可以通过示例数据获得:

- aux d;
val it = "hello" : string

关于sml - 处理数据类型列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34333186/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com