F# F中列表中倒数第二项#

F# F中列表中倒数第二项#,f#,F#,这就是我最初的想法,在它被调用之前没有任何问题;这到底是怎么回事 let SecLastItem myList= List.rev myList |>printfn myList.[1] 我如何纠正这里的问题?查找列表中倒数第二项的最佳方法是什么?您需要一个带有printfn的格式化程序 let SecLastItem myList= let revList = List.rev myList printfn "%A" revList.[1

这就是我最初的想法,在它被调用之前没有任何问题;这到底是怎么回事

let SecLastItem myList=  
    List.rev myList
        |>printfn myList.[1]

我如何纠正这里的问题?查找列表中倒数第二项的最佳方法是什么?

您需要一个带有
printfn的格式化程序

let SecLastItem myList=  
    let revList = List.rev myList
    printfn "%A" revList.[1]

您需要一个带有
printfn

let SecLastItem myList=  
    let revList = List.rev myList
    printfn "%A" revList.[1]

printfn
首先需要一种格式
printfn“%a”arg

但是还有更多,函数式编程支持不变性,因此
List.rev
在不修改
mylist的情况下返回一个新列表
因此,在myList中打印第二项不会让第二项从一开始就持续一秒(如果它存在,否则会崩溃)

也就是说,你应该把做一些事情和记录/打印这两个功能分开,以便更好地重用和组合

// trySecLastItem : 'a list -> 'a option
let trySecLastItem = List.rev >> List.tryItem 2

// usage
printfn "%d" (trySecLastItem someList) // ex Some 42 or None
现在,
trySecLastItem
返回一个选项,您必须处理该选项(例如使用
defaultArg


printfn
首先需要一种格式
printfn“%a”arg

但是还有更多,函数式编程支持不变性,因此
List.rev
在不修改
mylist的情况下返回一个新列表
因此,在myList中打印第二项不会让第二项从一开始就持续一秒(如果它存在,否则会崩溃)

也就是说,你应该把做一些事情和记录/打印这两个功能分开,以便更好地重用和组合

// trySecLastItem : 'a list -> 'a option
let trySecLastItem = List.rev >> List.tryItem 2

// usage
printfn "%d" (trySecLastItem someList) // ex Some 42 or None
现在,
trySecLastItem
返回一个选项,您必须处理该选项(例如使用
defaultArg

找到列表中倒数第二项的最佳方法是什么

如果不想反转列表,可以使用模式匹配,并在列表长度不足以容纳“倒数第二项”时返回一个选项。像这样的

let rec secondToLast ls = 
    match ls with 
    |   []              -> None
    |   h :: ht :: []   -> Some(h)
    |   h :: t          -> secondToLast t
测试

printfn "%A" (secondToLast [1; 2; 3; 4])
找到列表中倒数第二项的最佳方法是什么

如果不想反转列表,可以使用模式匹配,并在列表长度不足以容纳“倒数第二项”时返回一个选项。像这样的

let rec secondToLast ls = 
    match ls with 
    |   []              -> None
    |   h :: ht :: []   -> Some(h)
    |   h :: t          -> secondToLast t
测试

printfn "%A" (secondToLast [1; 2; 3; 4])

这里的答案应该有助于您理解您的
printfn
问题:。但是,快速解决方案可能是
printfn“%s”myList.[1]
,假设
myList.[1]
字符串。这里的答案应该可以帮助您理解
printfn
问题:。但是,快速解决方案可能是
printfn“%s”myList.[1]
,假设
myList.[1]
字符串。