除了=:=防止不需要的整数转换的事实:
1> 1=:=1.0.
false
Run Code Online (Sandbox Code Playgroud)
=:=一般使用术语有什么好处?
更好的性能?
在Python 2.5上,我需要使用带有修改__str__()方法的浮点数.此外,我需要知道构造函数何时失败.
为什么我无法捕获从中提出的异常float.__init__()?
查询派生浮点对象的数值的最佳方法是什么?在我的代码我正在使用float(self).
class My_Number(float):
def __init__(self, float_string):
try:
super(My_Number, self).__init__(float_string)
except (TypeError, ValueError):
raise My_Error(float_string)
def __str__(self):
if int(float(self)) == float(self):
return str(int(float(self)))
else:
return str(round(float(self), 2))
>>> n = My_Number('0.54353')
>>> print n
0.54
>>> n = My_Number('5.0')
>>> print n
5
>>> n = My_Number('foo')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for float(): foo
Run Code Online (Sandbox Code Playgroud) 在Prolog中使用广度优先于默认深度优先搜索方案的一般思路是什么?
没有采取无限的分支?
在Prolog中有没有使用广度优先的一般方法?我一直在谷歌搜索,我没有找到太多有用的新手信息.
我正在使用Linux Inotify来检测程序中的FS事件.
如何在受监控目录上安装设备时如何通知我?
我怎么能从Haskell看几个文件/套接字并等待它们变得可读/可写?
在Haskell中有没有像select/epoll/...这样的东西?或者我被迫为每个文件/套接字生成一个线程并始终使用该线程中的阻塞资源?
我有一个gen_server运行,它必须清理它的状态,无论它正常停止或意外崩溃.清理主要包括删除一些文件.
此时,当gen_server崩溃或正常停止时,清理完成terminate/2.
terminate/2如果gen_server撞车事故,有什么理由不被召唤?
如果模具意外死亡,应该是监控gen_server等待清理的任何其他进程gen_server吗?
所以,代码是这样的:
terminate(normal, State) ->
% Invoked when the process stops
% Clean up the mess
terminate(Error, State) ->
% Invoked when the process crashes
% Clean up the mess
Run Code Online (Sandbox Code Playgroud)
编辑:我在官方邮件列表中发现了这封电子邮件,它正在谈论同样的事情:
http://groups.google.com/group/erlang-programming/browse_thread/thread/9a1ba2d974775ce8
正如亚当在下面所说,如果我们想避免陷入存在gen_server,我们可以使用不同的方法.
但是如果我们捕获存在,terminate/2似乎是一个安全的地方进行清理,因为它总是会被调用.此外,我们必须正确处理'EXIT'发送到terminate/2和handle_call/3试图在工人和主管之间正确传播错误的时间.
# type foo = Foo of int * int
# let t = (1, 2)
# Foo t
Error: The constructor Foo expects 2 argument(s),
but is applied here to 1 argument(s)
Run Code Online (Sandbox Code Playgroud)
它是如何,我必须这样做Foo (1, 2),以避免错误甚至牛逼有合适的类型?
我在我的prolog解释器中加载了下两个事实:
foo(U+V,1).
foo(U*V,2).
Run Code Online (Sandbox Code Playgroud)
现在我尝试使用该结果的下一个查询:
foo(x*x+x,R). --> R = 1
foo(x+x*x,R). --> R = 1
foo(x*x*x,R). --> R = 2
Run Code Online (Sandbox Code Playgroud)
现在我尝试下一个查询:
foo(x*x-x,R). --> no
Run Code Online (Sandbox Code Playgroud)
据我了解,这可以通过运算符优先级如何构建树表达式来解释:
x+x*x --> + so it matches with --> +
/ \ / \
x * U V
/ \
x x
x-x*x --> - DOES NOT matches any fact.
/ \
x *
/ \
x x
Run Code Online (Sandbox Code Playgroud)
这个解释是否正确?
我在这个简单的代码中找到了下一个问题:
let () =
print_endline "Hello";
print_endline (Unix.getlogin ())
Run Code Online (Sandbox Code Playgroud)
在正常情况下运行,./a.out给出:
Hello
ricardo
Run Code Online (Sandbox Code Playgroud)
但是运行./a.out </dev/null会使Unix.getlogin失败:
Hello
Fatal error: exception Unix.Unix_error(20, "getlogin", "")
Run Code Online (Sandbox Code Playgroud)
知道为什么会这样吗?
如何使用:match命令在Vim中突出显示与给定模式不匹配的文本?
所以,我希望与之相反:
:match myGroup /foo/
Run Code Online (Sandbox Code Playgroud) 该Lazy.lazy_from_val函数适用于特殊情况的状态文档:
val lazy_from_val : 'a -> 'a t
lazy_from_val v returns an already-forced suspension of v This is for special purposes only and should not be confused with lazy (v).
Run Code Online (Sandbox Code Playgroud)
他们在谈论哪些案例?
如果我从以下值创建一对暂停计算:
let l1 = lazy 123
let l2 = Lazy.lazy_from_val 123
Run Code Online (Sandbox Code Playgroud)
这两者有什么区别?因为Lazy.lazy_is_val l1并且Lazy.lazy_is_val l2两者都返回真实的说价值已经被迫!