我想知道如何计算元素的数量 例如,计算 (list 'a 'b 'c' 'd) 中元素的数量。谢谢!
我有以下球拍代码:
(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但没有看到任何可行的选择。如何在终端中执行脚本并打印出相同的行?
我希望输出是这样的: abc 15
编码:
(define b 15)
(if (> b 14)
(display "abc" b) 0)
Run Code Online (Sandbox Code Playgroud) 最近我正在学习 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)
有人可以帮我处理这个错误吗?我已经阅读了所有可能的文档,看起来它应该可以工作。
如果 '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.html和https://docs.racket-lang.org/guide/application.html 中给出的示例与添加 (+) 功能有关。有人可以提供其他应用示例并解释它是如何工作的。谢谢。
我不小心忘记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),所以我想知道该过程+是否被视为谓词,并且它是否总是评估为真,选择最后一个元素返回。是这样操作的???
我想在 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 中定义一个函数?
像npm节点一样,我们package.json用来解决依赖关系。
我试过了raco pkg,它似乎只是一种开发/发布包而不是解决外部依赖的方法。
我发现顶级声明顺序似乎并不重要。是否有关于该主题的任何文档?我不太明白。
显示函数可以在未定义的情况下被调用的示例
#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) 所以从我个人的研究来看,闭包/柯里化似乎或多或少是完全相同的东西,这显然不可能是正确的。那么区别在哪里呢?
所以这里有一个 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)
那么柯里化的区别在哪里呢?因为如果我查找文档和其他示例,它们似乎与我为关闭所展示的完全相同?
提前谢谢大家!
racket ×10
scheme ×4
lisp ×2
arity ×1
closures ×1
common-lisp ×1
currying ×1
function ×1
terminal ×1
typed-racket ×1