标签: racket

Racket - 如何计算列表中元素的数量?

我想知道如何计算元素的数量 例如,计算 (list 'a 'b 'c' 'd) 中元素的数量。谢谢!

racket

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

如何在终端打印球拍检查预期结果

我有以下球拍代码:

(require test-engine/racket-tests)

(define (square val)
  (* val val))

(check-expect (square 3) 9)
Run Code Online (Sandbox Code Playgroud)

当我使用 Beginning Student 语言在 DrRacket 中执行脚本时,我在应用程序控制台中得到以下输出(该视图在 DrRacket 中称为“交互”):

测试通过!

当我通过终端在终端中执行相同的脚本时,racket my_script.rkt我看不到任何输出。我检查过,racket --help但没有看到任何可行的选择。如何在终端中执行脚本并打印出相同的行?

terminal racket

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

如何在同一事物中显示字符串和变量?

我希望输出是这样的: abc 15

编码:

(define b 15)
(if (> b 14)
(display "abc" b) 0)
Run Code Online (Sandbox Code Playgroud)

racket

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

在 Racket 中使用“define-type”会出错

最近我正在学习 Racket,但在理解“define-type”语法方面遇到了一些困难。我试过以下代码:

#lang racket
(define-type Num Number)
Run Code Online (Sandbox Code Playgroud)

但它输出以下错误消息:

define-type: unbound identifier in module in: define-type
Run Code Online (Sandbox Code Playgroud)

有人可以帮我处理这个错误吗?我已经阅读了所有可能的文档,看起来它应该可以工作。

racket typed-racket

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

Racket 中除 + 以外的应用示例

如果 'apply' 将给定的函数应用于列表的所有元素,为什么以下不起作用:

> (apply println (list "a" "b" "c"))
. . println: contract violation
  expected: output-port?
  given: "b"
  argument position: 2nd
  other arguments...:
> 
Run Code Online (Sandbox Code Playgroud)

https://docs.racket-lang.org/reference/procedures.htmlhttps://docs.racket-lang.org/guide/application.html 中给出的示例与添加 (+) 功能有关。有人可以提供其他应用示例并解释它是如何工作的。谢谢。

scheme racket

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

当特殊形式 cond 缺少关键字 else 时,过程是否会被视为谓词 <p> ?

我不小心忘记else在下面的cond表达式中输入 ,发生了一些奇怪的事情。

(define (abs x)
  (cond ((< x 0) x)
        ((= x 0) 0)
        (+ 1 2 1001)
        ))

> (abs 1)
1001
> 
Run Code Online (Sandbox Code Playgroud)

的结果(abs 1)不是(+ 1 2 1001)?的结果,即 1004,而是表达式参数的最后一个元素(+ 1 2 1001)

cond形式是

(cond (<p1>,<e1>)
      (<p2>,<e2>)
      (<p3>,<e3>)
      ...
      (<pn>,<en>))
Run Code Online (Sandbox Code Playgroud)

表达式中没有谓词(+ 1 2 1001),所以我想知道该过程+是否被视为谓词,并且它是否总是评估为真,选择最后一个元素返回。是这样操作的???

lisp scheme racket

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

Lisp/Scheme/Racket:如何定义带有省略号的函数

我想在 Racket 中定义一个带有未定义参数数量的函数,所以我使用省略号,但它不起作用:

(define (f x ...) (printf x ...))
(f "~a ~a" "foo" "bar")
Run Code Online (Sandbox Code Playgroud)

错误:

Arity mismatch
Run Code Online (Sandbox Code Playgroud)

如何用省略号在 Racket 中定义一个函数?

scheme function variadic-functions racket arity

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

Racket 有任何依赖管理器吗?

npm节点一样,我们package.json用来解决依赖关系。

我试过了raco pkg,它似乎只是一种开发/发布包而不是解决外部依赖的方法。

racket

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

Racket 和 Common Lisp 中顶级函数定义顺序的规则

我发现顶级声明顺序似乎并不重要。是否有关于该主题的任何文档?我不太明白。

显示函数可以在未定义的情况下被调用的示例

#lang racket

(define (function-defined-early)
  (function-defined-later))

(define (function-defined-later)
  1)

(function-defined-early)
> 1
Run Code Online (Sandbox Code Playgroud)
;; Common Lisp

(defun function-defined-early ()
  (function-defined-later))

(defun function-defined-later ()
  1)

(print (function-defined-early))
> 1
Run Code Online (Sandbox Code Playgroud)

lisp common-lisp racket

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

球拍-封闭/咖喱,区别在哪里?

所以从我个人的研究来看,闭包/柯里化似乎或多或少是完全相同的东西,这显然不可能是正确的。那么区别在哪里呢?

所以这里有一个 Racket 中的闭包示例:

(define (make-an-adder x)
  (lambda (y)
    (+ y x)))

(define add3 (make-an-adder 3))


(add3 5)
Run Code Online (Sandbox Code Playgroud)

会回馈

8
Run Code Online (Sandbox Code Playgroud)

那么柯里化的区别在哪里呢?因为如果我查找文档和其他示例,它们似乎与我为关闭所展示的完全相同?

提前谢谢大家!

scheme closures functional-programming currying racket

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