我正在将一个Python脚本移植到Racket作为学习经验,我有这个功能:
(define (check-status)
(define git [find-executable-path "git"])
(define-values (ckot out in err)
(subprocess #f #f #f git "checkout" "-q" "master"))
(define-values (local lout lin lerr)
(subprocess #f #f #f git "rev-parse" "@"))
(define-values (remote rout rin rerr)
(subprocess #f #f #f git "rev-parse" "@{u}"))
(define-values (merge-base mbout mbin mberr)
(subprocess #f #f #f git "merge-base" "@" "@{u}"))
(display-lines (port->lines mbout))
(define ports '(ckot out in err local lout lin lerr remote rout rin rerr merge-base mbout mbin mberr))
(map (lambda …Run Code Online (Sandbox Code Playgroud) 我在查找如何使用Scheme中列表中包含的lambda时遇到了一些麻烦.例如,我有以下代码:
(define abc '((lambda (x) (* x x))))
Run Code Online (Sandbox Code Playgroud)
我想从列表中取出第一个lambda并将其应用于某些数字.这是我到目前为止:
(map (car abc) '(1 2 3))
Run Code Online (Sandbox Code Playgroud)
但是,我收到以下错误:
;The object (lambda (x) (* x x)) is not applicable.
Run Code Online (Sandbox Code Playgroud)
但是,当我直接使用lambda尝试同样的事情时,它的工作原理是:
(map (lambda (x) (* x x)) '(1 2 3))
;Value 15: (1 4 9)
Run Code Online (Sandbox Code Playgroud)
有人能帮助我理解我做错了什么吗?
我正在尝试在Racket中制作一个简单的书签web应用程序.
这意味着收到一个网址作为CGI参数,而现在,我只是想通过反映它来确认我收到它.
(define (start request)
(response/xexpr
(let* ([bindings (request-bindings request)]
[url (if (exists-binding? 'url bindings)
(extract-binding/single 'url bindings)
"NO URL")])
`(html
(head (title "TITLE"))
(body (h2 "TITLE")
(p "URL = " url))
))))
Run Code Online (Sandbox Code Playgroud)
但是,而不是看到我期望看到的...这是一个包含的页面
URL = http://google.com
Run Code Online (Sandbox Code Playgroud)
我正在看
URL = &url;
Run Code Online (Sandbox Code Playgroud)
这表明url在xexpr中被字面引用(被视为实体),而不是被评估为变量.
那么我做错了什么?如何评估网址?
我'对球拍中的标志的含义有点困惑.在我看来,同一个标志有不同的含义.请看下面的两个简单示例:
返回包含vs作为其元素的新分配列表.
> (list 1 2 3 4)
'(1 2 3 4)
Run Code Online (Sandbox Code Playgroud)
生成对应于数据的常量值(即,程序片段的表示),而不包含其词汇信息,源位置等.引用的对,向量和框是不可变的.
> '(1 2 3 4)
'(1 2 3 4)
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:'符号是否有2个含义(符号和列表)或这些是相同的数据类型并list实际返回引用的常量值?如果第二种情况是这样的话:
> '(+ (- 2 13) 11)
'(+ (- 2 13) 11)
> (eval (list + (- 2 13) 11))
0
Run Code Online (Sandbox Code Playgroud)
(也(eval '(+ (- 2 13) 11)) 正常工作和评估0)
但这不是:
> (list + (- 2 13) 11)
'(#<procedure:+> -11 11) …Run Code Online (Sandbox Code Playgroud) 我刚刚开始阅读The Little Schemer。它从几个问题开始,询问给定的表达式是否是一个原子。这很简单,但很有趣,第一个问题让我有点失望。它问:
这是一个原子是真的吗?
原子11 (引用原子)或'原子
让我失望的是脚注参考。他们问原子是否是原子,但不知何故他们说原子真的是(引用原子)或“原子”?我只是不明白。
在Scheme中,如果我想要一个列表,请说(1 2 3),我会写'(1 2 3).通常情况下,这很好,但它实际上相当于(quote (1 2 3)),与之不完全相同(list 1 2 3).这会产生不同结果的一个例子:
'(1 2 (+ 0 3)) -> (1 2 (+ 0 3))
(list 1 2 (+ 0 3)) -> (1 2 3)
Run Code Online (Sandbox Code Playgroud)
第二行是否有语法糖?对于矢量有.例如:
#(1 2 (+ 0 3)) -> #(1 2 3)
(vector 1 2 (+ 0 3)) -> #(1 2 3)
Run Code Online (Sandbox Code Playgroud)
如果列表中没有这样的糖,那将是非常具有讽刺意味的,因为列表的使用方式比Scheme中的向量更常用!