我对列表的工作方式car和cdr工作感到困惑.这是我尝试过的一个例子:
(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可能是car的sample.另外,为什么(cdr sample)输出((a b c d e f))?
语言:DrScheme - R5RS - Scheme
下面是我的代码,它将列表的car元素(carVal)和列表(初始化为空)作为参数.我想将元素追加到列表中,但同样不起作用.
(define populateValues
(lambda (carVal currVal)
(append currVal(list carVal ))
(display currVal)))
Run Code Online (Sandbox Code Playgroud)
显示屏始终显示空列表().谁能帮我理解为什么?
是否有一个很好的库/包来使用Scheme(最好是Racket)进行网页抓取?
例如,一个等同于机械化的方案?
该程序产生错误:
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) 我正在研究语言球拍,并试图掌握什么叫/ cc实际上是为了.有人可以用简单的语言解释一下,举一两个例子吗?谢谢.
例如,我如何编写一个版本的版本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
我想在eval中使用特定的#lang来为它提供语义.但是,eval本身似乎没有指定语言的机制,并且传入#lang似乎不起作用.
我使用以下简单代码来解决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) 我正在阅读方案编程语言,在第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)
为什么正确的定义需要三个条件?我运行了很多测试,这两个定义产生了相同的结果.怎么能告诉我为什么第一个定义是错的?
我定义了一个函数
(define 1-9 (list->set (range 1 10)))
Run Code Online (Sandbox Code Playgroud)
我想看看1-9是不是真的一套。我怎样才能得到类型1-9?
我试图谷歌球拍检查类型,但我找不到任何有用的信息。
racket ×10
scheme ×5
lisp ×3
list ×2
types ×2
concurrency ×1
mechanize ×1
n-queens ×1
typed-racket ×1
web-scraping ×1