我希望能够定义一个类型(比如my_type),它可以将字符串作为键标识为哈希表并映射到整数值.
所以,我试过了
# type my_type = (string, int) Hashtbl.t;;
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试
# let a = Hashtbl.create 100;;
val a : ('_a, '_b) Hashtbl.t = <abstr>
# Hashtbl.add a "A" 12;;
- : unit = ()
# a;;
- : (string, int) Hashtbl.t = <abstr>
Run Code Online (Sandbox Code Playgroud)
最后一行显示(string,int)Hashtbl.t = abstr而不是my_type.我如何确保它将哈希表的类型作为my_type?
因此,我希望从字符串中提取引号(")中的单词(或短语).
例如,假设主字符串是:
The quick brown fox "jumped over" the "lazy" dog
我希望能够提取并存储变量中的单词/短语在引号中,即
jumped over
lazy
应该存储在变量中.输入字符串只引用引号(没有单引号).
我尝试了以下(粗略)代码:
Pattern p = Pattern.compile("\\s\"(.*?)\"\\s");
Matcher m = p.matcher(<String>);
Variable.add(m.group(1));
Run Code Online (Sandbox Code Playgroud)
无论我输入什么,它都会抛出IllegalStateException.我感觉我的正则表达式无法正常工作.任何帮助表示赞赏.
我正在OCaml中实现一个Prolog解释器.我遇到的问题是主要功能.我本质上是试图将我的解释器堆栈存储在函数调用中,并修改此堆栈的副本,然后将其传递给此特定函数调用的递归调用.当该递归调用报告失败时,此原始函数调用应该使用我保持未修改的原始堆栈并进行不同的递归调用(以实现回溯).
现在,这是问题所在.当我的意图只是修改tempstack时,堆栈和临时堆栈(tempstack)都被修改了.我花了好几个小时试图找出问题,我很确定这就是它.这是主要的功能片段..
let rec main stack clauselist counter substitutions variablesinquery answers =
try
let currentsubgoal = Queue.top (Stack.top stack) in
if counter <> List.length clauselist
then
let tempstack = Stack.copy stack in
try
let unifier = mgu1 currentsubgoal (List.nth clauselist counter) in
let newsubgoals =
match List.nth clauselist counter with
Fact(a) -> []
| Rule(Headbody(a,b)) -> b
in
let tempstack = stacknewsubgoals tempstack unifier newsubgoals in
let tempsubs = match substitutions with
S(m) -> match unifier with S(n) -> S(m …Run Code Online (Sandbox Code Playgroud)