小编Guy*_*der的帖子

在ST monad中跟踪函数之间的几个引用的好方法?

我正在编写一些代码(Metropolis-Hastings MCMC采样器),它将使用随机数生成器,并基于此修改数组和其他可能的结构.

我最初的想法是使用ST monad,这样我就可以使用ST数组和mersenne-random-pure64包,保持PureMT生成器成为状态的一部分.

但是我希望能够将一些工作拆分成单独的辅助函数(例如,在给定范围内对随机整数进行采样,更新数组结构,以及可能更复杂的事情).要做到这一点,我想我需要将对PureMT gen和数组的引用传递给所有函数,如果我需要存储更多状态,这很快就会变得非常难看.

我的直觉是将所有状态组合成一个我可以在任何地方访问的单一数据类型,因为我会通过定义一个新的数据类型来使用State monad,但我不知道这对ST monad是否可行,或者正确的方式去做.

做这种事情有什么好的模式吗?我希望尽可能保持一般性,因为我可能需要添加额外的状态并在现有部分周围构建更多的monadic代码.

我试过寻找ST monad代码的例子,但它似乎没有被Real World Haskell所涵盖,并且haskell wiki示例非常简短.

谢谢!

monads state haskell

8
推荐指数
2
解决办法
475
查看次数

模式匹配与守卫vs在F#中的if/else构造

在ML系列语言中,人们倾向于选择模式匹配来if/else构建.在F#中,在模式匹配中使用防护装置if/else在很多情况下很容易替换.

例如,delete1可以在不使用if/else(参见delete2)的情况下重写一个简单的函数:

let rec delete1 (a, xs) =
    match xs with
    | [] -> []
    | x::xs' -> if x = a then xs' else x::delete1(a, xs') 

let rec delete2 (a, xs) =
    match xs with
    | [] -> []
    | x::xs' when x = a -> xs'
    | x::xs' -> x::delete2(a, xs') 
Run Code Online (Sandbox Code Playgroud)

另一个例子是求解二次函数:

type Solution =
    | NoRoot
    | OneRoot of float
    | TwoRoots of float * float

let …
Run Code Online (Sandbox Code Playgroud)

f# functional-programming pattern-matching guard-clause

8
推荐指数
2
解决办法
3613
查看次数

Fo on Mono(2.11)的尾调用优化的当前状态是什么?

Mono(2.11)上的尾调用优化(TCO)实现的当前状态是什么?在某处读取需要修改所有代码库以使用callee-pops-arguments约定.这种变化的状态如何?ARM/Linux端口是否是最新的?

谢谢!

linux mono f# arm tail-call-optimization

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

在F#中不可变

我知道F#中的变量默认是不可变的.但是,例如在F#interactive中:

  > let x = 4;;

val x : int = 4

> let x = 5;;

val x : int = 5

> x;;
val it : int = 5
> 
Run Code Online (Sandbox Code Playgroud)

所以,我将4分配给x,然后将5分配给x并且它正在改变.这是对的吗?它应该给出一些错误或警告吗?或者我只是不明白它是如何工作的?

f# immutability shadowing

8
推荐指数
2
解决办法
1315
查看次数

将OCaml转换为F#:键入和类型推断之间的差异

在研究F#和OCaml之间的类型推断差异时,我发现他们倾向于关注主格结构 类型系统.然后我发现了函数式编程语言的独特特征,它将打字和类型推断列为不同的特征.

由于特质文章说OCaml和F#都使用Damas-Milner类型推断,我认为这是一种标准算法,即一种不允许变化的算法,这两个特征如何相关?难道Damas-Milner是构建两个类型推理系统的基础,但是他们每个都根据打字修改Damas-Milner?

我还检查了F#源代码中的Damas,Milner和Hindley这两个词,但没有找到.搜索单词推断会调出类型推断的代码.

如果是这样,是否有任何论文讨论特定语言的每种类型推断算法的细节,或者我必须查看OCamlF#的源代码.

编辑

这是一个页面,突出显示与OCaml和F#之间的类型推断相关的一些差异.

f# ocaml type-inference typing

8
推荐指数
2
解决办法
686
查看次数

F#中的尾递归和异常

我一直在谷歌搜索多年,仍然找不到答案.根据我的理解,如果调用者在try/catch和/或try/finally块中包装了调用,那么在.NET 4.5上运行的F#3.0将不会对递归方法使用尾递归.如果有一个try/catch或者try/finally几个级别的堆栈会是什么情况?

.net f# tail-recursion

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

EitherT如何运作?

我花了一半时间试图弄清楚如何使用EitherT作为处理代码中错误的方法.

我已经定义了这样的变压器堆栈.

-- Stuff Monad

data StuffConfig = StuffConfig {
  appId     :: T.Text,
  appSecret :: T.Text
}

data StuffState = StuffState {
  stateToken :: Maybe Token,
  stateTime  :: POSIXTime
}

newtype Stuff a = Stuff {
  runStuff :: (ReaderT StuffConfig (StateT StuffState (EitherT T.Text IO))) a
} deriving (Monad, Functor, Applicative, 
            MonadIO, 
            MonadReader StuffConfig,
            MonadState StuffState
            )



askStuff :: StuffConfig -> Stuff a -> IO (Either T.Text a)
askStuff config a = do
  t <- getPOSIXTime 
  runEitherT (evalStateT (runReaderT (runStuff …
Run Code Online (Sandbox Code Playgroud)

error-handling haskell monad-transformers either

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

如何从f#中的表达式返回单位

我如何unit从f#中的表达式返回?例如:

let readInt =
        let str = Console.ReadLine()
        let (succ, num) = Int32.TryParse(str)
        match succ with
        | true -> Some(num)
        | _ -> None

    match readInt with
    | Some(v) -> Console.WriteLine(v)
    | None -> ignore //i don't want to do anything,
//     but i don't know how to ignore this brunch of the expression
Run Code Online (Sandbox Code Playgroud)

f# unit-type

8
推荐指数
3
解决办法
1879
查看次数

CLR .tail指令是否禁用抢占式GC?

我正在尝试使用Windows服务调试生产问题,一旦多个并发连接处于活动状态,该服务就会迅速崩溃.通过核心转储和DebugDiag的神奇之处,我发现有一个挂起的GC操作,直到几个Preemptive GC禁用的线程完成了他们的工作才能启动.

以下是来自WinDbg的示例线程转储,显示了有问题的线程:

26   6e  1444 00..440   8009222 Disabled 00..200:00..f88 00..7a0     0 MTA (Threadpool Completion Port)
27   c1  1a0c 00..fe0   8009222 Disabled 00..e90:00..f88 00..7a0     0 MTA (Threadpool Completion Port)
28   b5  17bc 00..6f0   8009222 Disabled 00..268:00..f88 00..7a0     0 MTA (Threadpool Completion Port)
29   89  1f1c 00..ab0   8009222 Disabled 00..a30:00..f88 00..7a0     0 MTA (Threadpool Completion Port)
30   ac  2340 00..f70   8009220 Disabled 00..d00:00..d08 00..7a0     1 MTA (GC) (Threadpool Completion Port)
31   88  1b64 00..fd0   8009220 Enabled  00..b28:00..b48 00..7a0     0 MTA (Threadpool …
Run Code Online (Sandbox Code Playgroud)

.net clr f# garbage-collection tail-recursion

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

TensorFlow中的基本神经网络

我试图在TensorFlow中实现一个非常基本的神经网络,但我遇到了一些问题.这是一个非常基本的网络,作为值(小时或睡眠和学习时间)的输入,并预测测试的分数(我在你的管上找到了这个例子).所以基本上我只有一个隐藏层有三个单元,每个单元计算一个激活函数(sigmoid),成本函数是平方误差的总和,我使用梯度下降来最小化它.所以问题是,当我使用训练数据训练网并尝试使用相同的训练数据进行一些预测时,结果不完全匹配,并且它们看起来也很奇怪,因为看起来彼此相等.

import tensorflow as tf
import numpy as np
import input_data

sess = tf.InteractiveSession()

# create a 2-D version of input for plotting
trX = np.matrix(([3,5], [5,1],[10,2]), dtype=float)
trY = np.matrix(([85], [82], [93]), dtype=float) # 3X1 matrix
trX = trX / np.max(trX, axis=0)
trY = trY / 100 # 100 is the maximum score allowed

teX = np.matrix(([3,5]), dtype=float)
teY = np.matrix(([85]), dtype=float)
teX = teX/np.amax(teX, axis=0)
teY = teY/100

def init_weights(shape):
    return tf.Variable(tf.random_normal(shape, stddev=0.01))

def model(X, w_h, w_o):
    z2 …
Run Code Online (Sandbox Code Playgroud)

tensorflow

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