我正在编写一些代码(Metropolis-Hastings MCMC采样器),它将使用随机数生成器,并基于此修改数组和其他可能的结构.
我最初的想法是使用ST monad,这样我就可以使用ST数组和mersenne-random-pure64包,保持PureMT生成器成为状态的一部分.
但是我希望能够将一些工作拆分成单独的辅助函数(例如,在给定范围内对随机整数进行采样,更新数组结构,以及可能更复杂的事情).要做到这一点,我想我需要将对PureMT gen和数组的引用传递给所有函数,如果我需要存储更多状态,这很快就会变得非常难看.
我的直觉是将所有状态组合成一个我可以在任何地方访问的单一数据类型,因为我会通过定义一个新的数据类型来使用State monad,但我不知道这对ST monad是否可行,或者正确的方式去做.
做这种事情有什么好的模式吗?我希望尽可能保持一般性,因为我可能需要添加额外的状态并在现有部分周围构建更多的monadic代码.
我试过寻找ST monad代码的例子,但它似乎没有被Real World Haskell所涵盖,并且haskell wiki示例非常简短.
谢谢!
在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) Mono(2.11)上的尾调用优化(TCO)实现的当前状态是什么?在某处读取需要修改所有代码库以使用callee-pops-arguments约定.这种变化的状态如何?ARM/Linux端口是否是最新的?
谢谢!
我知道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#,我遇到了一个非常奇怪的问题,当我使用FSharp PowerPack中的某些方法时会抛出System.MissingMethodException.
对于同一模块中的所有方法都不会发生这种情况.如果我将程序集编译为Application而不是类库,也不会发生这种情况.
复制步骤:
在每个装配中创建以下测试夹具.
open NUnit.Framework
[<TestFixture>]
type Tests() = class
[<Test>]
member self.OfSeq() =
// Will always succeed
Matrix.Generic.ofSeq [[1]] |> ignore
[<Test>]
member self.OfList() =
// Will fail under certain conditions with a System.MissingMethodException
Matrix.Generic.ofList [[1]] |> ignore
end
Run Code Online (Sandbox Code Playgroud)当我这样做时,应用程序运行正常(所有测试都通过),但类库失败,出现以下异常:
System.MissingMethodException : Method not found: 'Microsoft.FSharp.Math.Matrix`1<!!0> Generic.ofList(Microsoft.FSharp.Collections.FSharpList`1<Microsoft.FSharp.Collections.FSharpList`1<!!0>>)'.
at Temp2.Tests.OfList()
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?
产生问题的另一种方法是matrix.PermuteColumns.
附加信息:
如果有其他信息可以使用,请告诉我.
在Don Syme,Adam Granicz和Antonio Cisternino的专家F#2.0中,pg.44
类型推断:使用|>运算符可以输入从输入对象到操作这些对象的函数的信息流.F#使用从类型推断收集的信息来解析某些语言结构,例如属性访问和方法重载.这依赖于通过程序文本从左到右传播的信息.特别是,在解决属性访问和过载时,不考虑位置右侧的类型信息.
所以显然使用|>可以帮助进行类型推断.
与往常一样,声明类型也很有帮助.
是否有其他手段/策略可用于帮助F#类型推断?
编辑
正如RamonSnir正确指出的那样,应该让类型推断做尽可能多的工作.因此,添加类型声明只是因为你可以不应该做什么.不要把这个问题或答案视为应该做的事情.我问这个问题是为了帮助更好地理解类型推断的细微差别,以及在类型推断需要帮助的情况下可能有什么帮助.因此,如果类型推断可以在没有帮助的情况下解析所有类型,那么不要给它任何,但是当它确实时,知道一些方法来帮助它会很好.
我只是阅读了一些关于Haskell的内容,并看到了它的方法interact,该方法实现了从stdin读取输入的常见模式,将函数应用于字符串,并将结果写回stdout.所以,例如:
interact (map toUpper)
Run Code Online (Sandbox Code Playgroud)
打印出stdin转换为大写的所有内容.
在F#/ .Net中是否已经存在相当于此的内容?
我正在尝试使用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) 我试图在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) 任何人都可以举例说明如何使用新数据和类似于此的不同类来微调预训练的imagenet网络:
f# ×7
haskell ×2
tensorflow ×2
.net ×1
arm ×1
clr ×1
f#-powerpack ×1
guard-clause ×1
immutability ×1
linux ×1
monads ×1
mono ×1
shadowing ×1
state ×1