通常,OCaml程序可以在有或没有对象的情况下编写.何时使用物体最有利,何时应避免使用?
在Java中,给定n个项目,每个项目都有权重w,如何从集合中选择一个等于w的随机项目?
假设每个权重是从0.0到1.0的双精度,并且集合中的权重总和为1. Item.getWeight()返回Item的权重.
该Unix.sleep
函数可以暂停程序整秒,但是如何暂停它不到一秒钟?
是否有一个Common Lisp函数,它将在给定索引的列表中交换两个元素并返回修改后的列表?
在课堂上,我有:
private Foo bar;
public Constructor(Foo bar)
{
this.bar = bar;
}
Run Code Online (Sandbox Code Playgroud)
而不是从参数中提供的对象创建bar的副本,是否可以在构造函数中包含指向bar的指针,以便更改原始栏会更改此对象中的字段?
另一种方式:
int x = 7;
int y = x;
x = 9;
System.out.print(y); //Prints 7.
Run Code Online (Sandbox Code Playgroud)
可以将其设置为打印y打印9而不是7?
在Java中,不同维度的数组具有不同的类型.因此,int[]
作为参数的方法不能采取int[][]
或int[][][]
.我有很多代码,我创建的方法非常相似,但是对于数组的维度.有没有办法处理任意维度的数组,从而抽象出这个常见的功能?
我通过执行自然转换MyType Maybe
来执行我的一个程序中的默认分辨率MyType Identity
.我想ToJSON
为这些类型派生一个实例.我知道Maybe
并且Identity
有实例ToJSON a => ToJSON (Maybe a)
和ToJSON a => ToJSON (Identity a)
.
我想声明以下形式的实例:
instance (forall a . ToJSON a => ToJSON (f a)) => ToJSON (MyType f)
Run Code Online (Sandbox Code Playgroud)
这似乎是提出类型系统的合理要求.我想表现出ToJSON
例如MyType f
,提供的,我总能得到ToJSON (f a)
每一个ToJSON a
.在逻辑表示法中,这就像说我可以证明某些属性P (P(a)⇒P(f(a)))⇒P(h(f)).这似乎很适合我.
不幸的是,我得到以下错误的语法:
• Illegal polymorphic type: forall a. ToJSON a => ToJSON (f a)
A constraint must be a monotype
• …
Run Code Online (Sandbox Code Playgroud) 这是OCaml中的简单游戏循环.显示状态,接收输入,并且状态提前.通过将线程延迟每个循环0.025秒,每秒帧数被限制为40.
main.ml:
let rec main (* state *) frame_time =
(* Display state here. *)
Input.get_input ();
(* Advance state by one frame here. *)
(* If less than 25ms have passed, delay until they have. *)
if((Sys.time ()) < (frame_time +. 0.025)) then
Thread.delay ((frame_time +. 0.025) -. (Sys.time ()));
main (* next_state *) (Sys.time ())
;;
let init =
Graphics.open_graph " 800x500";
let start_time = (Sys.time ()) in
main (* start_state *) start_time
;;
Run Code Online (Sandbox Code Playgroud)
对于此示例,该get_input
函数只是将按键打印到窗口.
input.ml: …
我想将当前当地时间与恒定时间范围进行比较,但我当前的解决方案似乎比我预期的更困难。
\n\n我可以构造一个chrono::DateTime<Local>
with Local::now()
. 然后我可以费力地找出是否now
位于特定时间范围内,如下所示:
let current_hour = now.hour();\nlet current_minute = now.minute();\n\n// see if `now` lies between 06:00 and 23:00\ncurrent_hour >= 6 && current_hour < 23\n\n// note the inelegance of the syntax and the potential for fencepost errors\n
Run Code Online (Sandbox Code Playgroud)\n\n如果我想检查 06:12\xe2\x80\x9323:15 的范围,问题会变得更糟,因为我必须检查小时是否等于 6,然后检查分钟是否大于 12,然后检查 \ xe2\x80\x94 zzzzz...
\n\n那很无聊。我可以尝试使用 来表示字符串parse_from_rfc2822
,但是我必须首先发出当前日期,然后在一天中的时间进行编辑,然后检查解析错误,现在我又在睡觉了。
我想我只是错误地阅读了计时文档。如果我要实现该库,我会尝试构建一个TimeOfDay<Local>
实现 的数据类型Ord
,从而允许惯用的范围检查。我想它已经在某个地方了,但我只是想念它。
我在Project Euler上做了问题20 - 找到100的数字之和!(阶梯,而不是热情).
这是我写的程序:
import Data.Char
main = print $ sumOfDigits (product [1..100])
sumOfDigits :: Int -> Int
sumOfDigits n = sum $ map digitToInt (show n)
Run Code Online (Sandbox Code Playgroud)
我编译它ghc -o p20 p20.hs
并执行它,只0
在我的命令行上.
困惑,我调用ghci
并运行以下行:
sum $ map Data.Char.digitToInt (show (product [1..100]))
这返回了正确的答案.为什么编译版本不起作用?