小编ama*_*loy的帖子

haskell:理解类型和功能

为了了解haskell的工作原理,我创建了以下语句.我试图了解他们的类型是什么; 如果我是正确的轨道,任何人都可以告诉我吗?

statement                       type
['h', 'e', 'l', 'l', 'o']       ['h', 'e', 'l', 'l', 'o'] :: [char]

[(9,8),(7,6),(5,4)]             [(9,8),(7,6),(5,4)] :: [int a, int b] => [(a,b)] 
Run Code Online (Sandbox Code Playgroud)

如果这是正确的,有人可以帮我理解这些陈述的类型/功能:

  1. even x = x 'mod' 1 == 1

  2. chart x y = [y| x <- [1..x]]

haskell

1
推荐指数
1
解决办法
124
查看次数

Haskell:实例化代数类型的显示

我有数据类型:

data Posn a = Posn Int Int a
Run Code Online (Sandbox Code Playgroud)

我想为它创建一个自定义的Show实例,它将两个Int显示为有序对,如下所示:

showPosn :: Show a => Posn a -> String
showPosn (Posn l c x) = show (l,c) ++ (' ' : show x)
Run Code Online (Sandbox Code Playgroud)

我试过这个:

instance Show (Show a => Posn a) where
  show = showPosn
Run Code Online (Sandbox Code Playgroud)

但这给了我错误"非法实例声明".

令人沮丧的是,deriving Show工作得很好.所以,我的问题是:我需要做什么才能获得我的Show实例?

haskell types

1
推荐指数
1
解决办法
97
查看次数

Clojure .get和它的区别

什么是.getclojure,它的区别是get什么?我知道get但从未见过的是什么.get.

clojure

1
推荐指数
1
解决办法
148
查看次数

Haskell 顶级函数

我在屏幕左侧打开了一个 Haskell 文件,另一半打开了 ghci。我想在文件中添加函数、保存并在 ghci 中试验它们。问题是我不完全确定如何声明顶级函数。我什至不确定我知道什么是顶级函数。我认为它们只是最高范围的功能。所以我的问题是做到这一点的极简方式是什么?例如...

let f1 x = x
Run Code Online (Sandbox Code Playgroud)

我需要用什么样板代码来包围它才能编译它以便我可以在 ghci 中加载它?

haskell

1
推荐指数
1
解决办法
611
查看次数

如何列出Haskell中所有可能替换的项目?

我的输入是一个任意列表,例如

["a","b","c"]
Run Code Online (Sandbox Code Playgroud)

还有另一个列表元素"z".我希望输出看起来像:

[["z","b","c"],["a","z","c"],["a","b","z"]]
Run Code Online (Sandbox Code Playgroud)

我该怎么做呢?

haskell

1
推荐指数
3
解决办法
102
查看次数

Spooky haskell功能以某种方式知道您的输入

sumListV3功能怎么样?myFoldr需要3个args:function,base case num和list.然而它以某种方式知道列表(基于您的输入),即使它从未在内部代码中指定.

我认为sumListV2它是最简单的.sumListV3甚至如何编译,更不用说正常运行了?

myFoldr :: (a -> b -> b) -> b -> [a] -> b
myFoldr _ baseCase [] = baseCase
myFoldr f b (x:xs) = f x (myFoldr f b xs)

sumListV2 :: [Int] -> Int
sumListV2 xs = myFoldr (+) 0 xs

sumListV3 :: [Int] -> Int
sumListV3 = myFoldr (+) 0 
Run Code Online (Sandbox Code Playgroud)

haskell

1
推荐指数
1
解决办法
178
查看次数

Haskell错误:在定义代数数据类型时,键入变量不在范围内

为什么会出错

proba.hs:5:28: Not in scope: type variable `<stderr>: commitBuffer: invalid argument (invalid character)
Run Code Online (Sandbox Code Playgroud)

尝试使用以下代码编译文件proba.hs时出现:

main :: IO()
main = do
    print (isBalanced (Node 17 (Node 14  Empty Empty) (Node 20 (Node 20 Empty Empty) (Node 20 Empty Empty))) 2)

data Tree a = Empty | Node ? (Tree a) (Tree a) 
             deriving (Read, Show)

depth :: Tree a -> Int
depth  Empty         = 0
depth (Node _ t1 t2) = 1 + max (depth t1) (depth t2)

isBalanced :: Tree …
Run Code Online (Sandbox Code Playgroud)

haskell

1
推荐指数
1
解决办法
384
查看次数

在显式类型绑定中键入错误 - Haskell

我一直在努力花一个小时来理解更高阶函数中的一些东西,现在我因为这个错误而无法继续前进:

    hof :: [Integer] -> (Integer -> Integer)
    isIn :: [Integer] -> Integer -> Integer
    isIn [] s = 0
    isIn [] _ = 0
    isIn (h:t) s
        | h == s = 0 {-<-------- error points here here-}
        | otherwise = isIn(t) + 1
    hof s = \n -> isIn s n

      ERROR file:.\Lab2.hs:111 - Type error in explicitly typed binding
      *** Term           : isIn
      *** Type           : [Integer] -> Integer -> Integer -> Integer
      *** Does not match …
Run Code Online (Sandbox Code Playgroud)

haskell typeerror

1
推荐指数
1
解决办法
71
查看次数

可区分类型联合

有没有办法在 Haskell 中模仿 TypeScript 的可区分类型联合?我想做以下事情:

data A = B | C | D
data W = X | Y | Z

data FinalType = A | W
Run Code Online (Sandbox Code Playgroud)

我知道最后一个定义将创建两个值构造函数AWfor FinalType. 我现在可以通过FinalType以下方式正确制作:

data FinalType = B | C | D | X | Y | Z
Run Code Online (Sandbox Code Playgroud)

但这不是很整洁,并且在添加了大量值构造函数后变得很烦人。有没有办法在 Haskell 中缓解这种情况?

haskell algebraic-data-types discriminated-union

1
推荐指数
1
解决办法
94
查看次数

使用map函数时如何访问下一个元素?

我正在尝试在 haskell 中的列表的每个元素上应用一个函数。因此我正在使用该map功能。我的代码应该将下一个元素的值添加到当前元素。

所以我认为我的代码应该看起来像这样:

test :: [Rational]
test = map (\x -> x % {-somehow get next element -}) listT
Run Code Online (Sandbox Code Playgroud)

listT 是一个 Int 类型的无限列表。

但是我如何“访问”下一个值?谢谢你的帮助

haskell list map-function

1
推荐指数
1
解决办法
143
查看次数