小编Dan*_*use的帖子

参数列表中nat_pairs()和(nat_pairs())之间的区别

我是SML的初学者,只是编写我的第一个函数.

该函数应该生成具有不包含零的自然数的对流.

此函数使用带谓词的过滤器来删除其成员之一为零的对,这会产生语法错误:

fun nat_pairs_not_zero ()  =  filters not_zero nat_pairs();

stdIn:56.20-59.1 Error: operator and operand don't agree [tycon mismatch]
  operator domain: (int * int) sequ
  operand:         unit -> (int * int) sequ
  in expression:
    (filters nicht_null) nat_pairs
Run Code Online (Sandbox Code Playgroud)

如果我首先执行nat_pairs并存储其结果并仅使用结果,它就可以工作.

fun nat_pairs_not_zero ()  =  let 
                                   val lst = nat_pairs() 
                              in
                                   filters not_null lst 
                              end;
Run Code Online (Sandbox Code Playgroud)

如果我在nat_pairs它附近添加额外的括号也可以.

fun nat_pairs_not_zero ()  =  filters not_zero (nat_pairs());
Run Code Online (Sandbox Code Playgroud)

如果我只执行(nat_pairs())nat_pairs(),既给我相同的输出:

val x = CONS ((0,0),fn) : (int * int) sequ    
Run Code Online (Sandbox Code Playgroud)

有人可以解释我有和没有大括号的版本之间的区别?

需要尝试的函数定义

type …
Run Code Online (Sandbox Code Playgroud)

sml smlnj

2
推荐指数
1
解决办法
66
查看次数

标签 统计

sml ×1

smlnj ×1