小编Aar*_*ack的帖子

什么是 Scala 的 Seq.Span 在 F# 中的等价物?

引用Scala 的文档

def span(p: (A) => Boolean): (Seq[A], Seq[A])
Run Code Online (Sandbox Code Playgroud)

根据谓词将此可迭代集合拆分为前缀/后缀对。

注意:c span p 等价于(但可能比)(c takeWhile p, c dropWhile p)等价,前提是谓词 p 的计算不会引起任何副作用。

注意:对于不同的运行可能会返回不同的结果,除非对基础集合类型进行了排序。

  • p - 测试谓词
  • 返回 - 由这个可迭代集合的最长前缀组成的一对,其元素都满足 p,以及这个可迭代集合的其余部分。
  • 定义类 - IterableOps ?可迭代的OnceOps
  • 注意 - 重用:调用此方法后,应丢弃调用它的迭代器,只使用返回的迭代器。使用旧迭代器是未定义的,可能会发生变化,并且也可能导致对新迭代器的更改。

在查看Seq的F# 文档时,我没有看到任何等效内容。

groupBy、partition、splitAt,它们都不符合我想要做的。这就像同时执行 takeWhile 和 skipWhile,但不需要两次迭代,您只需要一个函数将返回 (takeWhile, skipWhile) 元组的迭代。

输出应与以下函数匹配

module List
let span (predicate: 'a -> bool) (list: 'a list): ('a list * 'a list) =
    (list |> List.takeWhile predicate, list |> List.skipWhile predicate)
Run Code Online (Sandbox Code Playgroud)

但只需要一次迭代,因为我的序列可能是无限的。

[1;2;3;4] |> List.span (fun …
Run Code Online (Sandbox Code Playgroud)

.net f# scala

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

如何使用序列在F#中创建无限集的幂集(组合)?

这是我对这个问题的失败尝试,任何帮助将不胜感激.

我试图找到最好的算法,用于在热切列表上工作的电源组.这部分似乎工作正常.我遇到问题的部分是将它转换为与Sequences一起使用,以便它可以在流\无限列表上运行它.我真的不喜欢yield语法,因为我不太了解它但我宁愿不使用yield语法.

//All Combinations of items in a list
//i.e. the Powerset given each item is unique
//Note: lists are eager so can't be used for infinite
let listCombinations xs =
    List.fold (fun acc x ->
        List.collect (fun ys -> ys::[x::ys]) acc) [[]] xs

//This works fine (Still interested if it could be faster)
listCombinations [1;2;3;4;5] |> Seq.iter (fun x -> printfn "%A" x)

//All Combinations of items in a sequence
//i.e. the Powerset given each item is unique
//Note: …
Run Code Online (Sandbox Code Playgroud)

math f# functional-programming visual-studio

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

将Haskell多态余弦函数转换为F#

我正在尝试将一些Haskell代码转换为F#,但我遇到了一些麻烦,因为Haskell默认是懒惰而F#不是.我还在学习F#的方式.下面是Haskell中的多态余弦函数,具有相当好的性能.我想尝试在F#中保持相同或更好的性能参数.我希望看到一个F#List版本和一个F#Seq版本,因为Seq版本更像是懒惰的Haskell,但List版本可能会表现得更好.谢谢你的帮助.

效率:使用的算术运算数与串联项数成比例

空间:使用恒定空间,与术语数量无关

takeThemTwoByTwo xs =
    takeWhile (not . null) [take 2 ys | ys <- iterate (drop 2) xs]

products xss = [product xs | xs <- xss]

pairDifferences xs =
    [foldr (-) 0 adjacentPair | adjacentPair <- takeThemTwoByTwo xs]

harmonics x = [x/(fromIntegral k) | k <- [1 ..]]

cosineTerms = scanl (*) 1 . products . takeThemTwoByTwo . harmonics

cosine = foldl (+) 0 . pairDifferences .
    take numberOfTerms . cosineTerms
Run Code Online (Sandbox Code Playgroud)

polymorphism f# haskell functional-programming inline

4
推荐指数
2
解决办法
811
查看次数

如何覆盖 DynamicMetaObject.BindConvert 以接受 Cast to Interface

使用下面的代码,我试图让 BindConverter 的覆盖正确,以允许转换到接口 T

class DynamicProxy<T> : DynamicObject
{
    private T t;
    public DynamicProxy(T t)
    {
        this.t = t;
    }
    public override DynamicMetaObject GetMetaObject(Expression parameter)
    {
        return new DynamicProxyMetaObject(parameter, this);
    }
    class DynamicProxyMetaObject : DynamicMetaObject
    {
        public DynamicProxyMetaObject(Expression expression, DynamicObject value)
            : base(expression, BindingRestrictions.Empty, (object)value)
        {                
        }
        public override DynamicMetaObject BindConvert(ConvertBinder binder)
        {
            return base.BindConvert(binder);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

c# proxy dynamic

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

Visual Studio 2010 SP1和有形T4 Editor Pro v1.950崩溃

错误说

我在C:\ Users \\ AppData\Local\assembly\dl3\4WT9GZ6E.WD1\0CNLWRJ6.ODR\3f01d2db\26ba7213_ebf0cb01中缺少ActiproSoftware.CSharpHostLanguage.xml,并在打开.tt或.ttinclude文件时崩溃.

我有visual studio 2010 sp1和windows 7 sp1 x86(32bit).

有形T4编辑器是v1.950.

欢迎任何建议.谢谢.

更新:最新版本1.962修复此问题.

t4 visual-studio-2010 windows-7 visual-studio-2010-sp1 tangible-t4-editor

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