首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FStar函数奇异行为

FStar函数奇异行为
EN

Stack Overflow用户
提问于 2020-06-19 15:41:01
回答 1查看 37关注 0票数 0

以下简单函数被接受为终止函数似乎是不正确的:

代码语言:javascript
复制
val fnc : (nw: nat) -> (ni: nat) -> (ni_max: nat) -> bool
let rec fnc nw ni ni_max =
  match ni with 
  | ni_max -> false
  | _      -> fnc nw (nw + ni) ni_max

令人惊讶的是,函数确实在计算它时终止,例如,由fnc 0 0 1计算并返回false。我错过了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-19 16:07:54

模式的第一个分支中的ni_max是一个新的粘合剂,与函数的参数ni_max无关。您的代码等效于:

代码语言:javascript
复制
let rec fnc nw ni ni_max =
  match ni with 
  | _ -> false
  | _      -> fnc nw (nw + ni) ni_max

这是一个总是返回false的函数。

你可能打算写

代码语言:javascript
复制
let rec fnc nw ni ni_max =
  if ni = ni_max then false
  else fnc nw (nw + ni) ni_max

现在终止检查人员应该抱怨。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62473795

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档