在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)
请注意,代码的有效部分应该只是列表的实际总和,而不是生成.
非常感谢.
假设我想在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创建?
我有点不清楚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)
谢谢你的帮助.
我有一个具有以下代码的函数的情况:
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返回一个空字符串切片?
我将如何创建一个简单的调度程序,将每个项目延迟一秒?我想将它用于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.
我有一个函数将数据写入任何实现接口的Write(b []byte) (n int, err error)方法.现在在我的程序中,我写了一个实际的Conn,但遵循最佳实践(https://dave.cheney.net/2016/08/20/solid-go-design),因为我只打电话Write,我想接受最低限度实现该方法的接口.为此,我接受带接口的参数io.Writer.
由于我的功能可以非常快速地输出大量数据,我应该接受bufio.Writer吗?或者功能的消费者责任是使用缓冲编写器而不是普通编写器?什么是最佳做法?
我有代码循环数组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)