takeWhile 管道符号之间的参数 - |
takeWhile arguments between pipe symbol - |
takeWhile(或)dropWhile
将谓词作为其参数。 takeWhile
问的第一个参数 |Int x->Bool|
是什么? pipe
符号在haskell中是什么意思?
foo := [1, 2, 3, 4, 5]
bar := foo.takeWhile |Int x->Bool| { return x < 3 }
// bar == [1, 2]
baz := foo.dropWhile |Int x->Bool| { return x < 3 }
// baz == [3, 4, 5]
直接翻译成 Haskell 看起来像这样:
module SO where
foo :: [Int]
foo = [1,2,3,4,5]
bar :: [Int]
bar = takeWhile (\x -> x < 3) foo
baz :: [Int]
baz = dropWhile (\x -> x < 3) foo
这是 GHCi 中的示例输出:
λ> foo
[1,2,3,4,5]
λ> bar
[1,2]
λ> baz
[3,4,5]
我猜 |Int x -> Bool| { return x < 3 }
是 Fantom 中 lambda 的语法 - 所以你的 predicate 到 Haskell 的翻译只是
\x -> x < 3
如您所见,Haskell 不需要类型注释(您的 管道 |
之间的部分)- 它将能够推断出来.
实际上您根本不需要这些类型 - 但通常您会为模块中的顶级构造提供它们。
它更通用
事实上,虽然这一切只是针对 Int
列表 Haskell 可以使相同的代码适用于所有类型的数字。
当您在 谓词 中使用数字文字(3
)和二元运算符 <
时,您需要两个约束:
Num
您正在使用的号码
Ord
为 <
GHCi 会告诉你很多:
λ> :t (\x -> x < 3)
(\x -> x < 3) :: (Ord a, Num a) => a -> Bool
这就是为什么你也可以写得更笼统:
foo :: Num a => [a]
foo = [1,2,3,4,5]
bar :: (Num a, Ord a) => [a]
bar = takeWhile (\x -> x < 3) foo
baz :: (Num a, Ord a) => [a]
baz = dropWhile (\x -> x < 3) foo
还有。
takeWhile(或)dropWhile
将谓词作为其参数。 takeWhile
问的第一个参数 |Int x->Bool|
是什么? pipe
符号在haskell中是什么意思?
foo := [1, 2, 3, 4, 5]
bar := foo.takeWhile |Int x->Bool| { return x < 3 }
// bar == [1, 2]
baz := foo.dropWhile |Int x->Bool| { return x < 3 }
// baz == [3, 4, 5]
直接翻译成 Haskell 看起来像这样:
module SO where
foo :: [Int]
foo = [1,2,3,4,5]
bar :: [Int]
bar = takeWhile (\x -> x < 3) foo
baz :: [Int]
baz = dropWhile (\x -> x < 3) foo
这是 GHCi 中的示例输出:
λ> foo
[1,2,3,4,5]
λ> bar
[1,2]
λ> baz
[3,4,5]
我猜 |Int x -> Bool| { return x < 3 }
是 Fantom 中 lambda 的语法 - 所以你的 predicate 到 Haskell 的翻译只是
\x -> x < 3
如您所见,Haskell 不需要类型注释(您的 管道 |
之间的部分)- 它将能够推断出来.
实际上您根本不需要这些类型 - 但通常您会为模块中的顶级构造提供它们。
它更通用
事实上,虽然这一切只是针对 Int
列表 Haskell 可以使相同的代码适用于所有类型的数字。
当您在 谓词 中使用数字文字(3
)和二元运算符 <
时,您需要两个约束:
Num
您正在使用的号码Ord
为<
GHCi 会告诉你很多:
λ> :t (\x -> x < 3)
(\x -> x < 3) :: (Ord a, Num a) => a -> Bool
这就是为什么你也可以写得更笼统:
foo :: Num a => [a]
foo = [1,2,3,4,5]
bar :: (Num a, Ord a) => [a]
bar = takeWhile (\x -> x < 3) foo
baz :: (Num a, Ord a) => [a]
baz = dropWhile (\x -> x < 3) foo
还有。