小编Har*_*ier的帖子

为什么延续传球风格

在Kent Dybvig(第4版)第3.4节的计划编程语言中,他非常清楚地描述延续传递方式是什么.对于为什么他给出了两个原因:

  1. 将多个结果传递给它的continuation,因为实现continuation的过程可以接受任意数量的参数.
  2. CPS还允许一个过程采用单独的延续......,它可以接受不同数量的参数.

由于第一个原因也可以使用values程序和第二个使用case-lambda,我不清楚使用延续传递样式的优点.有人可以告诉我一些关于延续传递风格是否合适的例子,它使代码更好,更清晰等等?

scheme continuations continuation-passing

23
推荐指数
2
解决办法
4117
查看次数

在Racket中对列表进行分区

在我正在Racket中工作的应用程序中,我需要获取一个数字列表并将列表分成连续数字的子列表:(在实际应用中,我实际上是分区对由数字和一些数据组成的对,但原则是一样的.)

即如果我的程序被调用,chunkify那么:

(chunkify '(1 2 3  5 6 7  9 10 11)) -> '((1 2 3) (5 6 7) (9 10 11))  
(chunkify '(1 2 3)) ->  '((1 2 3))  
(chunkify '(1  3 4 5  7  9 10 11 13)) -> '((1) (3 4 5) (7) (9 10 11) (13))  
(chunkify '(1)) -> '((1))  
(chunkify '()) -> '(())  
Run Code Online (Sandbox Code Playgroud)

等等

我在Racket中提出了以下内容:

#lang racket  
(define (chunkify lst)  
  (call-with-values   
   (lambda ()  
     (for/fold ([chunk '()] [tail '()]) ([cell  (reverse lst)])  
       (cond  
         [(empty? …
Run Code Online (Sandbox Code Playgroud)

scheme racket

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

为什么\ g <0>在re.sub中的行为与\ 0不同?

我正在使用Python 3.3

re.sub("(.)(.)",r"\2\1\g<0>","ab")  returns baab
Run Code Online (Sandbox Code Playgroud)

re.sub("(.)(.)",r"\2\1\0","ab")  returns ba
Run Code Online (Sandbox Code Playgroud)

这是sub方法中的错误还是由于某种原因sub方法无法识别\ 0?

python regex

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

为命令式程序员学习Racket Macro系统的最佳方法

对于经验丰富的命令式程序员来说,只有熟悉C宏才能学习Racket宏系统的最佳途径是什么.不仅仅是它的机制(如何?),还有使用它的地点和原因以及说明这一点的例子.

应该首先学习Scheme(或Lisp)宏吗?我听说过"On Lisp"这本书对Lisp宏有一个很好的解释,并且有很好的例子.这会有用吗?

racket

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

在Scheme和Racket中使用嵌套引号

在Racket中编写函数时,我意外地将两个单引号放在符号前面而不是一个.即我意外地写了''并且发现了一些看似奇怪的嵌套引号的行为.我正在使用DrRacket并使用Racket lang和R5RS lang进行测试.

(write (pair? (quote (quote a))))
Run Code Online (Sandbox Code Playgroud)

打印:#t.

(write (car (quote (quote a))))
Run Code Online (Sandbox Code Playgroud)

打印:报价

(write (quote (quote a)))
Run Code Online (Sandbox Code Playgroud)

(write '(quote a)))
Run Code Online (Sandbox Code Playgroud)

两个都打印:'a

有人能告诉我为什么在Scheme(和Racket)中使用函数对吗?解释(引用(引用a)))作为一对两个元素引用和a,但函数write打印出'a而不是(引用a).

scheme racket

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

Racket中"顶级形式"的定义是什么?

"球拍参考"部分11.9扩展顶级表单和13.2评估和编译使用术语"顶级表单"和功能描述(eval top-level-form [nm])(展开顶级表单) )在参考手册中有"顶级形式"作为其功能参数,但我不清楚"顶级形式"的定义.Racket语言中"顶级形式"一词的含义是什么?

racket

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

访问Scheme和Racket中的结构子类型字段

在Racket中,这给了我一个错误:

(struct point-in-plane  (pos_x pos_y))  
(struct pixel point-in-plane (color))  

(define a-pixel (pixel 1 2 "blue"))  
(pixel-color a-pixel)  
(pixel-pos_x a-pixel) 
(pixel-pos_y a-pixel) 
Run Code Online (Sandbox Code Playgroud)

要使它工作,我需要用以下代码替换最后两行:

(point-in-plane-pos_x a-pixel) 
(point-in-plane-pos_y a-pixel) 
Run Code Online (Sandbox Code Playgroud)

同样在R6RS中

#!r6rs
(import (rnrs))
(define-record-type point (fields x y))
(define-record-type cpoint (parent point) (fields color))
(define blue-point  (make-cpoint 1 2 "blue"))
(write (cpoint-x blue-point))
Run Code Online (Sandbox Code Playgroud)

给出了类似的错误.

是什么原因Scheme(和Racket)不允许您通过以下方式访问父类中定义的子类型的字段:subtypeID-fieldID而不是parenttypeID-fieldID

即在我的情况下允许我使用pixel-pos_x和pixel-pos_y.

scheme racket

5
推荐指数
2
解决办法
1775
查看次数

letrec/letrec*比内部定义或命名let更好的示例?

Kent Dybvig在Letrec和letrec*的Scheme Scheme Language中给出的两个例子是:

(letrec ([sum (lambda (x)
             (if (zero? x)
                 0
                 (+ x (sum (- x 1)))))])
   (sum 5))
Run Code Online (Sandbox Code Playgroud)

(letrec* ([sum (lambda (x)
            (if (zero? x)
                    0
                (+ x (sum (- x 1)))))]
         [f (lambda () (cons n n-sum))]
         [n 15]
         [n-sum (sum n)])
  (f))
Run Code Online (Sandbox Code Playgroud)

第一个也可以写成一个名为let:

(let sum ([x 5]) 
  ((lambda (x)
                 (if (zero? x)
                     0
                     (+ x (sum (- x 1))))) x))  
Run Code Online (Sandbox Code Playgroud)

第二个可以写成带有内部定义的let:

(let ()
  (define sum  (lambda (x)
               (if (zero? x)
               0 
                   (+ x (sum (- …
Run Code Online (Sandbox Code Playgroud)

scheme

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

Racket中不同类型的延续

有人可以给出一个相对简单的例子,说明在call-with-composable-continuation和之间的球拍call-with-current-continuation.

我已经完成了" 球拍指南10.3"call-with-composable-continuation的示例以及call-with-current-continuation"方案编程语言"第3.3节中的示例,但我不清楚它们之间的区别.

有人可以给出一个例子,他们会在同一个背景下给出不同的结果.

scheme continuations racket

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

在 Scheme 或 Racket 中何时使用函数以及何时使用宏

有人可以提供一些关于何时使用 Scheme 或 Racket 宏以及何时使用函数的一般指南。

如果您没有创建新语法并且没有对变量产生副作用,那么在某些情况下您必须(或者更合适)使用宏而不是函数?

scheme racket

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