gpt4 book ai didi

.net - 如何将用英语单词编写的数字解析为 F# 中的等效数字?

转载 作者:行者123 更新时间:2023-12-04 23:52:53 25 4
gpt4 key购买 nike

在 F# 中(以函数式/递归方式)最简单的方法是什么,给定一个数字,将其转换为等效的数字?

我现在只看英语。例如:

let parseNumber (s : string) =
match s with
| "One" -> 1
| _ - failwith "Cannot parse"

let result = parseNumber "One Thousand Two Hundred"
// result should be 12000

有没有不涉及大量查找表的方法来做到这一点?

最佳答案

这是一个天真/简单的解决方案,但您需要扩展它以支持所有数字(例如“三万”):

open System

let parseNumber (s : string) =
let parts = s.Split ' ' |> Array.rev |> Array.toList
let rec parseParts (s : string list) =
match s with
| [] -> 0
| "One" :: rest -> 1 + parseParts rest
| "Two" :: rest -> 2 + parseParts rest
| "Three" :: rest -> 3 + parseParts rest
| "Four" :: rest -> 4 + parseParts rest
| "Five" :: rest -> 5 + parseParts rest
| "Six" :: rest -> 6 + parseParts rest
| "Seven" :: rest -> 7 + parseParts rest
| "Eight" :: rest -> 8 + parseParts rest
| "Nine" :: rest -> 9 + parseParts rest
| "Ten" :: rest -> 10 + parseParts rest
| "Hundred" :: t :: rest -> parseParts [t] * 100 + parseParts rest
| "Thousand" :: t :: rest -> parseParts [t] * 1000 + parseParts rest
| _ -> failwith "Ug"
parseParts parts

parseNumber "One" |> printfn "%i"
parseNumber "Two Hundred" |> printfn "%i"
parseNumber "Three Thousand" |> printfn "%i"
parseNumber "Three Thousand Four" |> printfn "%i"
parseNumber "One Thousand Two Hundred" |> printfn "%i"

关于.net - 如何将用英语单词编写的数字解析为 F# 中的等效数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19706603/

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