OCaml核心操作出现未绑定值错误的原因咨询
OCaml核心语法元素提示「未绑定值」问题排查
编写OCaml代码时遇到异常错误:核心语言元素raise、=、+均被提示为「未绑定值」,相关代码如下:
原第一段代码
type id = string let rec lookup (id: id) (storage: (id * 'a) list): 'a = match storage with | [] -> raise Not_found | (id', element)::storage' - if id = id' then element else lookup id storage'
原第二段代码
let rec interpretExpression (expression: expression) (valueStorage: value_storage) (functionStorage: function_storage) : int = match expression with | Id id -> lookup id valueStorage | Int value -> value | Add (expression1, expression2) - let value1 = interpretExpression expression1 valueStorage functionStorage and value2 = interpretExpression expression2 valueStorage functionStorage in value1 + value2 | FuncApp id - let expression' = lookup id functionStorage in interpretExpression expression' valueStorage functionStorage
问题根源
代码存在模式匹配箭头书写不完整的语法错误:
- 第一段中
| (id', element)::storage' -的箭头仅写了-,正确应为->; - 第二段中
| Add (expression1, expression2) -、| FuncApp id -同样缺失了箭头的>部分。
OCaml要求模式匹配分支必须用->分隔模式与执行代码,箭头书写不完整会导致编译器无法正确解析语法结构,进而将后续代码中的核心语法元素误判为未绑定标识符。
修正后的代码
第一段修正版
type id = string let rec lookup (id: id) (storage: (id * 'a) list): 'a = match storage with | [] -> raise Not_found | (id', element)::storage' -> if id = id' then element else lookup id storage'
第二段修正版
let rec interpretExpression (expression: expression) (valueStorage: value_storage) (functionStorage: function_storage) : int = match expression with | Id id -> lookup id valueStorage | Int value -> value | Add (expression1, expression2) -> let value1 = interpretExpression expression1 valueStorage functionStorage and value2 = interpretExpression expression2 valueStorage functionStorage in value1 + value2 | FuncApp id -> let expression' = lookup id functionStorage in interpretExpression expression' valueStorage functionStorage
修正箭头后,编译器可正常解析语法,核心元素的未绑定值错误会自动消失。
内容的提问来源于stack exchange,提问作者Little Helper
相关产品推荐
相关产品推荐

