小编Yas*_*aev的帖子

在Lisp上构建的大型项目

在Lisp或Lisp框架中编程的大型项目(例如,网站)的一些示例是什么?

lisp racket

10
推荐指数
3
解决办法
3860
查看次数

递归与累加器样式的表现

我们有两个函数来计算给定数字的阶乘.第一个,!使用累加器样式.第二种,fact使用自然递归.

(define (! n0)
  (local (;; accumulator is the product of all natural numbers in [n0, n)
      (define (!-a n accumulator)
        (cond
          [(zero? n) accumulator]
          [else (!-a (sub1 n) (* n accumulator))])))
    (!-a n0 1)))
Run Code Online (Sandbox Code Playgroud)

(define (fact n)
  (cond
    [(= 0 n) 1]
    [else (* n (fact (- n 1)))]))
Run Code Online (Sandbox Code Playgroud)

在第31节的底部,HtDP声明自然递归版本通常与累加器版本一样快,但不会说明原因.我对此做了一些阅读,似乎答案是"尾调优化/消除",但维基百科的文章似乎与HtDP的说法不一致,至少在性能方面.为什么会这样?


在工作中,递归样式更快.在家里,累加器风格更快.是否没有通用的启发式指导选择哪种风格通常是首选的?我知道累加器式的内存效率更高,但如果我们将讨论局限于性能,至少对我来说,目前还不清楚,哪个是更好的选择.


我已经考虑了这一点,并且不得不支持维基百科关于累积器式递归在一般情况下的优越性的文章.它不仅减少了堆栈/堆空间的使用,而且内存访问总是落后于寄存器访问,并且只有现在多核就在这里才能更加明显.尽管如此,HtDP证明在所有情况下都需要进行实际测试.

scheme racket

10
推荐指数
1
解决办法
2909
查看次数

clojure地图功能中的怪异

关于clojure中地图的第一个奇怪的事情是在以下片段中:

(apply map list '((1 a) (2 b) (3 c)))
Run Code Online (Sandbox Code Playgroud)

结果令我惊讶:

((1 2 3) (a b c))
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释它的工作原理

list clojure

10
推荐指数
1
解决办法
1049
查看次数

Erlang工作流程

你如何组织你的erlang工作流程?我现在正在学习一些Erlang,我在每次编辑后都使用Rebar,重新编译,重建并重新启动整个版本(我试图保持OTP').我很确定有一种更聪明的方法可以做到这一点.

erlang workflow erlang-otp

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

如何使用Racket宏定义函数?

我正在尝试编写一个宏来定义具有相关函数的特殊数据结构类.

我知道这是可能的; 它在核心语言本身中多次完成.

作为一个具体的例子,我如何define-struct在Scheme本身中定义宏.它需要创造make-struct,struct-<<field>>等功能.

我试过这样做define,但是,这只定义了宏的词法范围中的函数.

如何在宏中实际定义函数?

macros scheme racket

8
推荐指数
1
解决办法
2779
查看次数

方案:列表的CAR和CDR

我对列表的工作方式carcdr工作感到困惑.这是我尝试过的一个例子:

(define sample (read))
(display sample)
(display (car sample))
(display (cdr sample))
(display (car (cadr sample)))
(display (cdr (cdr sample)))
Run Code Online (Sandbox Code Playgroud)

在输入值时'(A B C D E F),我得到的是:

'(a b c d e f)
quote
((a b c d e f))
a
()
Run Code Online (Sandbox Code Playgroud)

我无法理解那怎么quote可能是carsample.另外,为什么(cdr sample)输出((a b c d e f))

语言:DrScheme - R5RS - Scheme

lisp scheme list racket

8
推荐指数
1
解决办法
2367
查看次数

在Scheme中向List添加元素

下面是我的代码,它将列表的car元素(carVal)和列表(初始化为空)作为参数.我想将元素追加到列表中,但同样不起作用.

(define populateValues
   (lambda (carVal currVal)
      (append currVal(list carVal ))
       (display currVal)))
Run Code Online (Sandbox Code Playgroud)

显示屏始终显示空列表().谁能帮我理解为什么?

scheme list racket

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

Erlang:以编程方式启动远程节点

我知道可以从shell启动节点.我正在寻找的是一种从模块内启动远程节点的方法.我搜索过,但一直都找不到.

任何帮助表示赞赏.

erlang networking erlang-otp

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

在Erlang中实际使用不正确的列表(可能是所有函数式语言)

我一直在阅读Erlang和OTP,并偶然发现了一个关于不正确列表的问题.

即使您认为自己有一个聪明的想法,也不要试图以这种方式使用列表单元格 - 它容易出错并且会混淆人类和程序分析工具.也就是说,创建不正确的列表有一两个有效用途,但它们被认为是高级编程技术,超出了本书的范围.

超出本书的范围?它必须是Stackoverflow的完美之选!
所以我的问题当然是一些有效的用途是什么?

erlang functional-programming list

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

除了First Class Functions和Lexical Scoping之外,JavaScript与Scheme实现共享了什么?

我一直想知道为什么道格拉斯·克罗克福德不断将JavaScript与Scheme进行比较.是JS的设计者打算成为Scheme; 但除了第一类函数支持和词法范围(破碎)之外,JS与Scheme有什么共同之处,使其成为"C's服装中的Lisp"?

javascript lisp scheme programming-languages functional-programming

8
推荐指数
3
解决办法
297
查看次数