Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F# F中的嵌套列表_F#_Functional Programming - Fatal编程技术网

F# F中的嵌套列表

F# F中的嵌套列表,f#,functional-programming,F#,Functional Programming,我不确定这是否是一个愚蠢的问题,但我在F中的列表上做了一些简单的问题。我无法处理嵌套列表。我的问题是,当我将列表声明为函数的参数时,为什么不能传递嵌套列表?我的意思是嵌套列表也是一个列表。区分简单int或char列表与列表列表有什么好处?如果您有一个需要列表的函数,而您有一个这些类型不匹配的列表。但是,有一个函数可以将列表列表展平 因此: 如果一个函数是泛型函数,并采用参数“a list”,则“a”的类型也可以是list。所以这个函数可以处理列表,或者列表列表,或者列表列表列表,…只要外部类型是

我不确定这是否是一个愚蠢的问题,但我在F中的列表上做了一些简单的问题。我无法处理嵌套列表。我的问题是,当我将列表声明为函数的参数时,为什么不能传递嵌套列表?我的意思是嵌套列表也是一个列表。区分简单int或char列表与列表列表有什么好处?

如果您有一个需要列表的函数,而您有一个这些类型不匹配的列表。但是,有一个函数可以将列表列表展平

因此:


如果一个函数是泛型函数,并采用参数“a list”,则“a”的类型也可以是list。所以这个函数可以处理列表,或者列表列表,或者列表列表列表,…只要外部类型是列表,'a可以是任何东西

例如:

let isNonEmpty = function
    | [] -> false
    | _::_ -> true

isNonEmpty [1; 2; 3]
isNonEmpty [[1]; [2]; [3]]
如果您的函数不依赖于特定类型的列表元素,那么它可能应该是泛型的。如果你发布你的代码,也许有人可以帮你

编辑 未使用内置函数的展平函数的原始版本可能是:

let flatten lst =
    let rec helper = function
        | [] -> []
        | h::tl ->
            match h with
            | Elem x -> x::helper tl
            | List xs -> helper xs @ helper tl
    helper [lst]

对于任何想要了解更多动态类型嵌套列表行为的人,您应该查看my NestedPair模块:


此模块通过使用简单的包装器类型允许任意深度的列表。

任务是编写一个函数,使嵌套列表结构平坦化。为此,我需要一个新的数据类型,它的定义已经在问题中给出了。我正在尝试使用模式匹配编写代码,而不使用列表之类的任何内置函数;;valit:int list=[5]>展平列表[Elem 1;list[Elem 2;list[Elem 3;Elem 4];Elem 5];;val-it:int-list=[1;2;3;4;5]这是我的代码,它还没有工作,代码let flant lst:'a NestedList=let rec helper lst1 lst2=match lst1 with| Elem x->lst2@[x]| List[List x;List xs]->lst2@[x]@helper List xs | List a::Elem b->lst2@[a]@helper b helper lst[]@AnmolYousaf:我用一个示例实现更新了我的答案。非常感谢。我希望更多地体验F的设计。拥有一个同质列表的目的是什么?与F不同,in-scheme列表是非齐次的。哪一个更能实现函数式编程的思想。
let flatten lst =
    let rec helper = function
        | [] -> []
        | h::tl ->
            match h with
            | Elem x -> x::helper tl
            | List xs -> helper xs @ helper tl
    helper [lst]