在本页面:
http://en.wikibooks.org/wiki/Write_Yourself_a_Scheme_in_48_Hours/Parsing
它显示了ghc被称为:
ghc -package parsec -o simple_parser [../code/listing3.4.hs listing3.4.hs]
Run Code Online (Sandbox Code Playgroud)
方括号是什么?我在使用ghc 7.0.4时遇到错误.这是为某种方式指定输入文件的搜索路径吗?
我想在Haskell中编写一个生日攻击程序,用于SHA1的变体,它只产生50位散列.为此,我需要一个能够存储大约的哈希表.2 ^ 25个条目.
此映射中的键将是Int64,并且值将是短长度字符串(~16字节).
有关使用哈希实现的任何建议吗?
(无视上次更新 - 我需要一个2 ^ 50个元素的数组.)
我有这个单形代码:
import Data.Array.MArray
import Data.Array.IO (IOUArray)
import Data.Ix (Ix)
push :: IOUArray Int Int -> Int -> [Int] -> IO Int
push stack top [] = return top
push stack top (k:ks) = do
v <- readArray stack k
if v >= 0 then push stack top ks
else do writeArray stack k top
push stack k ks
Run Code Online (Sandbox Code Playgroud)
一个完全多态的签名push是:
push :: (MArray a e m, Ix e, Num e) => a e e -> e -> [e] -> …Run Code Online (Sandbox Code Playgroud) 我想在haskell中实现一个简单的8off单人纸牌游戏,我不太清楚如何定义我的棋盘,以及如何制作一个返回随机起始板的功能.如何修改myBoard和我的数据结构?到现在为止,我有这些:
data Pip = A|TW0|THREE|FOUR|FIVE|SIX|SEVEN|EIGHT|NINE|TEN|J|Q|K --pip value
deriving (Eq,Show)
data Suit = S|H|D|C --suit
deriving (Eq,Show)
type Card = (Pip,Suit) --card
type Deck = [(Card)] --deck
type Foundations = [(Deck)] foundations
type Columns = [(Deck)] --columns
type Reserve = [(Deck)] --reserve
type EOBoard = [(Deck)]
myBoard::Deck->EOBoard
myBoard pack = [shuffle pack]
Run Code Online (Sandbox Code Playgroud)
返回我,这个:
[[(K,D),(TW0,H),(SEVEN,C),(SEVEN,S),(THREE,D),(NINE,S),(THREE,C),(FOUR,H),(THREE,S),(TW0,D),(TW0,C),(FOUR,S),(K,S),(TEN,D),(J,S),(EIGHT,H),(FOUR,D),(NINE,H),(SEVEN,H),(A,S),(SIX,S),(EIGHT,S),(FIVE,S),(FOUR,C),(K,H),(Q,D),(THREE,H),(TEN,H),(A,D),(EIGHT,C),(NINE,D),(Q,H),(J,D),(J,C),(TEN,C),(Q,S),(Q,C),(J,H),(NINE,C),(SIX,C),(FIVE,H),(SEVEN,D),(A,C),(TW0,S),(EIGHT,D),(FIVE,D),(TEN,S),(K,C),(A,H),(SIX,D),(FIVE,C),(SIX,H)]]
Run Code Online (Sandbox Code Playgroud) bracket
:: IO a -- ^ computation to run first (\"acquire resource\")
-> (a -> IO b) -- ^ computation to run last (\"release resource\")
-> (a -> IO c) -- ^ computation to run in-between
-> IO c -- returns the value from the in-between computation
bracket before after thing =
mask $ \restore -> do
a <- before
r <- restore (thing a) `onException` after a
_ <- after a
return r
Run Code Online (Sandbox Code Playgroud)
这与某些API设计模式或约定有关吗?为什么不使用以下部分签名?
-> (a -> IO ()) …Run Code Online (Sandbox Code Playgroud) 我以为我记得在哪里读过perl可以配置为.pm在启动时自动加载某个文件的地方.
我知道PERL5OPT,但对于我的记忆,这是一个特定的文件,如果它存在将被加载.
它是一个可以设置的编译选项(即通过Configure)吗?
我安装了Haskell Platform 2012.4.0.0,我想尝试使用单元包.
当我尝试安装它时,cabal-dev -s some-dir install unittyped我收到错误:
$ cabal-dev -s some-dir install unittyped
Resolving dependencies...
cabal: Could not resolve dependencies:
trying: unittyped-0.1 (user goal)
next goal: base (dependency of unittyped-0.1)
rejecting: base-3.0.3.2, 3.0.3.1 (global constraint requires installed
instance)
rejecting: base-4.5.1.0/installed-724... (conflict: unittyped => base>=4.6 && <4.7)
rejecting: base-4.6.0.0, 4.5.1.0, 4.5.0.0, 4.4.1.0, 4.4.0.0, 4.3.1.0, 4.3.0.0,
4.2.0.2, 4.2.0.1, 4.2.0.0, 4.1.0.0, 4.0.0.0 (global constraint requires installed instance)
Run Code Online (Sandbox Code Playgroud)
并cabal-dev -s some-dir install base-4.6.0.0产生类似的信息.
有没有办法克服这些错误?
此代码有效:
40 * sum [1..10]
Run Code Online (Sandbox Code Playgroud)
此代码不会:
40 * sum $ map id [1..10]
Run Code Online (Sandbox Code Playgroud)
我现在理解它是因为这是(40 * sum) (map id [1..10])由于运算符优先级而不是我认为它应该是,这是分组(40 *) (sum (map id [1..10])).
除了使用括号之外,有没有正确的方法在Haskell中编写它?