检查参数是否为列表

时间:2018-03-25 14:09:08

标签: sml smlnj

如果参数x是一个列表,是否可以在SML中编写一个返回true的通用函数?

fun isList(x) = .......

预期用法:

- isList(4);   (* returns false *)
- isList([1, 2, 3]); (* returns true *)

2 个答案:

答案 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