小编Rac*_*oob的帖子

为什么在Racket中以奇怪的方式定义foldl?

在Haskell中,与许多其他函数语言一样,函数foldl被定义为例如foldl (-) 0 [1,2,3,4] = -10.

这没关系,因为foldl (-) 0 [1, 2,3,4]根据定义,((((0 - 1) - 2) - 3) - 4).

但是,在Racket中,(foldl - 0 '(1 2 3 4))是2,因为Racket"智能地"计算如下:(4 - (3 - (2 - (1 - 0)))),确实是2.

当然,如果我们定义辅助功能翻转,像这样:

(define (flip bin-fn)
  (lambda (x y)
    (bin-fn y x)))
Run Code Online (Sandbox Code Playgroud)

然后我们可以在Racket中实现与Haskell相同的行为:而不是(foldl - 0 '(1 2 3 4))我们可以写:(foldl (flip -) 0 '(1 2 3 4))

问题是:为什么foldl球拍以这种奇怪的(非标准的,非直观的)方式定义,与其他语言不同?

recursion scheme functional-programming fold racket

44
推荐指数
4
解决办法
8345
查看次数

了解如何实现一次性lisp宏

在Peter Seibel的书"Practical Common Lisp"中,我们可以找到一次非常复杂的宏的定义(参见页面底部http://www.gigamonkeys.com/book/macros-defining-your-own.html).

我在过去3周内第10次阅读这个宏定义,无法理解它是如何工作的.:(更糟糕的是,我不能自己开发这个宏,即使我理解它的目的以及如何使用它.

我对这个臭名昭着的宏观系统"衍生"特别感兴趣,一步一步!有帮助吗?

lisp macros common-lisp practical-common-lisp

17
推荐指数
2
解决办法
2321
查看次数

Racket中的宏定义宏?

在Common Lisp中,创建宏定义宏相对容易.例如,以下宏

(defmacro abbrev (short long)
  `(defmacro ,short (&rest args)
     `(,',long ,@args)))
Run Code Online (Sandbox Code Playgroud)

是一个宏定义宏,因为它扩展到另一个宏.

如果我们现在放

(abbrev def defun) 
Run Code Online (Sandbox Code Playgroud)

在我们的程序中,我们可以编写def而不是defun在定义新函数时.当然,abbrev也可以用于其他事情.例如,之后

(abbrev /. lambda)
Run Code Online (Sandbox Code Playgroud)

我们可以写(/. (x) (+ x 1))而不是(lambda (x) (+ x 1)).尼斯.(有关缩写的详细说明,请参阅http://dunsmor.com/lisp/onlisp/onlisp_20.html)

现在,我的问题是:

  1. 我可以在Racket中编写宏定义宏吗?
  2. 如果可以的话,怎么做?(例如,如何abbrev在Racket中编写类似于 宏的内容?)

lisp macros common-lisp hygiene racket

7
推荐指数
2
解决办法
576
查看次数

如何配置SublimeRepl以使用鸡计划?

有没有人能够配置Sublime Text 2和SublimeRepl来配合鸡计划?

我在Sublime中有鸡的repl,但它只显示来自鸡方案的错误消息(可能来自csi进程的stderr输出),但它不显示提示或评估值.

有帮助吗?

scheme read-eval-print-loop sublimetext2 chicken-scheme sublimerepl

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

是否可以从femtolisp调用C函数?

最近,我遇到了著名的茱莉亚语言作者杰夫·贝赞森(Jeff Bezanson)撰写的一种称为femtolisp的小口齿方言。(有关femtolisp的更多信息,请访问https://code.google.com/p/femtolisp/https://github.com/JeffBezanson/femtolisp),我真的很喜欢。

但是,我想知道是否有某种方法可以从femtolisp调用C函数?

julia femtolisp

5
推荐指数
1
解决办法
658
查看次数

关闭python?

当我运行此代码时,我得到这个结果:

15
15
Run Code Online (Sandbox Code Playgroud)

我希望输出应该是

15
17
Run Code Online (Sandbox Code Playgroud)

但事实并非如此.问题是:为什么?

def make_adder_and_setter(x):
    def setter(n):
        x = n

    return (lambda y: x + y, setter)

myadder, mysetter = make_adder_and_setter(5)
print myadder(10)
mysetter(7)
print myadder(10)
Run Code Online (Sandbox Code Playgroud)

python closures python-2.x

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

如何导出函数segs?

如何构造segs返回列表中所有连续段列表的函数?例如,(segs '(l i s t))应该产生以下答案:

(() (t) (s) (s t) (i) (i s) (i s t) (l) (l i) (l i s) (l i s t))
Run Code Online (Sandbox Code Playgroud)

我对如何按照HtDP中描述的设计原则解决这个问题特别感兴趣(不,这不是书中的问题,所以请随时讨论它!)如何解决?在程序推导中使用哪些原则?

recursion recurrence scheme functional-programming racket

3
推荐指数
1
解决办法
138
查看次数

DrRacket中的宏步进器

在链接http://www.ccs.neu.edu/home/ryanc/macro-stepper/tutorial.html上有关于使用宏步进器的说明.

但是,当我要尝试它时,我无法在非零的定义中得到myor的第二次扩展?功能,只有第一个.另外,我没有按钮"上一学期"和"下一学期".

所以我的问题是:我如何配置宏步进器以获得第二次扩展,就像在教程中一样?

macros scheme expansion racket

3
推荐指数
1
解决办法
1646
查看次数

二进制加法的优雅代码?

我刚刚编写了函数add-registers,用于在Racket中添加两个n位寄存器(使用bit-add函数作为帮助器):

(define (bit-add x y c)
  (values (bitwise-xor x y c) (bitwise-ior (bitwise-and x y)
                                           (bitwise-and x c)
                                           (bitwise-and y c))))

(define (add-registers xs ys)
  (let ([carry 0])
    (values (reverse (for/list ([b1 (reverse xs)] [b2 (reverse ys)])
                       (let-values ([(nb nc) (bit-add b1 b2 carry)])
                         (set! carry nc)
                         nb)))
            carry)))
Run Code Online (Sandbox Code Playgroud)

但我发现我的代码非常难看.所以我想知道这是否可以写得更简洁优雅?

scheme racket

3
推荐指数
1
解决办法
1186
查看次数

在Racket中c(a | d)+ r宏

我想知道是否可以在Racket中编写一个可以转换每种形状的宏(c(a | d)+ r xs),其中c(a | d)+ r是匹配car,cdr,caar的正则表达式,干部,......等,先进入相应的组成和休息.

例如,这个宏应该采用(caadr'(1 2 3 4 5))并将其转换为(first(first(rest'(1 2 3 4 5)))).

沉(Mark Tarver的新编程语言)中有类似的东西:https://groups.google.com/group/qilang/browse_thread/thread/131eda1cf60d9094?hl = en

lisp macros cons racket

2
推荐指数
1
解决办法
590
查看次数