- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我几天前才发现 Racket,我正试图通过编写一个小脚本来更熟悉它,该脚本使用 #lang slideshow
生成图像来表示源代码。
我知道在函数范式中编程时,使用 let
创建几乎所有变量是一种很好的做法,但我发现它引入了太多级别的嵌套,而且 Racket 的 let 有一个过于复杂的 API这需要多余的括号。我确信这是为了消除以更强大的方式使用 let
时的歧义,但就我的目的而言,这只是一个烦恼。因此,我正在使用 define
创建所有变量,并在需要时使用 begin
编写 block (例如在 if
的主体中) > 声明)。
问题是我一再收到似乎非常神秘的错误。我确信我只是犯了一些愚蠢的初学者错误,因为我是这门语言的新手,但我似乎真的找不到提示的根源。
这是有问题的代码:
(define sub-code (foldr ht-append (rectangle 0 0) (map internal-style (rest code))))
尽管我们定义的sub-code
似乎无关紧要。如果我将它替换为
(define sub-code '())
我收到同样的错误。 DrRacket 表示 define
正在表达式上下文中使用。我理解这个错误通常意味着什么 - IE,当你编写像 (print (define x 10))
这样的代码时它会引发,但我在这里看不到什么会触发它。
如果有帮助,这个 define
位于 begin
block 的开头,在 if
语句中
(if (list? code)
(begin
(define sub-code '())
; a few more define statements and finally an expression ))
DrRacket 正在打印的具体错误信息是
define: not allowed in an expression context in: (define sub-code (quote ()))
我想也许 define
不允许出现在 begin
block 中,但我检查了 the docs begin
的示例之一是
(begin
(define x 10)
x)
所以我真的不知道该怎么办。提前致谢!
最佳答案
在“正文”上下文中允许定义,例如 lambda
和 let
除其他外。 if
的后续和替代条款不是 body 环境;它们是表达式上下文,因此不允许定义。
begin
很特别- begin
在正文上下文中允许定义,但是 begin
在表达式上下文中禁止定义。你的情况属于后者。
例如:
(define (foo . args) #| body context #|)
(define foo (lambda args #| body context |#))
(define (foo . args)
(let (...)
#| body context |#))
需要表达式的语法关键字:if, cond, case, and, or, when, unless, do, begin
.检查任何 Scheme 报告中的正式语法 (r{4,5,6,7}rs);寻找 <body>
, <sequence>
, <command>
, 和 <expression>
.
此外,如果您需要在表达式中使用正文上下文,只需将 let
包裹起来句法形式,例如:
(if test
(let ()
(define foo 'foo)
(list foo foo))
alternate)
关于functional-programming - 在 Racket 中定义错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16221336/
我意识到“强类型”和“软类型”的定义是松散且易于解释的,但我还没有找到关于无类型 Racket (根据我的理解意味着动态类型)和类型 Racket 的明确定义。 再一次,我确定它不是那么简单和干燥,但
我来自 Java 和 Python,很难理解面向对象代码在 Racket 中的工作方式。 给定 (define food% (class object% (super-new) (i
我安装了 Sublime Text - Racket Package,但没有用。出现此错误。我该怎么办。 [Errno 2] No such file or directory: 'racke
.rkt是“常规”Racket 源代码的常规文件扩展名。在文档中,我还看到了 .rktl 和 .rkts 正在使用。什么是.rktl和 .rkts用于,还有我不知道的更多 Racket 文件扩展名吗?
假设我为具有“中心”的集合定义了一个结构体。 (struct centered-set (center elems)) 我想保证以下条件。 elems是一个集合。 center是 elems 的成员(
我想要一个函数,它接受一个字符串,由一个 python 格式的树组成,就像这样 "[0, [1, 0]]" 并输出一个可用的 Racket 列表,像这样 '(0 (1 0)) 我的第一步是将字符串转换
是否有 Racket 内置函数列表?我正在寻找类似 this one 的列表对于 python 。我似乎无法在文档中找到一个。 最佳答案 这里有一些列表: Racket文档中所有函数的索引: http
虽然 Racket 允许创建 GUI 应用程序(甚至游戏),但我想知道它是否适合与 Things 一样在视觉上发布商业应用程序或 OmniOutliner .这样的应用程序会感觉原生还是看起来像一个不
和node的npm一样,我们使用package.json来解决依赖。 我试过raco pkg,它似乎只是一种开发/发布包的方式,而不是解决外部依赖。 最佳答案 如上所述,Racket 中的 info.
我是 Racket 的新手,尽管到目前为止我已经设法使用 servlet 并让一些东西发挥作用。我现在想做的是验证一个简单的用户名/密码 POST 请求。我已经通过“web-server/formle
我正在为现场编码表演创建一个程序,为此我需要一个基本的 S 表达式代码编辑器(我输入的内容将在适当的语法上下文中评估为 Racket 代码)。 由于 DrRacket 本身是用 Racket 编写的,
和node的npm一样,我们使用package.json来解决依赖。 我试过raco pkg,它似乎只是一种开发/发布包的方式,而不是解决外部依赖。 最佳答案 如上所述,Racket 中的 info.
我正在尝试在 Racket 中编写模块元语言 mylang ,它接受将修改后的主体传递给的第二种语言,例如: (module foo mylang typed/racket body) 相当于: (m
我没有运气找到一种方法来按照我想要的方式进行这项工作,所以如果有人能提供帮助,我将不胜感激。 我想要的是能够在终端上做到这一点: > racket 然后能够输入 Racket 命令并让它们编译。像,
我来自 Java 世界,对 Racket 充满热情。 想知道类似Maven的工具在哪里。如果你不熟悉Maven,还有Scala中的SBT,Android中的gradle,Elixir中的mix等,作为
在 typed/racket 我有一个像 [(? procedure? p ) (apply p xv*)]会导致错误: Type Checker: Function has no cases in:
我是 Lisp-scheme 的新手,对整个函数范式还很陌生,我目前正在做一个任务,要求我重载一个名称相同但参数集不同的函数 racket .下面是我试图实现的一个例子: #lang racket (
有没有办法在 Racket 中获取对象的唯一标识符?例如,当我们使用 Racket 的 eq?运算符来检查两个变量是否指向同一个对象,它使用什么标识符来实现这种比较? 我正在寻找类似 python 的
当我在 Dr. Racket 或从命令行运行我的测试时,失败的测试总是在一行上。 例如, (bad (interp-t-prog (list '(class posn extends object (
我有以下代码: (plot (function sin (- pi) pi #:label "y = sin(x)")) 但是在解决 SICP 时我没有遇到这样的结构:#:label "y = sin
我是一名优秀的程序员,十分优秀!