小编luq*_*qui的帖子

查找元组列表中的最大元素

我是Haskell的初学者.我有一个我在Haskell中使用的元组列表:结构是这样的[(a,b),(c,d),(e,f),(g,h)]

我想要的是根据第二个值返回此元组中的最大元素:因此,如果元组列表是[(4,8),(9,10),(15,16),(10,4)],我想要最大元素(15,16).

但我不知道该怎么做.这是我到目前为止的尝试,

maximum' ::  (Ord a) => (Num a) => [(a,b)] -> a  
maximum' [] = error "maximum of empty list"  
maximum' [(x,y)] = -1
maximum' (x:xs)   
  | snd x > snd(xs !! maxTail) = 0
  | otherwise = maxTail  
  where maxTail = maximum' xs + 1
Run Code Online (Sandbox Code Playgroud)

我得到这个错误信息对我来说没有意义:

newjo.hs:23:25:
Could not deduce (a ~ Int)
from the context (Ord a, Num a)
  bound by the type signature for
             maximum' :: (Ord a, Num a) …
Run Code Online (Sandbox Code Playgroud)

haskell

6
推荐指数
3
解决办法
8836
查看次数

用于更改数据的数据记录模式

我正在考虑使用数据记录作为我正在编写的应用程序的数据库后端,因为我认为可以让我轻松地在表示之间切换,而不必牺牲我收集的数据或编写繁琐的迁移.

但是,我无法预见我将如何处理更改数据 - 例如,用户可更改密码这样简单的事情.我有一个想法用日期标记行:

changepassword(<user>, <passhash>, <date>)
Run Code Online (Sandbox Code Playgroud)

然后使用最新的,但似乎没有办法获得最新的,没有返回所有行并在应用程序端过滤它们.

数据记录应用程序如何设计来处理变化的数据?

database database-design datalog

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

不受信任的反序列化策略

我有一个非常复杂的对象网络,我想在不受信任的环境中序列化和反序列化(Web浏览器,使用Unity 3D).普通BinaryFormatter序列化工作正常,但反序列化因"访问私有字段"错误而崩溃.当我在本地运行时它非常有效.

我宁愿不通过公开所有私有字段来使我的代码库变得糟透了.如果没有这样做,反序列化在不受信任的环境中工作的最佳方法是什么?我愿意改变序列化方法,BinaryFormatter这是最容易上手的方法.

更新我不想阻止序列化访问我的私有数据,我想允许序列化访问我的私有数据而不必公开它,从而损害我的代码的封装.

谢谢.

.net c# mono serialization

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

parsec中意外的输入结束

我想解析这样的文件:

66:3 3:4
329:2 
101:3 
495:4 
55:5 
268:5 
267:2 
242:4 
262:1 
861:1 

我的代码如下:

getTestData :: String -> IO [[(Int, Int)]]
getTestData name = do
    --res <- parseFromFile testData (name ++ ".test")
    fc <- readFile (name ++ ".test")
    let res = parse testData "test data" fc
    case res of
        Left e -> error $ show e-- "test data parse eror."
        Right ts -> return ts

eol = char '\n'
testData = endBy line eol
--testData = many line
testTuple = do …
Run Code Online (Sandbox Code Playgroud)

haskell parsec

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

在agda中已知的模式匹配

粗略地说,我有

check : UExpr -> Maybe Expr
Run Code Online (Sandbox Code Playgroud)

我有一个测试术语

testTerm : UExpr
Run Code Online (Sandbox Code Playgroud)

我希望能check成功,之后我想提取结果Expr并进一步操纵它.基本上

realTerm : Expr
just realTerm = check testTerm
Run Code Online (Sandbox Code Playgroud)

如果check testTerm结果是这个定义将无法进行类型检查nothing.这可能吗?

haskell agda

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

证明融合法的展开

我正在阅读Jeremy Gibbons关于折纸编程的文章,我坚持练习3.7,要求读者证明列表的融合法展开:

unfoldL p f g . h = unfoldL p' f' g'
Run Code Online (Sandbox Code Playgroud)

如果

p . h = p'
f . h = f'
g . h = h . g'
Run Code Online (Sandbox Code Playgroud)

unfoldL列表展开的功能定义如下:

unfoldL :: (b -> Bool) -> (b -> a) -> (b -> b) -> b -> List a
unfoldL p f g b = if p b then Nil else Cons (f b) (unfoldL p f g (g b))
Run Code Online (Sandbox Code Playgroud)

这是我目前尝试的证据:

(unfoldL p f …
Run Code Online (Sandbox Code Playgroud)

recursion haskell proof induction recursion-schemes

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

比较语法树模数alpha转换

我正在编写一个编译器/校对检查器,我想知道,如果我有一个这样的语法树,例如:

data Expr
    = Lambdas (Set String) Expr
    | Var String
    | ...
Run Code Online (Sandbox Code Playgroud)

如果有办法检查Exprs 的alpha等价(等价模重命名).Expr然而,这与lambda演算的不同之处在于lambda中的变量集是可交换的 - 即参数的顺序不会影响检查.

(但是,为了简单起见,与此Lambda ["x","y"] ...不同Lambda ["x"] (Lambda ["y"] ...),在这种情况下,顺序确实很重要).

换句话说,给定两个Exprs,如何才能有效地找到从一个到另一个的重命名?NP-complete这种组合问题的气味.

syntax haskell lambda-calculus np-complete abstract-syntax-tree

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

即使DeriveGeneric已启用,派生Generic也不起作用

我正在尝试使用Beam Haskell库的教程:https://tathougies.github.io/beam/tutorials/tutorial1/

module Lib
    ( someFunc
    ) where

{-# LANGUAGE
    DeriveGeneric
  , GADTs
  , OverloadedStrings
  , FlexibleContexts
  , FlexibleInstances
  , TypeFamilies
  , TypeApplications
 #-}

import Database.Beam
import Database.Beam.Postgres
import GHC.Generics

import Data.Text (Text)

data UserT f
    = User
    { _userEmail     :: Columnar f Text
    , _userFirstName :: Columnar f Text
    , _userLastName  :: Columnar f Text
    , _userPassword  :: Columnar f Text }
    deriving Generic

someFunc :: IO ()
someFunc = putStrLn "someFunc"
Run Code Online (Sandbox Code Playgroud)

这会导致以下错误:

    • Can't make …
Run Code Online (Sandbox Code Playgroud)

generics haskell haskell-stack

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

传递函数作为参数

我是Haskell的新手,我应该编写一个函数,在其参数中使用一个函数,使用它并返回一个函数,其行为根据我传入的函数而变化,要清楚:在我的应用程序中:一个简单的缓存服务器,我读过一个上下文文件和所有参数之间的"LOG:活动"如果日志处于活动状态我必须在屏幕上给出日志以进行调试,否则我什么都不写,我不想使用if-then链,因此我想过写一个函数

setLogging a = do
   if a
   then let logging x = putStrLn x
    in  return logging
   else let logging x = putStrLn ""
        in return logging
Run Code Online (Sandbox Code Playgroud)

我以这种方式使用它doLog <- setLogging True并且它可以工作,我的函数应该返回从缓存中删除旧元素的函数:它必须包含多少元素由上下文决定; 这是我的功能

--ritorna la funzione che riduce la cache in funzione dell environment
setTrimming a = do
     if a=="active"
          then let trimming c logging = reduceCache 9  logging c --è attivo lowbandwidth
               in return trimming
          else let trimming c logging = reduceCache 5  logging c --non è attivo …
Run Code Online (Sandbox Code Playgroud)

haskell

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

Typeclass在数据类的每个值上实例化

是否可以指定datakind的每个成员都满足类型类,以便隐含类约束?例如

data AB = A | B
class Foo (a :: AB) where get :: proxy a -> String
instance Foo A where get _ = "A"
instance Foo B where get _ = "B"

-- note lack of constraint here
get' :: proxy (a :: AB) -> String
get' = get
Run Code Online (Sandbox Code Playgroud)

基本上aAB这样,我们确定有一个实例Foo.我发现它不太可能 - 它会在哪里获得Foo字典? - 但我在我的日子里看到了一些魔力.

haskell typeclass data-kinds

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