标签: racket

方案:列表的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万
查看次数

使用Scheme进行Web抓取

是否有一个很好的库/包来使用Scheme(最好是Racket)进行网页抓取?

例如,一个等同于机械化的方案?

scheme functional-programming mechanize web-scraping racket

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

神秘的球拍错误:定义:未绑定的标识符; 此外,没有#%app语法变换器绑定在:define中

该程序产生错误:

define: unbound identifier;
 also, no #%app syntax transformer is bound in: define
Run Code Online (Sandbox Code Playgroud)

当粘贴到REPL中(确切地说,最后一行:(displayln(eval-clause 子句 状态))),它可以工作.在定义窗口中运行时,它会失败.我不知道为什么.

#lang racket
(define *state* '((a false) (b true) (c true) (d false)))
(define *clause* '(a (not b) c))

(define (eval-clause clause state)
  (for ([x state])
    (eval `(define ,(first x) ,(second x))))
  (eval (cons 'or (map eval clause))))

(displayln (eval-clause *clause* *state*))
Run Code Online (Sandbox Code Playgroud)

这个也是:

(define (eval-clause clause state)
  (eval `(let ,state ,(cons 'or clause))))
Run Code Online (Sandbox Code Playgroud)

产生

let: unbound identifier;
 also, no #%app syntax transformer is bound …
Run Code Online (Sandbox Code Playgroud)

lisp racket

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

有人可以用简单的词语解释呼叫/ cc吗?

我正在研究语言球拍,并试图掌握什么叫/ cc实际上是为了.有人可以用简单的语言解释一下,举一两个例子吗?谢谢.

racket

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

如何在Typed Racket中编写将多态函数作为参数的高阶函数?

例如,我如何编写一个版本的版本map将与Typed Racket中的多态函数一起使用?我使用一个简单的id函数定义为:

(: id : (All (A) A -> A))
(define (id x) x)
Run Code Online (Sandbox Code Playgroud)

当我尝试将其映射到列表时,我收到一个错误:

> (map id '(1 2 3))

Type Checker: Polymorphic function `map' could not be applied to arguments:
Types: (-> a b ... b c) (Listof a) (Listof b) ... b -> (Listof c)
   (-> a c) (Pairof a (Listof a)) -> (Pairof c (Listof c))
Arguments: (All (A) (-> A A)) (List One Positive-Byte Positive-Byte)
Expected result: AnyValues
   in: (map id …
Run Code Online (Sandbox Code Playgroud)

types higher-order-functions racket polymorphic-functions typed-racket

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

在Racket中为eval指定#lang

我想在eval中使用特定的#lang来为它提供语义.但是,eval本身似乎没有指定语言的机制,并且传入#lang似乎不起作用.

racket

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

并行运行N皇后问题的球拍代码

我使用以下简单代码来解决n-queens问题:

#lang racket

; following returns true if queens are on diagonals:  
(define (check-diagonals bd) 
  (for/or ((r1 (length bd)))
    (for/or ((r2 (range (add1 r1) (length bd))))
      (= (abs (- r1 r2))
         (abs(- (list-ref bd r1)
                (list-ref bd r2)))))))

; set board size: 
(define N 8)
; start searching: 
(for ((brd (in-permutations (range N))))
  (when (not (check-diagonals brd))
    (displayln brd)))
Run Code Online (Sandbox Code Playgroud)

它工作正常但需要很长时间in-permutations才能获得更大的N值.它使用函数来获得排列流.我还看到它仅使用25%的CPU功率(正在使用4个核中的1个).如何修改此代码,以便它使用来自in-permutations流的排列并行测试并使用所有4个cpu内核?谢谢你的帮助.

编辑:check-diagonals评论中建议的修改功能.旧代码是:

(define (check-diagonals bd) 
  (define res #f)
  (for ((r1 (length bd))
        #:break res)
    (for …
Run Code Online (Sandbox Code Playgroud)

parallel-processing concurrency scheme n-queens racket

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

为什么定义语法或在方案中需要考虑三个条件?

我正在阅读方案编程语言,在第3章中,本书使用define-syntax来定义or和过程,它说下面的定义或者是不正确的:

(define-syntax or ; incorrect!
  (syntax-rules ()
    [(_) #f]
    [(_ e1 e2 ...)
     (let ([t e1])
       (if t t (or e2 ...)))]))
Run Code Online (Sandbox Code Playgroud)

而正确的定义是:

(define-syntax or
  (syntax-rules ()
    [(_) #f]
    [(_ e) e]
    [(_ e1 e2 e3 ...)
     (let ([t e1])
       (if t t (or e2 e3 ...)))]))
Run Code Online (Sandbox Code Playgroud)

为什么正确的定义需要三个条件?我运行了很多测试,这两个定义产生了相同的结果.怎么能告诉我为什么第一个定义是错的?

lisp scheme functional-programming racket

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

如何在 Racket 中检查类型?

我定义了一个函数

(define 1-9 (list->set (range 1 10)))
Run Code Online (Sandbox Code Playgroud)

我想看看1-9是不是真的一套。我怎样才能得到类型1-9

我试图谷歌球拍检查类型,但我找不到任何有用的信息。

types racket

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