use*_*833 2 haskell predicate list
我试图在Haskell中实现所有函数,它工作正常,但我认为我的基本情况并不好,如果我将基本情况的结果设置为False它更有意义,我的意思是不是空列表成员通过真实单词中的测试条件,所以答案应该是假的,但另一方面,如果我将其定义为false,则整个函数不能正常工作.
all' test [] = True
all' test (x:xs)
| not (test x) = False
| otherwise = all' test xs
Run Code Online (Sandbox Code Playgroud)
all意图与形式逻辑中的语句具有相同的含义,∀xεL:test(x)其中L是第一个参数的列表.如果你不熟悉形式逻辑,重要的是要理解这个语句"返回"即使对于一个空列表也是如此.这被称为空洞真相(如果你很好奇,请参见http://en.wikipedia.org/wiki/Vacuously_true).
在空列表上返回true的事实使得all'更容易实现是一个很好的例子,为什么空洞真理是一个好主意,但如果你想实现它以返回False一个空列表,你所要做的就是添加一个案例.
all' _ [] = False --here I have changed test to _ since we don't care what it is
all' test x:[] = test x --the new case
all' test (x:xs)
| not (test x) = False
| otherwise = all' test xs
Run Code Online (Sandbox Code Playgroud)