如果参数x是一个列表,是否可以在SML中编写一个返回true的通用函数?
fun isList(x) = .......
预期用法:
- isList(4); (* returns false *)
- isList([1, 2, 3]); (* returns true *)
答案 0 :(得分:0)
有可能您可以尝试模式匹配,然后处理相应的异常。但无论哪种方式都会破坏函数式编程的重点。在函数式编程中,目标是使用抽象的类型构建有用的函数。任何类型特定的函数调用都应该作为输入抽象出来。
以map: ('a -> 'b) -> 'a list -> 'b list
为例。整个目标是将您想要执行的操作抽象为传入的函数(以curry形式)。
因此输入类型的套管错过了这一点。因此,如果您希望根据输入类型执行不同的操作,则应将该操作作为函数输入传递。
答案 1 :(得分:-1)
如果参数x是一个列表,是否可以在SML中编写一个返回true的通用函数?
没有
- fun foo 4 = false
| foo [] = true;
! Toplevel input:
! | foo [] = true
! ^
! Type clash: pattern of type
! 'a list
! cannot have type
! int