gpt4 book ai didi

f# - 无法连接函数的结果

转载 作者:行者123 更新时间:2023-12-01 11:16:18 24 4
gpt4 key购买 nike

我的教授让我们在 F# 中实现笛卡尔积。他正在提供一个类型供我们使用:

type SET =
| I of int list // I [1;2;3]
| S of string list // S ["a";"b";"c"]
| IS of (int * string) list // IS [(1, "a");(2, "b")]
| II of (int * int) list // II [(1,2); (3,4); (5,6)]
| SS of (string * string) list // SS [("a","b"); ("c","d")]
| SI of (string * int) list // SI [("a", 1); ("b", 2); ("c", 3)]
| SISI of ((string * int) * (string * int)) list // SISI [(("a", 1), ("b", 2)); (("c", 3), "d", 4))]
| SIIS of ((string * int) * (int * string)) list // SIIS [(("a", 1), (2, "b")); (("c", 3), (4, "d"))]

在此过程中,我们还获得了一个“产品”函数,其行为如下:

let product s1 s2 =
match (s1, s2) with
| (I s1, I s2) -> II (pairs s1 s2)
| (S s1, S s2) -> SS (pairs s1 s2)
| (I s1, S s2) -> IS (pairs s1 s2)
| (S s1, I s2) -> SI (pairs s1 s2)
| (SI s1, IS s2) -> SIIS (pairs s1 s2)
| (SI s1, SI s2) -> SISI (pairs s1 s2)

任务是创建一个函数“pairs”,它组合 SET 元素的笛卡尔积。我们被告知首先要创建一个可以在列表中分配值的函数。我在这里这样做了:

let rec dist a L =
match L with
| [] -> []
| h::t -> (a,h) :: dist a t

到目前为止,我的函数如下所示:

let rec pairs s1 s2 = 
match s1 with
| [] -> []
| h::t -> dist h s2 // AND (pairs t s2)

我不明白我需要如何修改匹配语句的最后一行以正确反射(reflect)我们想要的输出。这将成功完成部分功能,但只是第一位(与正在分发列表头而不是尾部的事实相关)。我如何将此函数在 s1 头部的第一个循环的结果连接到“pairs t s2”,以便在第一段中创建的元素将以防止预期类型冲突的方式匹配第二段?

最佳答案

抱歉,这是一个非常愚蠢的问题。如果任何人都可以帮助类似的情况,可以通过将最后一行写成这样来解决这种情况:

let rec pairs s1 s2 = 
match s1 with
| [] -> []
| h::t -> (dist h s2) @ (pairs t s2)

我之前尝试过使用::运算符进行所有连接,但是对于此操作,这是错误的运算符类型。

关于f# - 无法连接函数的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50634591/

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