# EX-03 补全调用例子的上下文与结果 读者目标:理解后续调用如何使用前一次的结果。依据是当前 guide/09-functions-and-calls.md。函数与类型写法仍采用本书收录提案。 ## 原稿 ```text let amount = discountedPrice(price, discount) return discountedPrice(amount, 5) ``` > 系统会自动搞定,最后拿到结果。 原稿缺少片段位置、函数声明、输入和结果,也没有指出读者应观察的数据依赖。 ## 写作判断 先给依赖方函数声明,再给调用方归属与导入,最后用确定输入推演。无需介绍传输协议;需要保留名称可见性假设和提案状态。 ## 成稿示范 ### 组合两次定价调用 下面采用本书的函数语法提案,展示成功调用的结果依赖。跨 namespace 引用采用目标函数可见、名称无冲突的条件。 代码归属:`alice:shop.pricing`。函数声明: ```endorphin function discountedPrice(price: Int, discount: Int): Int { return price - discount } ``` 该函数从 price 中扣除 discount,并返回整数结果。 代码归属:`bob:shop.checkout`。导入与调用方声明: ```endorphin use alice:shop.pricing function payable(price: Int, discount: Int): Int { let amount = discountedPrice(price, discount) return discountedPrice(amount, 5) } ``` 对于 payable 的输入 100 和 10,预期计算如下: | 步骤 | 输入 | 成功结果 | | --- | --- | --- | | 第一次 discountedPrice | 100、10 | 90,绑定到 amount | | 第二次 discountedPrice | amount 为 90、优惠为 5 | 85,作为 payable 的返回值 | 第二次调用使用第一次的结果。因此,在 amount 的成功结果可用前,后续调用不能把它当作已取得的值使用。上述语义在 inflight 中体现;Preflight 检查调用目标、参数和返回类型等可静态判断的约束。 这里展示成功路径。失败、缺失、未就绪的具体处理语法仍按规范状态记录,不能将它们当作整数 0。仅凭这段数据依赖也不能推出所有函数参数的求值顺序。 ## 反向验证 把输入换成 80 与 7:第一次得到 73,第二次得到 68。如果解释仍声称第一次固定返回 90,说明文字与规则没有连通。 检查例子没有为 Product 或其他 class 增加 get,没有使用未定义的 await、client 或官方导入路径。验证方式是按当前规则手算,未运行 Endorphin 程序。 ## 采用的规则 DOC-004、009、010、011、013、015。代码、说明和结果表共同承担上下文与解释;不要求每个项目都单独显示一段“规则检查”。 [对应任务](../tasks/TASK-04.md) · [示例目录](README.md)