小编Ser*_*lla的帖子

在Racket中有效的随机数列表和

在Racket中首先生成然后求和随机整数列表的最有效方法是什么?

我试图在https://scottlocklin.wordpress.com/2011/11/30/only-fast-languages-are-interesting中实现相当的代码,但我只能提出缓慢的实现.

我的第一次天真尝试(不是随机整数,但无论如何):

(define (sum-list l)
  (if (null? l)
      0
      (+ (first l) (sum-list (rest l)))))

(define avector 
    (build-vector 3000000 add1))

(time (sum-list avector))
Run Code Online (Sandbox Code Playgroud)

请注意,代码的有效部分应该只是列表的实际总和,而不是生成.

非常感谢.

optimization scheme list vector racket

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

Go中的变量泛型参数

假设我想在Go中为切片创建等效的JavaScriptArray.splice函数.我有以下代码:

func splice(slice []int, index, amount int, elements ...int) []int {
    newslice := make([]int, 0)
    for i := 0; i < index; i++ {
        newslice = append(newslice, slice[i])
    }
    for i := index + amount; i < len(slice); i++ {
        newslice = append(newslice, slice[i])
    }
    for _, el := range elements {
        newslice = append(newslice, el)
    }
    return newslice
}
Run Code Online (Sandbox Code Playgroud)

此示例将起作用,但仅适用于类型的参数int.我想让它变得通用,我知道我应该给variadic参数elements类型interface{},但是如何从函数内部创建一个具有该接口类型的新切片?

换句话说,如何根据函数第一行中参数的类型动态指定切片的类型,在何处newslice创建?

go slice polyvariadic

3
推荐指数
2
解决办法
451
查看次数

不清楚OCaml参数的默认值

我有点不清楚var_cOCaml中这个函数定义的确切价值.是否分配var_c了函数结果的默认值?或Enum.peek var_cvar_c 的默认值?

let rec read var_a ?(var_b = var_a) var_c = match Enum.peek var_c with
    None -> None
    ...
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助.

ocaml arguments default

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

不能返回nil,而是切片的零值

我有一个具有以下代码的函数的情况:

func halfMatch(text1, text2 string) []string {
    ...
    if (condition) {
         return nil // That's the final code path)
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

正在返回[]string(nil)而不是零.起初,我认为可能nil在具有特定返回类型的函数中返回将仅返回该类型的零值实例.但后来我尝试了一个简单的测试,事实并非如此.

有谁知道为什么会nil返回一个空字符串切片?

go

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

创建一个简单的调度程序

我将如何创建一个简单的调度程序,将每个项目延迟一秒?我想将它用于Observable,是的,我知道可以通过多种其他方式完成,我想要使用自定义调度程序完成它.

这里有一些相关的教程:http://codebetter.com/matthewpodwysocki/2010/05/12/introduction-to-the-reactive-extensions-for-javascript-custom-schedulers/但它已经过时了,API看起来非常现在不同了.

The current docs are not very usefuleither, but I guess I should be using Rx.Scheduler.prototype.schedulePeriodic, although I don't know what the action parameter should be.

rxjs

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

`bufio.Writer`或`io.Writer`?

我有一个函数将数据写入任何实现接口的Write(b []byte) (n int, err error)方法.现在在我的程序中,我写了一个实际的Conn,但遵循最佳实践(https://dave.cheney.net/2016/08/20/solid-go-design),因为我只打电话Write,我想接受最低限度实现该方法的接口.为此,我接受带接口的参数io.Writer.

由于我的功能可以非常快速地输出大量数据,我应该接受bufio.Writer吗?或者功能的消费者责任是使用缓冲编写器而不是普通编写器?什么是最佳做法?

interface go

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

循环和地图参考

我有代码循环数组Task并使用字符串键和Task值创建一个Map :

package main

import (
    "fmt"
)

type Task struct {
    Name    string
    Project string
}

func main() {
    taskMap := map[string]*Task{}
    taskList := []Task{
        {
            Name:    "name1",
            Project: "project1",
        },
        {
            Name:    "name2",
            Project: "project2",
        },
        {
            Name:    "name3",
            Project: "project3",
        },
    }
    for _, task := range taskList {
        taskMap[task.Name] = &task
    }

    // Print results
    for k, v := range taskMap {
        fmt.Println(k, v)
    }
}
Run Code Online (Sandbox Code Playgroud)

此代码的输出如下:

name1 &{name3 project3}
name2 &{name3 …
Run Code Online (Sandbox Code Playgroud)

pointers loops go

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