小编Ben*_*son的帖子

如何将字典拼成两个列表的元组?

现在我有一本字典,

{2.9: [0.66], 3.3: [0.82, 0.48]}
Run Code Online (Sandbox Code Playgroud)

我想把它变成一个由两个列表组成的元组:

([3.3, 3.3, 2.9], [0.82, 0.48, 0.66])
Run Code Online (Sandbox Code Playgroud)

3.3 出现两次,因为相应的词典条目中有两个元素.

我该怎么做?

python dictionary flatten

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

存在和重复见证

让我们想象一下我有一个存在主义类型T.

T = ?X { a :: X,  f :: X -> Int} 
Run Code Online (Sandbox Code Playgroud)

其中我产生了一个价值

v :: T
v = pack {Int, { a = 0, f x =  0 } } as T
Run Code Online (Sandbox Code Playgroud)

所以:

  • 禁止此值的用户知道X实现中实际使用的是哪种类型.为了消耗这个值,他们的代码必须是多态的X
  • 另一方面,实现者完全知道X实际上是一个Int并且可以根据自己的意愿使用基础类型的能力

我想知道是否有这种机制的变体不会破坏证据:

w, v = pack {Int, { a = 0, f x =  0 } } as T
s = unpack w v  -- recovers type information 
Run Code Online (Sandbox Code Playgroud)

这里w将是型方程搭售的价值层面的证据Xint …

haskell types casting existential-type

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

为什么不加载到GHCI

我不明白为什么这不会加载到交互式Haskell解释器中.当我直接在GHCI中输入函数定义时,它的效果非常好.但是当我尝试从.hs文件加载函数定义时,就是当我收到错误消息时.有任何想法吗?谢谢您的帮助.

let partialsums lst = reverse ( partial_sums lst 0 [] ) where
                      partial_sums ls accum accumulator_list = 
                      if ls == [] then accumulator_list else
                      partial_sums ( tail ls ) ( accum + head ls ) 
                      ((accum + head ls) : accumulator_list)
Run Code Online (Sandbox Code Playgroud)

我在Python,Ruby和Ocaml中尝试过相同的函数定义.没问题!(Python的空白规则简单直观.Ruby和Ocaml不读取空格.在这些语言中,空格严格用于方便阅读程序的人.但我认为Haskell有一些非常严格的空白规则,我不熟悉.)

谢谢您的帮助.Haskell肯定看起来很有趣,但如果没有好教授的监督或指导,这是一种难以学习的语言.我只是想自己学习这门语言.

haskell

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

过滤monad列表

我试图过滤类型列表: IO [Either a b]

理想情况下,我想用以下类型的sig组成过滤函数:

(Monad m, Monad m2) => m [m2 a] -> (a -> Bool) -> m [m2 a]
Run Code Online (Sandbox Code Playgroud)

我已经尝试了很多的组合filter,filterM,fmap=<<妄图解除我的谓词到合适的范围内,但我一直缺少的标志-我可以做到m [m a]-> (a -> m Bool)-> m [m a],但由于这两个和IO是不一样的单子,这并未"好像对我好.

这似乎是'do notation'的用例,但是我一直无法找到一种方法来检查分配给<-操作员的事物的类型签名,因此我会在移动目标上进行拍摄.

我不确定如何以一种方式组合函数,以便明确它遍历包含不同monad(Either)实例的列表,然后是包含列表本身(IO)的monad.

我在这里错过了什么?

haskell

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

数据构造函数是否支持currying?

Haskell中的所有功能都是:

Prelude> type Subject = String
Prelude> type Verb = String
Prelude> type Object = String
Prelude> data Sentence = Sentence Subject Verb Object deriving (Eq, Show)
Prelude> :t Sentence 
Sentence :: Subject -> Verb -> Object -> Sentence
Run Code Online (Sandbox Code Playgroud)

Sentence是一个数据类型,但为什么它显示为一个函数?即使我用一个值替换,它感觉就像一个函数.

s1 = Sentence "dogs" "drool"  
Run Code Online (Sandbox Code Playgroud)

数据类型是否也支持currying?

haskell

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

当我向主函数添加类型描述时,为什么会得到一个裸露的顶级表达式?

我正在尝试运行我的主文件,它说

Parse error: naked expression at top level
Perhaps you intended to use TemplateHaskell
Run Code Online (Sandbox Code Playgroud)

这是我的相关代码

module Main where  
import System.IO

import System.Environment

main ? IO ()

main = do 
Run Code Online (Sandbox Code Playgroud)

haskell

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

在Haskell中运行多次函数

我之前创建了这个函数来生成一个范围内的整数随机数(m,n).

giveRand :: Random c => c -> c -> c
giveRand m n = unsafePerformIO . getStdRandom $ randomR (m,n)
Run Code Online (Sandbox Code Playgroud)

从这种情况来看,我想用相同的参数多次运行它,这样它就会返回给定范围内随机生成的值列表.我尝试了复制功能,但它只复制了giveRand的结果.它没有创建该函数的多个副本并重新评估它.

从这个问题我想知道是否有一个函数允许我使用相同的参数多次运行任何函数.我问这个例子,即使使用相同的范围输入,也可能出现不同的值.

那么,Haskell中是否有任何函数可以让我使用相同的参数多次运行一个函数?

haskell

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

如何过滤文本文件Haskell中不需要的单词

我正在尝试在Haskell中编写一个可以从文本文档中过滤掉不需要的关键字的程序.文本文档包含有关人员的信息,例如姓名,年龄和城市,我想过滤掉与不符合关键字的人相关的所有信息.

数据库看起来像这样:

"Eric" 27 "London"
"Josefine" 34 "Stockholm"
"Hans" 50 "London"
Run Code Online (Sandbox Code Playgroud)

所以如果关键字是"伦敦",我想要以下输出:

"Eric" 27 "London"
"Hans" 50 "London"
Run Code Online (Sandbox Code Playgroud)

我已经尝试了一些不同的方法来存储信息并过滤掉不需要的人,但我现在对如何做到这一点毫无头绪.

haskell

-2
推荐指数
1
解决办法
144
查看次数