In a version prior to the release of go 1.5 of the Tour of Go website, there's a piece of code that looks like this.
package main
import (
"fmt"
"runtime"
)
func say(s string) {
for i := 0; i < 5; i++ {
runtime.Gosched()
fmt.Println(s)
}
}
func main() {
go say("world")
say("hello")
}
Run Code Online (Sandbox Code Playgroud)
The output looks like this:
hello
world
hello
world
hello
world
hello
world
hello
Run Code Online (Sandbox Code Playgroud)
What is bothering me is that when runtime.Gosched() is …
有什么方法可以完成Haskell的类型类在OCaml中的作用?基本上,我想编写一个多态函数而不需要编写太多代码.进行多态的典型方法是提供一个额外的参数,告诉函数它当前正在处理什么类型.例如,假设我要对一个int列表进行排序,我必须将另一个比较器传递给该函数.
type comparison = Lesser | Equal | Greater
my_sort : (a' -> a' -> comparison) -> 'a list -> 'a list
Run Code Online (Sandbox Code Playgroud)
反正有没有告诉OCaml我的类型是可比较的,而不是为我想要排序的每种类型编写比较器函数?这意味着我的排序功能看起来像这样:
my_sort : 'a list -> 'a list
Run Code Online (Sandbox Code Playgroud) 例如,如果我想找出类型\ f g h -> g (h f),我可以使用ghci解释器中的指令,如下所示:
Prelude> :t \ f g h -> g (h f)
\ f g h -> g (h f) :: t2 -> (t1 -> t) -> (t2 -> t1) -> t
Run Code Online (Sandbox Code Playgroud)
OCaml是否有相同的功能?
我有这段包含camlp4报价的代码.
let f_name = "my_func"
<:str_item< value $lid:f_name$ a = a * 2 >>
Run Code Online (Sandbox Code Playgroud)
经过这个camlp4of,它产生了这个:
Ast.StExp (_loc,
(Ast.ExApp (_loc,
(Ast.ExApp (_loc, (Ast.ExId (_loc, (Ast.IdLid (_loc, "=")))),
(Ast.ExApp (_loc,
(Ast.ExApp (_loc,
(Ast.ExId (_loc, (Ast.IdLid (_loc, "value")))),
(Ast.ExId (_loc, (Ast.IdLid (_loc, f_name)))))),
(Ast.ExId (_loc, (Ast.IdLid (_loc, "a")))))))),
(Ast.ExApp (_loc,
(Ast.ExApp (_loc, (Ast.ExId (_loc, (Ast.IdLid (_loc, "*")))),
(Ast.ExId (_loc, (Ast.IdLid (_loc, "a")))))),
(Ast.ExInt (_loc, "2")))))))
Run Code Online (Sandbox Code Playgroud)
我的问题是,无论如何打印生成的ocaml代码?我camlp4of应该使用什么命令或选项来显示代码?我希望从上面的例子中看到的是:
value my_func a = a * 2
Run Code Online (Sandbox Code Playgroud)
那可能吗?原因是因为我想做一些调试,看看生成的ocaml代码是怎样的.
OCaml的选项类型在您的函数可能不返回任何内容的情况下非常有用.但是当我在很多地方使用它时,我发现在一直处理Some案件和None案件时很麻烦match ... with.
例如,
let env2 = List.map (fun ((it,ie),v,t) ->
match t with
| Some t -> (v,t)
| None ->
begin
match it with
| Some it -> (v,it)
| None -> failwith "Cannot infer local vars"
end) ls_res in
Run Code Online (Sandbox Code Playgroud)
有没有其他方法可以简洁地解构选项类型?
我用corebuild以下代码编译代码时遇到此错误:
~/project $ corebuild debug.byte
ocamlfind ocamldep -syntax camlp4o -package bin_prot.syntax -package sexplib.syntax,comparelib.syntax,fieldslib.syntax,variantslib.syntax -package core -modules globals.ml > globals.ml.depends
+ ocamlfind ocamldep -syntax camlp4o -package bin_prot.syntax -package sexplib.syntax,comparelib.syntax,fieldslib.syntax,variantslib.syntax -package core -modules globals.ml > globals.ml.depends
File "globals.ml", line 744, characters 57-17803 (end at line 1402, character 0):
Quotation not terminated
Preprocessing error on file globals.ml
Error while running external preprocessor
Command line: camlp4 '-I' '/Users/mapleleaf/.opam/4.01.0dev+trunk/lib/ocaml/camlp4' '-I' '/Users/mapleleaf/.opam/4.01.0dev+trunk/lib/type_conv' '-I' '/Users/mapleleaf/.opam/4.01.0dev+trunk/lib/ocaml' '-I\
' '/Users/mapleleaf/.opam/4.01.0dev+trunk/lib/ocaml' '-I' '/Users/mapleleaf/.opam/4.01.0dev+trunk/lib/bin_prot' '-I' '/Users/mapleleaf/.opam/4.01.0dev+trunk/lib/bin_prot' '-I' '/Users/mapleleaf/.opam/4.0\
1.0dev+trunk/lib/ocaml' …Run Code Online (Sandbox Code Playgroud) 什么是Java 9模块的命名约定?假设我的包名是me.jasonyeo.awesome.project,并且每当我module-info.java在IDEA中创建文件时,它都会建议我命名它awesome.project
这是惯例吗?或者我应该说出来me.jasonyeo.awesome.project吗?
我需要在solaris中为我的作业生成类似于ptree的东西.
要做那样的事情,我需要进程的子PID.我已经拥有在机器上运行的进程列表,但我拥有的唯一信息是每个进程的父PID.有没有办法获取系统中每个进程的子PID?
该程序将在solaris机器上运行.
ocaml ×5
camlp4 ×2
haskell ×2
c ×1
concurrency ×1
go ×1
java-9 ×1
java-module ×1
java-platform-module-system ×1
ml ×1
polymorphism ×1
solaris ×1
typeclass ×1
types ×1
unix ×1