我想为我使用的主要模式添加注释,这些模式目前不支持它们.我在网上找到的唯一例子显示了如何编写单行注释,但我需要配对分隔符.
我需要改变什么?
我正在开发一个相对较大的SML代码库.它最初是用MLton编写的,但我现在正在SML/NJ下使用它.我需要使用RedBlackMapFn,其中定义了smlnj-lib.cm.但是,我收到一个错误:
elaborate/elaborate-bomenv.fun:9.20-9.27 Error: unbound signature: ORD_KEY
elaborate/elaborate-bomenv.fun:14.21-14.40 Error: unbound functor: RedBlackMapFn
elaborate/elaborate-bomenv.fun:32.20-32.27 Error: unbound signature: ORD_KEY
elaborate/elaborate-bomenv.fun:37.21-37.40 Error: unbound functor: RedBlackMapFn
Run Code Online (Sandbox Code Playgroud)
所以我认为这smlnj-lib.cm不是由CM拉动的.为了解决这个问题,我添加$/smlnj-lib.cm到了sources.cm我正在使用的目录中的文件中.这会导致一个单独的问题:
elaborate/sources.cm:25.1-25.18 Error: structure Random imported from $SMLNJ-LIB/Util/smlnj-lib.cm@243997(random.sml) and also from ./(sources.cm):lib/(sources.cm):basic/(sources.cm):random.sml
elaborate/sources.cm:25.1-25.18 Error: structure Queue imported from $SMLNJ-LIB/Util/smlnj-lib.cm@436143(queue.sml) and also from ./(sources.cm):lib/(sources.cm):basic/(sources.cm):two-list-queue.sml
Run Code Online (Sandbox Code Playgroud)
没有骰子.我尝试删除了Random来自的结构./(sources.cm):lib/(sources.cm):basic/(sources.cm):random.sml,但看起来它并不等同于标准库中定义的结构,所以我不能只用一个替换另一个.
我想使用类似Python的import ... from ... as ...
机制来为Random标准库提供一个新名称,但CM的文档没有提供任何关于我如何去做的提示.
如何解决跨多个SML文件的模块命名冲突?
几天前,我收到了以下面试问题。它是用标准 ML 代码描述的,但我可以用我选择的语言自由回答(我选择了 Python):
我有一个类型:
Run Code Online (Sandbox Code Playgroud)datatype t = Leaf of int | Node of (t * t)
f和一个带有签名的函数Run Code Online (Sandbox Code Playgroud)val f: int -> t您需要编写一个函数
equals来检查两棵树是否相等。f是O(n),对于函数的时间复杂度来说,它做了“最糟糕的事情”equals。写成equals这样,它永远不会对 的n参数 呈 指数关系f。
f提供的示例是:
fun f n =
if n = 0 then
Leaf(0)
else
let
val subtree = f (n - 1)
in
Node (subtree, subtree)
end
Run Code Online (Sandbox Code Playgroud)
它会及时生成一个指数级大的树O(n),因此equals (f(n), f(n))对于简单的equals实现来说,与树的节点数呈线性关系的是O(2^n) …
我是SML的新手,我想知道如何在元组列表中获取元素.例如,在列表中[("abc", 4), ("def", 6)],您如何提取"abc"?我试过了
x::xs => #1(x)
Run Code Online (Sandbox Code Playgroud)
但我一直得到"未解决的弹性记录".有什么建议?
签名pthread_create(3)是:
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
void *(*start_routine) (void *), void *arg);
Run Code Online (Sandbox Code Playgroud)
pthread_t *thread论证的存储持续时间有哪些要求?手册页pthread_create说:
在返回之前,成功调用
pthread_create()将新线程的ID存储在指向的缓冲区中thread;
但如果这意味着它存储的值有这样调用者可以检查它,或者如果它使用了缓冲存储的值(这意味着缓冲区需要保持可用的子线程的整个生命周期),目前还不清楚.
同样,pthread_self它说它返回
在创建此线程
*thread的pthread_create(3)调用中返回的值相同.
但是不清楚它是否意味着它返回存储的值*thread或者等于*thread返回的值.
具体来说,我想知道这样的事情是否合法:
void make_thread(void) {
pthread_t tid;
return pthread_create(&tid, NULL, some_fn, NULL);
}
Run Code Online (Sandbox Code Playgroud)
或者如果tid需要malloc'd.当我放入tid堆栈时,我在valgrind中遇到了一堆错误_Unwind_ForcedUnwind,这让我怀疑*thread需要在子线程的生命周期内保持有效.
我刚刚更新了emacs包elpy,它设置了以下键绑定:
<M-down> elpy-nav-move-iblock-down
<M-left> elpy-nav-move-iblock-left
<M-right> elpy-nav-move-iblock-right
<M-up> elpy-nav-move-iblock-up
Run Code Online (Sandbox Code Playgroud)
我通常有这些键windmove-<direction>,我认为这是一个真正的痛苦.在这个github问题之后,我尝试了:
(load "python")
(define-key elpy-mode-map [remap windmove-left] nil)
(define-key elpy-mode-map [remap windmove-right] nil)
(define-key elpy-mode-map [remap windmove-down] nil)
(define-key elpy-mode-map [remap windmove-up] nil)
Run Code Online (Sandbox Code Playgroud)
在我.emacs,但没有运气.如何阻止elpy-mode覆盖这些键?
我知道更大的堆意味着更长的GC暂停.我没关系 - 我的代码正在对一些数据进行分析,而我所关心的只是最大限度地减少了进行垃圾收集所花费的时间,单个暂停的长度对我没有影响.
可以使堆太大伤害性能?我的理解是"年轻"对象很快得到GC,但"旧"对象可能需要更长时间,所以我担心大堆会将一些短期对象推入更长寿的空间.我做了大量快速丢弃的字符串分配(在单次运行过程中大约为60 GB),所以我不想增加用于那些的GC时间.
我正在使用8 GB RAM的机器上进行测试,所以我一直在运行我的代码-Xms4g -Xmx4g,并且在我上次运行的配置文件中,我花了大约20%的运行时进行垃圾收集.我发现将堆增加到5 gb有助于减少它.生产服务器将具有32 GB的RAM,并且内存要求更高.
我可以安全地运行它-Xms31g -Xmx31g,或者最终可能会损害性能吗?
试图以下内容:
class Base {
public Base(){
}
}
class Derived extends Base {
}
public class Main
{
public static void main (String[] args)
{
Derived derived = (Derived) new Base();
}
}
Run Code Online (Sandbox Code Playgroud)
导致a CastClassException,但编译成功.对这个问题的评论表明,编译器不可能在new Base()运行时找出什么类型- 但为什么会出现这种情况呢?我知道在其他类型的系统中,编译器总是可以推断出任何表达式的类型,而Java编译器肯定会使用例如lambda表达式进行一些类型推断.在某些时候,new Base()如果要发出正确的字节码,它必须知道什么类型.
是否有一个理论上的限制阻止Java编译器在程序运行之前捕获它,或者它是一个实现选择?
我正在和Alex和Happy一起构建一个词法分析器和解析器.他们生成的代码ghc-options: -Wall在我的项目的.cabal文件中打开时会抛出大量的警告.
这使得很难捕捉到真正的警告.如何仅在生成的文件中关闭警告?我知道可以用pragma完成:
{#- GHC_OPTIONS -w -#}
Run Code Online (Sandbox Code Playgroud)
但是我想不出一个简单的方法可以在每次生成的文件的顶部粘贴这个pragma,每次重建它们.
这样做的正确方法是什么?