此功能的简短语法是什么?我注意到很多程序员在其函数中使用管道,但是我一直在努力弄清楚如何为此使用相同的管道。
fun test (i, x) =
if null x
then false
else
if hd x = i then true
else test(i, tl x)
//
val test = fn : ''a * ''a list -> bool
答案 0 :(得分:1)
这是一个简短的版本:
fun test (_, []) = false
| test (i, x::xs) = (x = i) orelse test (i, xs)
这是我做的事情:
使用模式匹配。在您的第二个解决方案中,您已经对空列表进行了模式匹配,因此可以更进一步,并在非空列表(x::xs
)上进行模式匹配,并使用hd
和{ {1}}不需要。
在不需要该值时,请使用tl
模式。
写_
代替if P then true else Q
。
P orelse Q
周围的括号不是严格必需的。彼此相邻的两个不同的x = i
看起来有些混乱(一个来自函数定义,另一个是二进制运算符),但这也完全有效并且含义相同:
=
或者更方便地缩进:
fun test (_, []) = false
| test (i, x::xs) = x = i orelse test (i, xs)
答案 1 :(得分:0)
所以我认为我找到了一个很好的解决方案。管道用于定义构造函数,第一个是空情况,x
是一个空列表,第二个是所有其他情况。
fun test (i, []) = false
| test (i,x) = if hd x = i then true else test(i, tl x)