我一直在尝试通过构建短程序来学习Haskell.我对函数式编程世界有些新意,但已经做了很多阅读.
我在Haskell中使用相对较短的递归函数,使用牛顿方法查找函数的根,直到浮点数允许的精度:
newtonsMethod :: (Ord a, Num a, Fractional a) => (a -> a) -> (a -> a) -> a -> a
newtonsMethod f f' x
| f x < epsilon = x
| otherwise =
newtonsMethod f f' (x - (f x / f' x))
where
epsilon = last . map (subtract 1) . takeWhile (/= 1)
. map (+ 1) . iterate (/2) $ 1
Run Code Online (Sandbox Code Playgroud)
当我在GHCi中解释并插入时newtonsMethod (\ x -> cos x + 0.2) (\ x -> -1 …
我试图实现一个Haskell代数数据类型链表(或者更准确地说是链接列表的东西,因为我不知道使用Haskell进行内存寻址的任何方法)以及用于转换到Haskell的简单列表的辅助函数输入并写下以下内容:
data LinkedList a = Nill | Node a (LinkedList a) deriving Show
hlistTolinkedList :: [a] -> LinkedList a
hlistToLinkedList [] = Nill
hlistToLinkedList x:[] = Node x Nill
hlistToLinkedList x:xs = Node (x) (stringToLinkedList xs)
linkedListToHlist :: LinkedList Char -> [Char]
linkedListToHlist (Node a b) = a ++ linkedListToString b
linkedListToHlist Nill = ''
Run Code Online (Sandbox Code Playgroud)
我得到以下编译器错误:
@5:1-5:21 Parse error in pattern: hlistToLinkedList
Run Code Online (Sandbox Code Playgroud)
我不确定我的功能有什么问题.有人请解释一下吗?