相关疑难解决方法(0)

我如何制作这款球拍代码DRYer?

我正在将一个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 racket

7
推荐指数
1
解决办法
225
查看次数

如何在Scheme中的列表中使用lambdas

我在查找如何使用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)

有人能帮助我理解我做错了什么吗?

lisp lambda scheme higher-order-functions mit-scheme

4
推荐指数
1
解决办法
120
查看次数

评估Racket响应/ xexpr中的变量

我正在尝试在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中被字面引用(被视为实体),而不是被评估为变量.

那么我做错了什么?如何评估网址?

racket

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

什么是'(撇号)在球拍?

'对球拍中的标志的含义有点困惑.在我看来,同一个标志有不同的含义.请看下面的两个简单示例:

list

返回包含vs作为其元素的新分配列表.

> (list 1 2 3 4)
'(1 2 3 4)
Run Code Online (Sandbox Code Playgroud)

quote

生成对应于数据的常量值(即,程序片段的表示),而不包含其词汇信息,源位置等.引用的对,向量和框是不可变的.

> '(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)

scheme functional-programming racket

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

Little Schemer atom vs (quote atom)

我刚刚开始阅读The Little Schemer。它从几个问题开始,询问给定的表达式是否是一个原子。这很简单,但很有趣,第一个问题让我有点失望。它问:

这是一个原子是真的吗?
  原子1

1 (引用原子)'原子

让我失望的是脚注参考。他们问原子是否是原子,但不知何故他们说原子真的是(引用原子)“原子”?我只是不明白。

lisp scheme

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

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

在Scheme中,是否有一个普通的,不带引号列表的语法糖?

在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中的向量更常用!

lisp scheme syntactic-sugar

0
推荐指数
1
解决办法
82
查看次数