gpt4 book ai didi

error-handling - ML。 “Unzipping”元组列表。

转载 作者:行者123 更新时间:2023-12-03 07:50:22 24 4
gpt4 key购买 nike

因此,我有这个元组列表(n = 2),我应该“解压”巫婆,然后创建一个新的列表,如下所示:对于类似val的元组列表,它=(1,“一个”):: (2,“two”):: nil:(int,string)alterlist,解压缩功能将创建一个类似[[1,2 ,,(“one”,“two”)]]的列表。
这是我到目前为止所得到的:

datatype ('a, 'b) alterlist = nil | :: of ('a*'b) * ('a, 'b) alterlist; 
infixr 5 ::

fun build4(x, one, y, two) = (x,one)::((y,two)::nil);

fun unzip(alterlist) =
let
fun extract([], i) = []
| extract((x,y)::xs, i) = if i=0 then x::extract(xs, i)
else y::extract(xs, i);
in
(extract(alterlist, 0))::(extract(alterlist, 1))
end;

但是我遇到了很多错误:
stdIn:48.6-50.26 Error: parameter or result constraints of clauses don't agree [tycon mismatch]
this clause: ('Z,'Y) alterlist * 'X -> 'W
previous clauses: 'V list * 'U -> 'W
in declaration:
extract =
(fn (nil,i) => nil
| (<pat> :: <pat>,i) =>
if <exp> = <exp> then <exp> :: <exp> else <exp> :: <exp>)
stdIn:49.41-49.58 Error: operator and operand don't agree [tycon mismatch]
operator domain: 'Z list * 'Y
operand: ('X,'W) alterlist * int
in expression:
extract (xs,i)
stdIn:50.9-50.26 Error: operator and operand don't agree [tycon mismatch]
operator domain: 'Z list * 'Y
operand: (_ * _,'X) alterlist * int
in expression:
extract (xs,i)
stdIn:48.6-50.26 Error: right-hand-side of clause doesn't agree with function result type [tycon mismatch]
expression: (_,_) alterlist
result type: 'Z list
in declaration:
extract =
(fn (nil,i) => nil
| (<pat> :: <pat>,i) =>
if <exp> = <exp> then <exp> :: <exp> else <exp> :: <exp>)

而且由于我是毫升新手,所以我几乎不知道是什么原因造成的。非常感谢帮助!

最佳答案

我的建议是首先在不使用infix运算符的情况下执行此操作,因为这有点令人困惑。
首先解决它,然后再添加。

这是没有前缀的解决方案:

  datatype ('a,'b)alterlist =   Nil 
| element of 'a*('b,'a)alterlist;

fun unzip (Nil : ('a,'b)alterlist ) = ([],[])
| unzip (ablist : ('a,'b)alterlist) =
let
fun extract Nil = []
| extract (element (curr, Nil)) = curr::[]
| extract (element (curr, element(_,rest))) = curr::(extract rest)
val element (_, balist) = ablist
in
(extract ablist, extract balist)
end;

因此,例如,这样的列表:[“a”,1,“b”,2]将通过以下方式创建:
element ("a", element (1, element ("b", element (2, Nil))));

给你:
val it = element ("a",element (1,element #)) : (string,int) alterlist

*#仅表示列表比显示的更长。

然后,如果您尝试 unzip it;您将获得:
val it = (["a","b"],[1,2]) : string list * int list

如你所愿。

现在尝试将元素更改为:: infix运算符。

祝好运!

关于error-handling - ML。 “Unzipping”元组列表。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23838388/

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