can't find function arguments in clause Error: operator is not a function
can't find function arguments in clause Error: operator is not a function
我有这两个功能...
fun lessThan (a, b) (c, d) = if ((real a) / (real b)) < ((real c) / (real d)) then true else false;
fun test = lessThan( (4,2) (3,2) );
当我尝试编译时,出现标题中所述的错误。为什么我不能像这样调用 lessThan?当我从 sml 控制台 运行 它为:“lessThan (4,2) (3,2)”时,我得到错误,这是正确的。
您遇到的一个错误是由于 test
被定义为没有参数的函数。
另一个错误是 lessThan( (4,2) (3,2) )
的括号太多了。
这可能是“调用函数必须先命名函数,然后将参数放在括号中”的误解造成的。许多语言如 C、Java 和 Python 都是如此,但在 SML 中并非如此。
测试此函数的语法有效方法是:
val test = lessThan (4,2) (3,2)
避免此类错误的一种方法是:永远不要有任何多余的括号。如果括号实际上并没有改变结果,那么它就是多余的。所以 ((1) + ((1)))
满是多余的,而 lessThan (4,2) (3,2)
没有多余的括号,因为它们都是用来构造元组的。
至于函数本身,您可以将其缩进以使其更易于阅读,并且您可以删除那些多余的括号:
fun lessThan (a, b) (c, d) =
if real a / real b < real c / real d
then true
else false;
另请注意,if p then true else false
只是 p
的一种罗嗦方式。
所以这个函数的更短版本:
fun lessThan (a, b) (c, d) =
real a / real b < real c / real d
您可能会争辩说,一组额外的括号可以提高可读性:
fun lessThan (a, b) (c, d) =
(real a / real b) < (real c / real d)
但是考虑到你不知道什么时候可以放置括号的问题,我认为在你完全为了可读性而考虑添加括号之前,永远不要放置你不需要的任何东西是一个很好的练习。
我有这两个功能...
fun lessThan (a, b) (c, d) = if ((real a) / (real b)) < ((real c) / (real d)) then true else false;
fun test = lessThan( (4,2) (3,2) );
当我尝试编译时,出现标题中所述的错误。为什么我不能像这样调用 lessThan?当我从 sml 控制台 运行 它为:“lessThan (4,2) (3,2)”时,我得到错误,这是正确的。
您遇到的一个错误是由于 test
被定义为没有参数的函数。
另一个错误是 lessThan( (4,2) (3,2) )
的括号太多了。
这可能是“调用函数必须先命名函数,然后将参数放在括号中”的误解造成的。许多语言如 C、Java 和 Python 都是如此,但在 SML 中并非如此。
测试此函数的语法有效方法是:
val test = lessThan (4,2) (3,2)
避免此类错误的一种方法是:永远不要有任何多余的括号。如果括号实际上并没有改变结果,那么它就是多余的。所以 ((1) + ((1)))
满是多余的,而 lessThan (4,2) (3,2)
没有多余的括号,因为它们都是用来构造元组的。
至于函数本身,您可以将其缩进以使其更易于阅读,并且您可以删除那些多余的括号:
fun lessThan (a, b) (c, d) =
if real a / real b < real c / real d
then true
else false;
另请注意,if p then true else false
只是 p
的一种罗嗦方式。
所以这个函数的更短版本:
fun lessThan (a, b) (c, d) =
real a / real b < real c / real d
您可能会争辩说,一组额外的括号可以提高可读性:
fun lessThan (a, b) (c, d) =
(real a / real b) < (real c / real d)
但是考虑到你不知道什么时候可以放置括号的问题,我认为在你完全为了可读性而考虑添加括号之前,永远不要放置你不需要的任何东西是一个很好的练习。