gpt4 book ai didi

haskell - GHCi 中的缩进错误,实现过滤器

转载 作者:行者123 更新时间:2023-12-01 07:11:09 25 4
gpt4 key购买 nike

Prelude> let filter' p (x:xs) | p x = x : filter' p xs | otherwise = filter' p xs
Prelude> let filter' _ [] = []
Prelude> filter' odd [1..10]
*** Exception: <interactive>:1:5-21: Non-exhaustive patterns in function filter'

我错过了什么模式?
Prelude> :{
Prelude| let filter' p (x:xs)
Prelude| | p x = x : filter' p xs
Prelude| | otherwise = filter' p xs
Prelude| let filter' _ [] = []
Prelude| :}

<interactive>:2:5: parse error (possibly incorrect indentation)

在 ghci 中定义这个(语法明智)的惯用方法是什么?排队是怎么回事 = - 在我定义它们之前,我不知道为以下子句留下多少空间! :{}: 是什么,有更好的方法吗?

最佳答案

这里有两个问题。一、使用多个let声明正在制定两个单独的定义,后者掩盖了前者。其次,语法错误的原因是你没有足够的缩进你的守卫( | px ... 行应该比 filter' p (x:xs) 缩进得更远)。

尽管将定义保存在文件中更简单,但以下是在 GHCi 中正确输入它的方法。

Prelude> :{
Prelude| let filter' p (x:xs)
Prelude| | p x = x : filter' p xs
Prelude| | otherwise = filter' p xs
Prelude| filter' _ [] = []
Prelude| :}
:{:}命令用于输入跨越多行的定义。对齐 =是可选的,重要的是行的缩进。

关于haskell - GHCi 中的缩进错误,实现过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12484675/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com