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]
是字符串。