Phi*_*säß -2 syntax haskell function definition guard-clause
我尝试了一下haskell,但没有得到以下代码:
rems :: Int -> [Int] -> [Int]
rems _ [] = []
rems k (x:xs)
| k == x = rems k xs
| otherwise [x] ++ rems k xs
main = print $
rems 3 [5, 3, 2]
Run Code Online (Sandbox Code Playgroud)
如果您将其称为rems kx,则此函数将从列表x中删除每个k 。我知道它应该工作,因为我们在大学里写下来了。
我正在使用此IDE:https : //repl.it/languages/haskell
知道这otherwise
不是关键字或特殊符号=
,可能很有用,它实际上只是在前奏中定义为的布尔值True
。即,一个护卫在otherwise
语法上与任何其他护卫都一样,只是条件微不足道。您也可以写
rems _ [] = []
rems k (x:xs)
| k == x = rems k xs
| True = [x] ++ rems k xs
Run Code Online (Sandbox Code Playgroud)
我在上面选择的对齐方式(所有=
对齐方式都与保护条件保持至少两个†距离)完全是一种品味问题,但是我认为它有助于避免像您遇到的那种混乱。
顺便说一句,[x] ++ ...
可以缩短为x : ...
。编写函数的首选形式是
rems _ [] = []
rems k (x:xs)
| k==x = rems k xs
| otherwise = x : rems k xs
Run Code Online (Sandbox Code Playgroud)
† 大多数人将=
s 对齐,但仅使用一个空格。这是确定的,但IMO k == x = res
看起来与所有这些等号字符欺骗性,并k
和x
彼此渐行渐远高于从结果。k==x = res
似乎比较整齐。
归档时间: |
|
查看次数: |
103 次 |
最近记录: |