首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >参数化函数

参数化函数
EN

Stack Overflow用户
提问于 2018-04-04 14:54:38
回答 1查看 89关注 0票数 0

是否有可能编写函数来返回其签名取决于构造器函数的参数的函数?

具体来说,我正在细化我编写的基本递归的实现。我希望像工厂一样的函数为数值参数生成一个函数,该函数可以在元组或长度等于为数值参数传递的参数的列表上工作。目前,我正在处理像pr 1 2 [0,5,13]这样的案例,这是一个从原始递归的角度来看是无效的语句,在运行时通过Either处理。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pr :: (Show a) => Int -> Int -> [a] -> Either String a
pr i k args
  | 1 <= i && i <= k && length args == k = Right $ args!!(i-1)
  | i <= 0 = Left "first argument of pr needs to be greater or equal to 1"
  | k < i = Left "first argument of pr needs to be lesser or equal to the second argument"
  | length args /= k = Left $ "pr expected "++(show k)++" arguments, got "++(show $ length args)++": pr "++(concat[show i, " ", show k, " ", show args])

但我想在编译时以某种方式捕捉这种情况,从我想用它实现的正式系统的角度来看,这是一个编译时错误--将更多的参数传递给一个函数,而不是它的域指定的。

这在某种程度上是可能的吗?如果不是,那么正确的方法是获得应该是无效语句的编译时错误。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-04 15:41:21

你想要的是一个大小的矢量。它就像一个列表,但是除了它的元素的类型之外,它还被类型级别的自然数参数化。

黑客上的大小矢量包是您所需要的。碰巧,您要实现的函数是这个库中的last函数。

请注意,每次调用last时,您都必须证明编译器的参数向量的大小至少为1。可以通过在源代码中构造向量(例如,编译器将理解1 :- 2 :- Nil的大小为2),或者如果向量是在运行时获得的--可能是通过从列表中转换获得的--您将不得不编写一个函数,如果它没有元素,或者构造至少一个大小的向量,即为某些n构造一个类型级别的大小S n

如果您不熟悉依赖类型的编程(这是一个包含这一点的范例,还有更多),我建议您先看看一些教程。例如,这个职位是一个很好的例子,它包括如何从零开始实现向量并为它们编写函数。

一句谨慎的话,学习和使用可靠的类型化编程是令人兴奋的,上瘾的,但也耗费时间。因此,如果您想将精力集中在手头的任务上,那么您可能希望暂时接受运行时检查。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49661648

复制
相关文章
【Kotlin】函数 ① ( 函数头声明 | 函数参数 | 默认参数值 | 具名参数 )
默认参数值 : Kotlin 语言 中的 函数参数 , 可以 在定义时 指定参数默认值 ;
韩曙亮
2023/03/30
2.8K0
【Kotlin】函数 ① ( 函数头声明 | 函数参数 | 默认参数值 | 具名参数 )
函数模板参数(函数参数在哪)
下面列举的几种情况不能省略模板实参: 1)从模板函数实参表获得的信息有矛盾之处。
全栈程序员站长
2022/07/26
3.1K0
函数模板参数(函数参数在哪)
JavaScript 函数参数
functionName(parameter1, parameter2, parameter3) { // 要执行的代码…… }
陈不成i
2021/07/19
8820
函数的参数
一、位置参数 1 def func(a,b,c): 2 print(a) 3 print(b) 4 print(c) 5 func(1,2,3) 6 func(1,2)#报错 7 func(1,2,3,4)#报错 从上面的例子看,函数调用时传入的实参必须与形参一一对应,缺一不可,多一不可。 二、关键字参数 1 def test(x,y,z): 2 print(x) 3 print(y) 4 print(z) 5 test(1,3,z=2) 6 test(x =
py3study
2020/01/19
1.5K0
python 多参数函数变换成单参数函数
methodcaller from operator import methodcaller s = 'The time has come' upcase = methodcaller('upper') upcase(s) 'THE TIME HAS COME' hiphenate = methodcaller('replace', ' ', '-') hiphenate(s) 'The-time-has-come' partial from operator impo
用户5760343
2019/08/02
1K0
python函数参数
#没有参数 a = 123 def xy(): print(a) xy() #执行结果123 #一个参数 def xy(a): print(a) xy('nihao') #执行结果nihao #多个参数 def xy(a1,a2): print(a1,a2) xy('i am a1','i am a2') #执行结果i am a1 a am a2 #默认参数 def xy(a1,a2 = 123): print(a1,a2) xy(111) #执行结果111 123 #
py3study
2020/01/20
8040
函数的参数
函数是绝大多数编程语言中都支持的一个代码的“构建块”,但是Python中的函数与其他语言中的函数还是有很多不太相同的地方,其中一个显著的区别就是Python对函数参数的处理。在Python中,函数的参数可以有默认值,也支持使用可变参数,所以Python并不需要像其他语言一样支持函数的重载,因为我们在定义一个函数的时候可以让它有多种不同的使用方式,下面是两个小例子。
用户8442333
2021/05/18
1.5K0
函数参数python
函数中的默认参数,调用的时候可以给参数 赋值,也可以使用默认值 修改add函数如下
py3study
2020/01/15
7400
函数参数python
函数和参数
Python里面有很多内置函数,使用函数可以让我们更快捷得实现要求,但函数那么多,死记硬背肯定不行,就需要我们平时多留心,遇到新的内置函数,多用help指令看看他的功能,多重复几次,肯定会记住的。
stormwen
2019/08/05
9340
r语言中plot函数参数含义_plot函数参数
plot函数是R语言最基础的函数之一,参数较多,难以记住所有的参数详细用法,这里总结一下,以便查阅。
全栈程序员站长
2022/11/04
2.2K0
r语言中plot函数参数含义_plot函数参数
函数的参数
函数的定义(一): 函数就是完成特定功能的一个语句组,这组语句可以作为一个单位使用,并且给它取一个名字。 可以通过函数名在程序的不同地方多次执行(这通常叫函数调用)。 为什么使用函数 降低编程难度 通常将一个复杂的大问题分解成一系列的小问题,然后将小问题划分成更小的问题,当问题细化为足够简单时,我们就可以分而治之。各个小问题解决了,大问题就迎刃而解了。 代码重用 避免重复劳作,提供效率 函数的定义和调用 def 函数名([参数列表]): ______定义 函数名([参数列表]) ______调用 函数名
老七Linux
2018/05/31
1.6K0
python函数参数
【总结】默认情况下,参数是通过其位置进行匹配的,从左到右,而且必须精准的传递和函数头部参数名一样多的参数。参数定义的顺序必须是:必选参数、默认参数、可变参数/命名关键字参数和关键字参数。
叶子陪你玩
2020/03/11
8640
函数占位参数
注意: 函数占位参数可以有默认值,有了默认值,实参就可以不用传入了 #include<iostream> using namespace std; void test02(int) { cout << "占位参数" << endl; } int main() { test02(10); system("pause"); return 0; } #include<iostream> using namespace std; void test02(int =10) { cout << "占位参数
大忽悠爱学习
2021/03/02
5010
函数占位参数
函数默认参数
注意: 如果某个位置已经有了默认参数,从这个位置往后,从左到右都要有默认值 #include<iostream> using namespace std; void test01(int a, int b = 10,int c = 10) { cout << a + b + c << endl; } void test02(int a , int b,int c=10) { cout << a + b << endl; } int main() { test01(10); test02(10,
大忽悠爱学习
2021/03/02
9190
函数默认参数
JavaScript 函数参数
函数运行的时候,有时需要提供外部数据,不同的外部数据会得到不同的结果,这种外部数据就叫参数。
RiemannHypothesis
2022/10/28
4610
【Python】函数 ② ( 函数参数定义和使用 | 形式参数和实际参数 )
在 Python 函数中 , 可以接受零个或多个参数 , 这些参数可以传递到函数中进行操作 ;
韩曙亮
2023/10/11
3010
【Python】函数 ② ( 函数参数定义和使用 | 形式参数和实际参数 )
ReLU激活函数+注意力机制=自适应参数化ReLU激活函数
本文首先简介了一些传统的激活函数和注意力机制,然后重点解读了一种“注意力机制下的新型激活函数”,即自适应参数化修正线性单元(Adaptively Parametric Rectifier Linear Unit,APReLU)。
用户7096272
2020/03/18
7450
ReLU激活函数+注意力机制=自适应参数化ReLU激活函数
plot函数详解_plot函数参数
plot(X,Y) :绘制Y关于X的函数。 plot(X,Y,LineSpec) :指定线形,标记,颜色等。详细 plot(_,Name,Value) :指定线的属性。 举例: plot(x,y1,'k-',x,y2,'b--',x,y3,'r:','linewidth',1.5);
全栈程序员站长
2022/11/04
7540
函数(四)(数组作为函数参数)
一是数组元素作为函数参数,这种情况下与简单变量作为函数的参数完全一样,数组元素的值被单向传递给形参变量。
pigeon
2022/04/11
1.5K0
函数(四)(数组作为函数参数)
js匿名函数作为函数参数
继承,多态,甚至指针,c能实现,c++,java有,javascript(和java是雷锋和雷峰塔的区别,名字上不知道坑了多少人)也能变通实现。
全栈程序员站长
2022/11/10
5.3K0

相似问题

参数化函数

13

参数化jquery函数

40

衣物参数化函数

15

将函数参数化

013

参数化连接函数

23
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文