【问题标题】:Error occuring in sml syntax of real.fromstringreal.fromstring 的 sml 语法出现错误
【发布时间】:2015-04-10 07:38:22
【问题描述】:

我是 sml 和 ml-lex 的新手。要将字符串转换为实数,我们使用函数 real.fromstring。这是我的转换代码,其中 yytext 是字符数组或字符串。

getOpt ((Real.fromString(yytext)), 0.0);

我在 ml-lex 中使用上述语法来标记实数。

{real} => (REAL(getOpt ((Real.fromString(yytext)), 0.0)));

但我得到了错误,

math.lex.sml:5.234-5.240 Error: type constructor Assembly.option given 0 arguments, wants 1

请告诉我 fromstring 函数有什么问题。

【问题讨论】:

  • 我认为错误与您显示的代码无关。在您的文件中搜索参数化类型名称 option 的用法,其中一个似乎缺少其参数。
  • @AndreasRossberg 实际上,没有其他选项类型的函数或参数。当我从文件中删除上述代码时,程序运行良好。所以,它似乎指向了这个特定的部分。
  • 那么它可能是 MLlex 生成的代码的一部分。你看过那个吗?错误消息专门讨论了类型构造函数的(错误)应用,而您的 sn-p 中没有。
  • @AndreasRossberg 被误用的类型构造函数是用于Real
  • @benrudgers,我不明白你的意思。 Real 不是类型构造函数,错误消息中也没有提及。问题必须在(生成的?)代码中的其他地方。

标签: string sml ml-lex


【解决方案1】:

警告:我不熟悉ML-Lex

Real.fromString 的语法不正确。这是一个柯里化函数,对getOpt 的调用应为:

 getOpt(Real.fromString yytext, 0.0)

示例代码:

 - getOpt(Real.fromString "1.0", 0.0);
 val it = 1.0 : real
 - getOpt(Real.fromString "a", 0.0);
 val it = 0.0 : real

【讨论】:

  • 这个回复没有意义。只有一个参数的函数不能被柯里化。此外,f xf(x)(f(x)) 是完全一样的,只是有多余的括号。这绝对不是问题。
猜你喜欢
  • 1970-01-01
  • 2013-01-31
  • 2017-11-20
  • 2011-05-12
  • 2013-01-10
  • 1970-01-01
  • 2015-06-01
  • 2014-11-17
  • 2021-11-06
相关资源
最近更新 更多