我对F#相当陌生,并且对我的任务解决方案的复杂性感到好奇。我不会解释我要解决的全部任务,但是我的想法是,我想根据某个列表的所有元素是否都满足某个过滤条件来返回一个布尔值。我递归地遍历列表,检查元素是否满足过滤条件,然后返回结果以及从在尾部调用相同函数得到的下一个结果。
这样做时,我很好奇每个步骤是否应检查是否为假,因为只要该操作的任何成员为假,AND操作的结果就为假。还是F#一旦从AND运算本身中的某个元素获取了错误,就返回了false?
例:
// I have a function check : int -> bool
// check 1 returns false
check 1 && check 2
Run Code Online (Sandbox Code Playgroud)
是否check 2得到执行或值后立即返回check 1,因为它返回false?
&&短路。如果check 1返回false,则check 2永远不会执行。
如果您允许check x产生副作用,则可以看到此操作:
let check n =
printfn "Checking %i" n
n = 1
check 2 && check 1 // Just prints 'Checking 2'
Run Code Online (Sandbox Code Playgroud)