假设我有一些输入词,例如“føøbær”,我想要一个字母频率为s.t的哈希表。 f→1,ø→2 - 我如何在OCaml中执行此操作?
http://pleac.sourceforge.net/pleac_ocaml/strings.html示例仅适用于ASCII,https://ocaml-batteries-team.github.io/batteries-included/hdoc2/BatUTF8.html没有说明如何从字符串中实际创建BatUTF8.t。
答案 0 :(得分:2)
您引用的BatUTF8
模块将其类型t
定义为string
,因此无需转换:BatUTF8.t
a string
。显然,该模块鼓励您在使用其他功能之前validate
string
let s = "føøbær"
let () = BatUTF8.validate s
let () = BatUTF8.iter add_to_table s
。我想一个正确的操作方式是:
{{1}}
答案 1 :(得分:1)
看一下电池的代码,我发现了of_string_unsafe
,所以也许就是这样:
open Batteries
BatUTF8.iter (fun c -> …Hashtbl.add table c …) (BatUTF8.of_string_unsafe "føøbær")`
但是,因为它被称为“不安全的”#34; (文件不要说明原因),也许这是等价的:
BatUTF8.iter (fun c -> …Hashtbl.add table c …) "føøbær"
至少它适用于此处的示例单词。
Camomile似乎也正确地遍历它:
module C = CamomileLibraryDefault.Camomile
C.iter (fun c -> …Hashtbl.add table c …) "føøbær"
我不知道Camomile和BatUTF8之间的权衡,尽管它们最终会存储不同的类型(BatUChar vs C.Pervasives.UChar)。