小编djh*_*987的帖子

为什么reduce在Clojure中给出了StackOverflowError?

我正在尝试连接一系列Seqs.

我可以做到apply concat.

user=> (count (apply concat (repeat 3000 (repeat 3000 true))))
9000000
Run Code Online (Sandbox Code Playgroud)

但是,根据我有限的知识,我会假设使用apply力量来实现懒惰的Seq,这对于非常大的输入来说似乎并不合适.如果可以的话,我宁愿懒洋洋地这样做.

所以我认为使用reduce就可以完成这项工作.

user=> (count (reduce concat (repeat 3000 (repeat 3000 true))))
Run Code Online (Sandbox Code Playgroud)

但这导致了

StackOverflowError   clojure.lang.RT.seq (RT.java:484)
Run Code Online (Sandbox Code Playgroud)

我很惊讶,因为我会认为语义reduce意味着它是尾调用的递归.

两个问题:

  • apply是最好的方法吗?
  • reduce一般不适合大投入?

stack-overflow recursion reduce clojure

23
推荐指数
1
解决办法
1543
查看次数

如何在leiningen repl中预加载clojure文件?

当我启动clojure REPL时,我有一些我想预先加载的clojure函数.除非您在REPL的上下文中使用它们,否则这些函数没什么用处.

如果它有帮助,我通常使用leiningen为我开始一个clojure REPL.

我如何告诉clojure(或leiningen,如果它不能通过扁平的clojure获得)为我预加载包含这些定义的clojure文件?

clojure leiningen read-eval-print-loop

11
推荐指数
1
解决办法
3385
查看次数

如何在球拍REPL中设置语言

我想设置我的球拍REPL交互使用的语言,如下所示:

-> #lang typed/racket
; readline-input:15:0: read: #lang not enabled in the current context [,bt for
;   context]
; typed/racket: undefined;
;  cannot reference undefined identifier
; [,bt for context]`
Run Code Online (Sandbox Code Playgroud)

但它给了我这个错误:

-> ,bt
; typed/racket: undefined;
;  cannot reference undefined identifier
Run Code Online (Sandbox Code Playgroud)

我的错误是什么?

racket

11
推荐指数
1
解决办法
1604
查看次数

将IronScheme集成到Visual Studio 2010中

有没有办法(或者有人能找到方法)将IronScheme导入VS2010?我已经看过这个问题了,我已尽我所能 - 我甚至编辑了所涉及的二进制文件以更改版本号.我的问题:有没有人有解决方案将IronScheme安装到VisualStudio 2010中?目前,按照安装到VS2008的指示对VS2010不起作用.提前致谢 :)

更新1:我想我应该发布当我尝试按照命令行安装它的说明时得到的错误:

C:\Program Files\IronScheme>RegPkg.exe /codebase "C:\Program Files\IronScheme\IronScheme.VisualStudio.dll"
Run Code Online (Sandbox Code Playgroud)

运行之后,我收到Windows 7弹出窗口错误:

RegPkg.exe已停止工作 - Windows正在检查问题的解决方案...

当我点击它时,它在控制台上给我这个错误:

Unhandled Exception: System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.VisualStudio.Shell.9.0, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.
File name: 'Microsoft.VisualStudio.Shell.9.0, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a'
   at Microsoft.VisualStudio.Tools.RegPkg.Main(String[] arguments)

WRN: Assembly binding logging is turned OFF.
To enable assembly bind failure logging, set the registry value [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) to 1.
Note: There …
Run Code Online (Sandbox Code Playgroud)

scheme visual-studio-2010 ironscheme visual-studio visual-studio-2012

9
推荐指数
1
解决办法
1025
查看次数

有标准的Err变量吗?

刚开始使用Golang.我认为声明一个错误变量并在你的错误结构中使用它来确定出错了是不恰当的,就像在strconv.go中所做的那样.在那里,ErrRange并且ErrSyntax被声明,并且在适当的时候,对它们的引用NumError在它们返回时存储在结构中.我认为原因是因为存储的错误引用的地址NumError可以与ErrRangeErrSyntax变量进行比较,以确定返回哪种类型的错误.

是否存在"标准"声明的错误类型?例如,在Java中,你有类似的东西java.lang.IllegalArgumentException.例如,ErrArgument或者ErrUnsupportedOperation我可以在我自己的代码中使用,而不是每次创建意味着相同的新错误变量?

go

8
推荐指数
2
解决办法
1262
查看次数

为什么vim缩进我的Perl代码?

我在Perl中有一个子程序,应该像这样缩进:

sub GetFiles 
{
    my $pwd = shift;
    my @input = @_;
    my @returned;

    my @DirectoryContent = &GetContentInformation(@input);

    foreach (@DirectoryContent) 
    {
        my %current = %{$_};

        if ($current{'info'} =~ /<DIR>/) 
        {
            my $RecurseDir = &GetRecurseDir($pwd, \%current);
            push(@returned, &GetFiles($RecurseDir, 
                    &GetDirectoryContents($RecurseDir)));
        }
        else 
        { 
            # clean up the data
            my $size = $current{'info'};
            # filesize will be in number of bytes
            # remove file separators
            #$size =~ s/,//g; 
            my $extension = &GetFileExtension($current{'name'});
            delete($current{'info'});
            $current{'size'} = $size;
            $current{'extension'} = $extension;
            # push(@returned, \%current);
        } …
Run Code Online (Sandbox Code Playgroud)

vim perl indentation vim-perl

6
推荐指数
1
解决办法
3485
查看次数

如何在emacs中绑定C- =?

我的.emacs文件中的这个s表达式不会产生所需的结果:

(define-key global-map (kbd "C-=") 'djhaskin987-untab-to-tab-stop)
Run Code Online (Sandbox Code Playgroud)

为什么我不能将命令绑定到Ctrl+ =

编辑澄清:

我正在使用Debian emacs23-nox的标准版本urxvt-256colors,除了我已经重新编译--disable-iso405776(或者那种效果)它以便Ctrl+ Shift不会做奇怪的'插入字符'的事情.我不知道这是否会影响任何事情.例如,C-M-i发送M-TAB,我不明白.

编辑二:

我为没有说清楚而道歉.该函数中djhaskin987-untab-to-tab-stop包含该行(interactive).这部分有效.

emacs key-bindings

6
推荐指数
2
解决办法
1076
查看次数

java.lang.Object的hashCode使用的算法究竟是什么

JVM实现java.lang.Object隐式hashCode()方法时使用的算法是什么?

[ OpenJDK或者Oracle JDK在答案中是首选].

java openjdk

6
推荐指数
1
解决办法
470
查看次数

为什么clojure中的矢量没有实现dissoc?

我知道clojure的clojure.lang.IPersistentVector工具assoc,就像在(assoc [0 1 2 3] 0 -1) ; => [-1 1 2 3].我也听过(如在这个答案中)clojure的向量没有实现dissoc,如在(dissoc [0 1 2 3] 0) ; => [1 2 3].如果使用这个功能很容易重现subvec,是否有任何真正的理由不应该在clojure.lang,clojure.core甚至是contrib中实现它?如果没有,那背后有什么理由吗?

clojure

6
推荐指数
1
解决办法
823
查看次数

为什么我们在 Common Lisp 中使用井号冒号来指定包?

新的 Common Lisper 在这里。我见过用井号冒号语法声明的包,如 中(defpackage #:foo),但我也见过它们定义为普通关键字,如(defpackage :foo)

哪个被认为是“更好”?这两者有什么区别?我在某处读到,井号冒号只是意味着关键字没有被保留。真的吗?如果是这样,使用 uninterned 关键字定义包有什么优点?

common-lisp

6
推荐指数
2
解决办法
129
查看次数