小编Pan*_*nos的帖子

在序列计算表达式中产生for循环

为什么这些工作

let x = seq { for i in 1 .. 10 do yield i }
let x = seq { for i in 1 .. 10 -> i }
let x = seq { for i = 1 to 10 do yield i }
Run Code Online (Sandbox Code Playgroud)

但这一个不?

let x = seq { for i = 1 to 10 -> i }
Run Code Online (Sandbox Code Playgroud)

f# sequence

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

第一个Functor Law是否遵循第二个?

根据这个问题,Haskell的第1章隐含了第二条Functor法:

1st Law: fmap id = id
2nd Law : fmap (g . h) = (fmap g) . (fmap h)
Run Code Online (Sandbox Code Playgroud)

反之亦然吗?从第二定律开始,设定g相等id,我可以推理以下内容并获得第一定律吗?

fmap (id . h) x = (fmap id) . (fmap h) x
fmap h x = (fmap id) . (fmap h) x
x' = (fmap id) x'
fmap id = id
Run Code Online (Sandbox Code Playgroud)

哪里 x' = fmap h x

haskell functor

9
推荐指数
2
解决办法
515
查看次数

记录F#中的方法

我为我的场景写了一个简单的例子.我创建了一个记录类型Switch

type State =
    | On
    | Off
    with
        member this.flip =
            match this with
            | On -> Off
            | Off -> On

type Switch = { State : State }
Run Code Online (Sandbox Code Playgroud)

然后我写了一个函数,它创建了一个元素更改的记录副本

let flip switch = { switch with State = switch.State.flip } 
Run Code Online (Sandbox Code Playgroud)

flip很多次连续写我

let flipMany times switch =
    [1 .. times]
    |> List.fold (fun (sw : Switch) _ -> flip sw) switch
Run Code Online (Sandbox Code Playgroud)

如果我想把这两个函数作为方法放在记录上,我会写

type Switch =
    { State : State }
    member this.flip = 
        { this …
Run Code Online (Sandbox Code Playgroud)

f# records

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

相当于Haskell scanl/scanr的F#

有一个F#等价的Haskell scanl/ scanr?这些函数执行折叠,但它们以列表的形式报告所有中间累加器状态.

f# haskell fold

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

标签 统计

f# ×3

haskell ×2

fold ×1

functor ×1

records ×1

sequence ×1