小编gbi*_*ing的帖子

自定义展开返回累加器

我正在尝试创建一个自定义展开函数,返回其最后一个累加器值,如:

val unfold' : generator:('State -> ('T * 'State) option) -> state:'State -> 'T list * 'State
Run Code Online (Sandbox Code Playgroud)

我设法做了以下事情:

let unfold' generator state =
    let rec loop resultList state =
        match generator state with
        | Some (value, state) -> loop (value :: resultList) state
        | None -> (List.rev resultList), state
    loop [] state
Run Code Online (Sandbox Code Playgroud)

但是我想避免List.rev使用生成的列表并使用正确的顺序生成它.我想有必要使用continuation来构建列表,但我对函数式编程很陌生,并且还没有设法将我的思想包含在继续中; 我能想象的所有替代方案都会将累加器放在结果列表中,或者不允许函数返回它.

有办法做到这一点吗?

由于这是一个个人学习练习,我宁愿回答一个解释如何做,而不是简单地给出完整的代码.

recursion f# tail-recursion list unfold

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

使用关键字作为打字稿中的标识符

我正在尝试将class关键字用作命名空间中的函数标识符,例如:

namespace X {
   export function class( ... ) { ... }
}
Run Code Online (Sandbox Code Playgroud)

命名空间本身正在扩展一个函数(function X ( ... ) { ... })。

有什么办法可以做到吗?

typescript

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

yield无法使用自定义枚举/枚举器

最近我开始了一个业余爱好项目来重写集合结构,首先删除非泛型,IEnumeratorIEnumerable创建新的IEnumerator/IEnumerable基接口.当我在新的可枚举界面和正常界面之间创建转换时,我很快就遇到了产量问题.

IEnumerable<T>IEnumerator<T>正常的一样,除了它们不从非通用的继承.为什么不能使用我的接口?foreach可以使用我的界面.

例:

public static System.Collections.Generic.IEnumerable<T> ToMSEnumerable(this My.IEnumerable<T> enumerable)
{
    foreach (var item in enumerable) // enumerating my enumerable works
    {
        yield return item; // this works
    }
}

public static My.IEnumerable<T> ToMyEnumerable(this System.Collections.Generic.IEnumerable<T> enumerable)
{
    foreach (var item in enumerable) // obviously work
    {
        yield return item; // this is where its not working.
                           // I haven't touched this in a few day, so I don't remember
                           // the …
Run Code Online (Sandbox Code Playgroud)

c# yield

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

标签 统计

c# ×1

f# ×1

list ×1

recursion ×1

tail-recursion ×1

typescript ×1

unfold ×1

yield ×1