小编Fra*_*ini的帖子

如何使用具有静态解析类型参数的静态扩展方法?

我想使用静态解析的类型参数和我添加到内置类型的一些扩展方法,比如float32int32,所以我尝试了以下方法:

module Foo =
    type System.Single with
        static member Bar x = x + 1.0f

    let inline bar (x : ^a) =
        (^a : (static member Bar : ^a -> ^a) x)

open Foo
[<EntryPoint>]
let main argv =
    System.Console.WriteLine (bar 1.0f) (* Compilation fails here *)
    0
Run Code Online (Sandbox Code Playgroud)

编译器抱怨说The type 'float32' doesn't support the operator 'Bar'.我究竟做错了什么?

extension-methods f# operators

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

改进朴素的 qsort 实现

我开始学习 Haskell,我一直在阅读Haskell wiki 上的这个页面,它报告了这个 qsort 实现:

 qsort :: (Ord a) => [a] -> [a]
 qsort []     = []
 qsort (x:xs) = qsort less ++ [x] ++ qsort more
     where less = filter (<x)  xs
           more = filter (>=x) xs
Run Code Online (Sandbox Code Playgroud)

接着是警告说这不是最有效的方法,并链接了一篇文章,该文章显示了相同算法的极其冗长的版本。只是看着它,我认为那不是我学习 Haskell 的目的,我想在不牺牲其优雅的情况下制作初始 qsort 的更好版本。我主要集中在消除filter每次调用运行两次的需要,这就是我提出的:

filter' :: (a -> Bool) -> [a] -> ([a], [a])
filter' _ [] = ([], [])
filter' f a = filterInternal a ([], [])
  where
    filterInternal …
Run Code Online (Sandbox Code Playgroud)

haskell quicksort

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

OCaml模式中的"模式预期"与变体匹配

在尝试编译以下代码段时:

type 'a frame = Empty | Frame of string * 'a * 'a frame

let rec searchFrame f s = match f with
  | Empty -> None
  | Frame(x, val, fr) -> if x == s then
                           Some(val)
                         else
                           searchFrame fr s;;
Run Code Online (Sandbox Code Playgroud)

Error: Syntax error: pattern expected.在第二个匹配的情况下得到一个错误,对应于val.我无法弄清楚我在这里做错了什么:基本上val应该对应一个类型的值'a,但我要求我放置一个模式.我怎么解决这个问题?

ocaml variant pattern-matching

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