我试图理解懒惰和seqHaskell:
在(1)中,v在基本情况下的打印需要之前不进行评估是否正确v?
在(2)中,v'在每次递归调用之前评估是否正确,以便v在基本情况下不需要评估?如果没有,我如何实施这种严格的评估?
我可以使用任何分析工具来为自己确认这两点吗?
main = do
f [1, 2, 3, 4] 0
f' [1, 2, 3, 4] 0
g x = 42 * x -- this could be whatever
-- 1. lazy
f [] v = print v -- base case
f (x:xs) v = f xs v'
where v' = v + g x
-- 2. strict
f' [] v = print v -- base case
f' (x:xs) …Run Code Online (Sandbox Code Playgroud) 我有一些数据类型X和一个返回IO [X]的函数,但我的计算当前正在返回[IO X].将[IO X]转换为IO [X]的一般方法是什么?
我在这段代码中遇到了函数共识问题.共识的递归定义是返回[Action]而不是IO [Action].
我是Haskell的新手,不明白为什么会这样.我的印象是,无法从返回值中删除IO.
import System.Random (randomRIO)
import Data.Ord (comparing)
import Data.List (group, sort, maximumBy)
data Action = A | B deriving (Show, Eq, Ord)
-- Sometimes returns a random action
semiRandomAction :: Bool -> Action -> IO (Action)
semiRandomAction True a = return a
semiRandomAction False _ = do
x <- randomRIO (0, 1) :: IO Int
return $ if x == 0 then A else B
-- Creates a sublist for each a_i in ls …Run Code Online (Sandbox Code Playgroud) 我正在尝试在 Pytorch 中加载 MNIST 数据集,并使用内置数据加载器来迭代训练示例。但是,在迭代器上调用 next() 时出现错误。我用 CIFAR10 没有这个问题。
import torch
import torchvision
import torchvision.transforms as transforms
transform = transforms.Compose(
[transforms.ToTensor(),
transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))])
batch_size = 128
dataset = torchvision.datasets.MNIST(root='./data', train=True, transform=transform, download=True)
dataloader = torch.utils.data.DataLoader(dataset, batch_size=batch_size, shuffle=True, num_workers=4)
dataiter = iter(dataloader)
dataiter.next() # ERROR
# RuntimeError: output with shape [1, 28, 28] doesn't match the broadcast shape [3, 28, 28]
Run Code Online (Sandbox Code Playgroud)
我正在使用 Python 3.7.3 和 PyTorch 1.1.0
获取数据类型派生枚举的基数的建议方法是什么?
--given
data ABC = A | B | C deriving (Enum)
--want 3
Run Code Online (Sandbox Code Playgroud)