首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何给出一个特定类型的函数作为一个参数在球拍/柏拉图?

如何给出一个特定类型的函数作为一个参数在球拍/柏拉图?
EN

Stack Overflow用户
提问于 2019-01-25 02:26:19
回答 1查看 240关注 0票数 2

我正在编写一个函数,它接受一个函数和一个列表作为参数。参数函数和列表必须具有相同类型的值。我该怎么保证呢?

我试过:

代码语言:javascript
复制
(define ( (func -> 'a) [lst : (Typeof 'a)])
     ....)

然而,我一直未能使它发挥作用。我也读过编曲教程,但没有找到任何相关的东西。

是否可能有一个接受特定返回类型函数的函数?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-25 03:19:39

这就是你要找的吗?

代码语言:javascript
复制
(define f : (('a -> 'a) (listof 'a) -> string)
  (lambda (func lst) "hello"))

然后:

代码语言:javascript
复制
(f (lambda ([x : number]) x) (list 1))

键入检查,但是:

代码语言:javascript
复制
(f (lambda ([x : number]) x) (list "foo"))

不进行类型检查,因为'a与字符串(来自"foo")是统一的,但与数字(来自x)也是统一的,因此会出现类型不匹配。

请注意,

代码语言:javascript
复制
(define f : (('a -> 'a) (listof 'a) -> string)
  (lambda (func lst) "hello"))

代码语言:javascript
复制
(define (f [func : ('a -> 'a)] [lst : (listof 'a)]) : string
  "hello")

是不一样的。在前者中,'a跨参数引用相同类型的变量。在后者中,func'alst'a是不同的。因此,在后者中,下面的表达式类型检查:

代码语言:javascript
复制
(f (lambda ([x : number]) x) (list "foo"))
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54358167

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档