问题标签 [typed-racket]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
types - Typed Racket 中的打字功能与 Clojure 中的类类型功能有何异同?
Clojure 有一些用于表示类型的有趣特性,包括但不限于deftype
、defprotocol
和。reify
extend
Typed Racket 中的打字功能与 Clojure 中的类类型功能有何异同?
struct - 如何在 typed/racket 中使用默认值初始化结构?
我正在编写我的第一个打字/球拍应用程序,它是一个 cli 应用程序,它会询问你一些关于你一天的统计问题,例如你前一天晚上睡了多少小时,你吃了多少,你喝了多少杯咖啡等. 应用程序首先显示问题,然后通过函数等待用户输入read
。然后将收集到的信息放入struct
带有预定义字段的字段中。
struct
看起来像这样:
我的方法是首先使用每个字段的默认值 0 初始化结构,然后使用struct-copy
函数在用户输入时使用信息更新结构的“实例”。
这就引出了一个问题,如何以最优雅的方式使用默认值初始化 struct?我是否创建了一个在编译/解析期间创建代码的宏,看起来像这样:
或者是否已经有一个宏可以通过读取结构中的某种属性来做到这一点?
编辑:
在查阅了更多文档后,我发现您可以在结构中设置一个属性来自动设置字段。但是我找不到这是否可能在typed/racket
. 这是它的样子racket
:
types - Typed Racket 的类型推断是如何工作的?
Typed Racket 做了什么样的类型推断?我在 Racket 邮件列表中找到了以下片段:
Typed Racket 类型系统包含许多超出 Hindley/Milner 类型系统所支持的功能,因此我们不能使用该推理系统。目前,Typed Racket 使用本地类型推断来推断程序中的许多类型,但我们希望推断更多类型——这是一个正在进行的研究领域。
上面的简介使用术语“本地类型推断”,我也听说过很多使用“出现类型”,但我不确定这些术语是什么意思。
在我看来,Typed Racket 目前使用的类型推断系统是不必要的弱。这是我的意思的一个例子。以下不类型检查:
您必须使用 显式注释midpoint
,(: midpoint (pt pt -> pt))
否则会出现错误:Type Checker: Expected pt, but got Any in: p1
。为什么类型检查器不能由此得出p1
and p2
must be的类型pt
?这是 Racket 实现类型的方式的基本限制(即,由于 Racket 的一些更高级的类型特性,这种推理有时实际上是错误的),还是将来可能会实现?
types - 正确理解和使用 Typed Racket 省略号
我想定义一个这样的函数:
这基本上“提升”了一个函数fn
,因此它不是接受它的普通参数,而是接受函数并产生一个新函数。所以,例如,
这适用于普通球拍。现在,我想将此功能移动到打字球拍中。这是我想出的类型声明:
这是我认为定义所说的:对于所有类型A0
, A1
, .. An
and B0
, B1
, ... Bn
, and C
:
lift
取 (B0
,B1
, ...Bn
的函数C
) 并产生:- 许多函数的函数(
Ai
toBi
,i
从 0 ton
)依次产生: - 的函数
Ai
,i
从 0 到n
,依次产生: - 一种
C
这不起作用:在最后一行(A ... B -> C)
我得到Type Checker: Type variable A must be used with ... in: A
.
这不是我在使用 Typed Racket 时遇到的第一个省略号问题,而且我认为这确实是对省略号的含义的根本误解。
作为旁注,如果我尝试将这些All
子句折叠成一个这样的子句:
(All (A ... B ... C) blah blah blah)
然后在第二行((B ... B - C) ->
我收到以下错误:(Type Checker: Used a type variable (B) not bound with ... as a bound on a ... in: B
指该行的第二个 B)。我也不是很明白。
random - require/typed in typed racket... examples?
I'm trying to do use the science.plt module in a typed racket program, but I'm having a hard time understanding how to use the require/typed form properly. I've read the docs repeatedly, but I guess I don't quite understand what exactly I'm trying to produce with the form.
In the
#xA;form, is the name a name I should expect to find in the module I want to require, or am I making it up for use within my own program?
Probably the most helpful thing for me would be an example or three of require/typed applied to untyped racket modules.
Or if I'm misunderstanding this real deeply and one cannot use untyped modules in a typed program, how should I go about structuring things? I really just need the random number and random distribution functionality from the science.plt module, and don't expect to have any other imports, at this point.
scheme - 键入球拍中的本地定义用法
我很难弄清楚如何在 Typed Racket 中使用本地表单。
这有什么问题:
我确定问题在于我没有完全遵循 ts-reference 中的语法规范,但是在类型化的球拍中有一两个本地定义的函数的示例会非常有帮助。
racket - Typed Racket:使用定义类型创建泛型类型
我正在尝试对 Typed Racket 有所了解,但在让(诚然相当构建的)实验工作时遇到了一些麻烦。
这是我最初拥有的:
哪个有输出:
这很好。然后我想我可以通过给函数和位置函数一个定义的类型来更好地记录这一点:
现在问题就从这里开始了(我真的希望一些有经验的 Typed Racketeers 现在不会太用力)。一方面,类型检查器在我定义 f 的那一行给了我一个错误。该消息相当冗长,但基本上是:“类型检查器:函数应用程序中没有匹配的函数域:类型:... in:(* xx)”。我以为我定义了一个类型,它有一个泛型类型 A 的参数,它返回泛型类型 A?(* xx) 不行吗?或者是否需要“标记”类型?(例如在类似 C++ 的语言中,它是 list<int>)
最重要的是:现在我对函数 generate-list 的类型定义的返回类型为“(Listof A)”。但是 A 根本没有被声明为与 ListGenFunction 和 ListGenLocFunction 类型的参数所期望的 A 相同。但是,我有点想建立这种联系,以便使用该函数的任何人都可以确保他提供的函数的类型与返回的列表项的类型相匹配。
我该如何正确地做到这一点?
PS:我不确定我是否在最后一段中描述了我的意图,以便任何人都能理解。但是,如果您采用一些通用的伪 C++ 类代码,我想得到以下内容:
所以所有的T都完全相同。
scheme - 无法与键入的球拍使用同步
嗨,我正在学习如何使用球拍提供的日志记录工具。我编写了以下代码来了解事情的运作方式。
上面的代码可以编译并且工作正常。当我使用打字球拍而不是球拍时,问题就出现了。对于相同的代码(带有类型注释和类型/球拍),我得到一个类型检查器错误。
我想在我的项目中使用类型化的球拍来实现日志记录支持。我不知道如何解决这个错误。请帮我解决这个问题。谢谢!
racket - 用于/列出类型/球拍中的注释
我正在尝试将类型添加到一些数字球拍代码中,以期使其更快,但我在下面的代码中处理 for/list 宏扩展。
这个函数返回一个索引列表 foreach x 它是 y 的成员。它适用于 Racket,但我似乎无法通过 Typed Racket 的类型检查器。具体来说,错误是:
类型检查器:宏扩展错误——类型信息不足,无法进行类型检查。请在以下位置添加更多类型注释: (for/list (((ann i Index) (in-range (ann (length xs) Index)))) (if (member (list-ref xs i) ys) i -1) )
您能否提供通过类型检查器的注释和/或解释为什么这些类型注释不足?
racket - 如何在“scribble/lp”中使用“typed/racket”
是否可以使用 other #lang
s in#lang scribble/lp
进行识字编程?
例如,我想使用#lang typed/racket
in #lang scribble/lp
。如何意识到这一点?