小编ssm*_*ssm的帖子

为什么在monad中使用这种特殊的函数类型?

Haskell的新手,我正试图找出这个Monad的东西.monadic绑定运算符 - >>=具有非常奇特的类型签名:

(>>=) :: Monad m => m a -> (a -> m b) -> m b
Run Code Online (Sandbox Code Playgroud)

为了简化,我们替换Maybem:

(>>=) :: Maybe a -> (a -> Maybe b) -> Maybe b
Run Code Online (Sandbox Code Playgroud)

但请注意,该定义可以用三种不同的方式编写:

(>>=) :: Maybe a -> (Maybe a -> Maybe b) -> Maybe b
(>>=) :: Maybe a -> (      a -> Maybe b) -> Maybe b
(>>=) :: Maybe a -> (      a ->       b) -> Maybe b
Run Code Online (Sandbox Code Playgroud)

在这三个中,中心的一个是最不对称的.但是,据我所知,如果我们想避免(LYAH称为样板代码),第一个有点无意义.但是,接下来的两个,我更喜欢最后一个.对于 …

monads haskell types typeclass

17
推荐指数
2
解决办法
868
查看次数

在Haskell模块中插入目录的更好方法

我正在Haskell中编写一个(实际上是我的第一个)大型程序,并试图将我的程序分解为模块,这样可能更容易维护.在Haskell中,模块名称似乎取决于目录结构.这非常好,直到我必须为程序嵌入另一层目录结构.我给出一个非常简单的例子如下:

让我们说我们开始使用具有以下目录结构的Haskell程序.

  • [方括号]中的名称代表目录,
  • {花括号}中的名称代表模块,
  • (常规括号中)的名称表示模块中关联的文件名
[src]
    - (Main.hs) {Main}
    - (PRBS.hs) {PRBS}
    - [Hardware]
        - (DataDef.hs) {Hardware.DataDef}
        - (ShiftRegister.hs) {Hardware.ShiftRegister}
Run Code Online (Sandbox Code Playgroud)

这一切都很好.我可以在任何我想要的地方导入我想要的东西.但是,现在说我想创建另一个抽象级别,如下所示:

[src]
    - (Main.hs) {Main}
    - [Firmware]
        - (PRBS.hs) {Firmware.PRBS}
        - [Hardware]
            - (DataDef.hs) {Firmware.Hardware.DataDef}
            - (ShiftRegister.hs) {Firmware.Hardware.ShiftRegister}
Run Code Online (Sandbox Code Playgroud)

现在请注意,硬件中所有模块的名称都已更改.我现在必须更改每个文件中的模块名称,以及导入文件的所有其他文件.我在一个例子中展示的三个文件.如果目录结构最终有数百个带有数十个嵌入目录的文件,则可能无法维护代码.此外,如果在任何时候,我想(在当前目录系统中的特定点及其子目录)复制的目录,我需要弄清楚面前所有而来以前的目录,并手动更改在每个模块名称文件.

由于Haskell用于几个大型项目,我很确定我在这里遗漏了一些东西.任何帮助我摆脱这个泥潭的帮助将不胜感激!

haskell

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

如何更改tmux中的时钟模式

所以我在一个tmux会话中,我不小心按下了C-b t.现在恰好是一个"大钟"模式.我无法退出这种模式.:((.帮助..会话在后台运行一个长期的过程.

tmux

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

在python中使用正则表达式获取一组数字

假设我有以下字符串

string = "serial 7's 93-86-79-72-65 very slow, recall 3/3 "
Run Code Online (Sandbox Code Playgroud)

现在,我想在 Python 中使用正则表达式找到一组数字。请注意,数字前面必须"serial 7's"我尝试过的以下内容:

re.findall('(?<=serial 7\'s )(\d+, )', string)
re.findall('(?<=serial 7\'s )(\d+, )+', string)
Run Code Online (Sandbox Code Playgroud)

似乎没有任何效果。请注意,我们尝试提取的整数数量可能未知。我只想要具有特定模式的数字。不是其他可能分散在文本中的数字。

预期输出: ['93','86','79','72','65']

regex python-3.x

7
推荐指数
2
解决办法
2644
查看次数

使用上下文管理器连接到 sqlite3 数据库

我想创建一个class用于数据库访问的数据库,其中我希望程序员可以选择在上下文管理器(语句with)中使用该类。所以我尝试使用以下代码:

class dbAccess:

    def __init__(self, fileName):
        self.conn = sql.connect(fileName)
        self.c = conn.cursor()

    def __enter__(self, fileName):
        self.conn = sql.connect(fileName)
        self.c = conn.cursor()

    def __exit__(self):
        self.conn.close()
Run Code Online (Sandbox Code Playgroud)

现在我还希望用户能够在上下文管理器之外使用它。就像文件一样open()。所以我想知道如何知道是否self.conn已经连接到数据库,以便用户使用它时,他/她不会遇到冲突?基本上,我想做类似的事情:

    def __enter__(self, fileName):
        if not alreadyConnected():
            self.conn = sql.connect(fileName)
            self.c = conn.cursor()
Run Code Online (Sandbox Code Playgroud)

那么我该如何找出这个alreadyConnected函数呢?

python sqlite

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

haskell源文件中的一行与GHCI中的一行之间的差异

Haskell新手在这里请原谅,如果问题太简单了.它只是我似乎无法处理为什么文件中的某些东西是好的,但在GHCI中没有.例如,我在文件中有以下行:

showLst :: [[Int]] -> IO ()
showLst = putStrLn . unlines . map show
Run Code Online (Sandbox Code Playgroud)

这需要一个m × n数组并在屏幕上打印结果.一个非常方便的功能.但是,当我快速检查GHCI并且我想要相同的功能时,我尝试在GHCI中定义相同的功能,如下所示:

>> let showLst = putStrLn . unlines . map show
>> showLst [[1,2,3], [4,5,6], [7,8,9]]
Run Code Online (Sandbox Code Playgroud)

我收到类型错误.所以我尝试了几种变化:

>> (showLst [[1,2,3], [4,5,6], [7,8,9]]) :: IO ()
>> (showLst:: [[Int]] -> IO ()) [[1,2,3], [4,5,6], [7,8,9]] 
>> (showLst [[1,2,3], [4,5,6], [7,8,9]]) :: [[Int]] -> IO () -- which us wrong anyway
>> showLst [[1,2,3], [4,5,6], [7,8,9]] :: [[Int]] -> IO () -- which …
Run Code Online (Sandbox Code Playgroud)

haskell

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

恢复后的 tensorflow 批量标准化

假设我们创建了一个小型网络:

tf.reset_default_graph()
layers      = [5, 3, 1]
activations = [tf.tanh, tf.tanh,  None]

inp = tf.placeholder(dtype=tf.float32, shape=(None, 2 ), name='inp')
out = tf.placeholder(dtype=tf.float32, shape=(None, 1 ), name='out')

isTraining = tf.placeholder(dtype=tf.bool, shape=(), name='isTraining')

N = inp * 1 # I am lazy
for i, (l, a) in enumerate(zip(layers, activations)):
    N = tf.layers.dense(N, l, None)
    #N = tf.layers.batch_normalization( N,  training = isTraining) # comment this line
    if a is not None:
        N = a(N)

err = tf.reduce_mean((N - out)**2)
update_ops = tf.get_collection(tf.GraphKeys.UPDATE_OPS)
with …
Run Code Online (Sandbox Code Playgroud)

python-3.x tensorflow

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

如何在Haskell中无限期地在同一个State monad中连接一个状态?

从Haskell开始,一直停留在State Monad ......

所以我试图在Haskell中掌握State Monad,并理解它,我正在编写一个代码来生成PRBS序列.对于感兴趣的人,它在论文'Pseudo Random Sequences and Arrays'中描述,其免费副本可以通过doi获得:10.1109/PROC.1976.10411.

必要的代表团很简单.你有一个移位寄存器和一个生成多项式.生成多项式告诉您移位寄存器的哪些位采用并求和(模2)以获得移位寄存器的MSB.在下一次迭代中,您采用此计算的MSB并执行右移操作后将其粘贴到移位寄存器的MSB .

没有monad这样做的代码非常简单:

import Data.List

m = (4::Int)              -- This is the degree of the polynomial
p = tail $ [4, 1, 0]      -- This is a actual polynomial
s = 1 : replicate (m-1) 0 -- This is the initial state. Note that the head is the MSB

chSt poly s = msb poly s : init s -- changes the shift …
Run Code Online (Sandbox Code Playgroud)

haskell state-monad

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

不确定如何使用`$`函数

在尝试编写一个用于转置列表列表的函数时,我看到了一些非常好奇的东西.我试过了:

> let abc xs | null (head xs) = [] | otherwise = map head xs : abc $ map tail xs
Run Code Online (Sandbox Code Playgroud)

并得到一个错误.然后我尝试了:

> let abc xs | null (head xs) = [] | otherwise = map head xs : abc ( map tail xs )
> abc [[1,2,3], [4,5,6], [7,8,9]]
[[1,4,7],[2,5,8],[3,6,9]]
Run Code Online (Sandbox Code Playgroud)

我被引导相信$可以使用运算符而不是括号,而那更像是Haskellish.为什么我收到错误?

haskell brackets operators

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

在 Sphinx 文档期间覆盖 .rst 文件

假设我们有一个如下所示的文档结构

.
|____src
| |____abc.py
|____docs
Run Code Online (Sandbox Code Playgroud)

现在我们使用以下命令生成文档:

sphinx-apidoc -F -o docs src
Run Code Online (Sandbox Code Playgroud)

这会在./docs/文件夹中生成多个文件,其中包括./docs/abc.rst,我现在可以使用文件夹make html中的来构建它./docs/

现在,在添加一些附加功能后,./src/abc.py我想重建文档。我尝试了同样的操作,Sphinx 说其余文件已经存在,因此它没有得到更新。我必须手动删除相关文件才能更新文档。

现在的问题是,如何在不删除.rst文件的情况下完成整个过程。

python python-sphinx sphinx-apidoc

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

关闭文件的好方法

我们说,我们有以下代码:

from sys import exit

def parseLine(l):
    if '#' not in l: 
        print 'Invalid expresseion'
        exit(1)
    return l


with open('somefile.txt') as f:
    for l in f:
        print parseLine(l)
Run Code Online (Sandbox Code Playgroud)

(请注意,这是一个演示代码.实际的程序要复杂得多.)

现在,当我退出程序时,如何知道是否已安全关闭所有打开的文件?此时我只是假设文件已经关闭.目前我的程序工作正常,但我希望它们健壮,没有与未正确关闭的文件相关的问题.

python

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