iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言函数加里化和偏函数应用实例分析
  • 434
分享到

C语言函数加里化和偏函数应用实例分析

2023-06-17 09:06:40 434人浏览 独家记忆
摘要

今天小编给大家分享一下C语言函数加里化和偏函数应用实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。【名词解释】Curr

今天小编给大家分享一下C语言函数加里化和偏函数应用实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

【名词解释】Currying:因为是美国数理逻辑学家哈斯凯尔·加里(Haskell Curry)发明了这种函数使用技巧,所以这样用法就以他的名字命名为Currying,中文翻译为“加里化”。

我感觉很多人都对函数加里化(Currying)和偏函数应用(Partial Application)之间的区别搞不清楚,尤其是在相似的上下文环境中它们同时出现的时候。

偏函数解决这样的问题:如果我们有函数是多个参数的,我们希望能固定其中某几个参数的值。

几乎所有编程语言中都有非常明显的偏函数应用。在C语言中:

int foo(int a, int b, int c) {     return a + b + c;  }   int foo23(int a, int c) {    return foo(a, 23, c);   }

foo23函数实际上就是一个foo函数的偏函数应用,参数b的值被固定为23。

当然,像这样明显的偏函数并没有太大的用处;我们通常会希望编程语言能提供我们某些偏函数特征。

例如,在python语言中,我们可以这样做:

from functools import partial   def foo(a,b,c):     return a + b + c   foo23 = partial(foo, b=23)   foo23(a = 1, c = 3)  # => 27

函数加里化(Currying)明显解决的是一个完全不同的问题:如果我们有几个单参数函数,并且这是一种支持一等函数(first-class)的语言,如何去实现一个多参数函数?函数加里化是一种实现多参数函数的方法。

下面是一个单参数的javascript函数:

var foo = function(a) {     return a * a;  }

如果我们受限只能写单参数函数,可以像下面这样模拟出一个多参数函数:

var foo = function(a) {     return function(b) {      return a * a + b * b;     }  }

通过这样调用它:(foo(3))(4),或直接 foo(3)(4)

注意,函数加里化提供了一种非常自然的方式来实现某些偏函数应用。如果你希望函数foo的***个参数值被固定成5,你需要做的就是var foo5 = foo(5)。这就OK了。函数foo5就是foo函数的偏函数。注意,尽管如此,我们没有很简单的方法对foo函数的第二个参数偏函数化(除非先偏函数化***个参数)。

当然,Javascript是支持多参数函数的:

var bar = function(a, b) {     return a * a + b * b;   }

我们定义的bar函数并不是一个加里化的函数。调用bar(5)并不会返回一个可以输入12的函数。我们只能像bar(5,12)这样调用这个函数。

在一些其它语言里,比如 Haskell 和 OCaml,所有的多参数函数都是通过加里化实现的。

下面是一个把上面的foo函数用OCaml语言写成的例子:

let foo = fun a ->     fun b ->      a * a + b * b

下面是把上面的bar函数用OCaml语言写成的例子:

let bar = fun a b ->     a * a + b * b

头一个函数我们叫做“显式加里化”,第二个叫做“隐式加里化”。

跟Javascript不一样,在OCaml语言里,foo函数和bar函数是完全一样的。我们用完全一样的方式调用它们。

# foo 3 4;;  - : int = 25 # bar 3 4;;  - : int = 25

两个函数都能够通过提供一个参数值来创造一个偏函数:

# let foo5 = foo 5;;  val foo5 : int -> int = <fun>   # let bar5 = bar 5;;  val bar5 : int -> int = <fun>  # foo5 12;;  - : int = 169 # bar5 12;;  - : int = 169

事实上,我们可以把下面这个匿名函数:

fun arg1 arg2 ... argN -> exp

当作是下面这个函数的简写:

fun arg1 -> fun arg2 -> ... -> fun argN -> exp

以上就是“C语言函数加里化和偏函数应用实例分析”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网其他教程频道。

--结束END--

本文标题: C语言函数加里化和偏函数应用实例分析

本文链接: https://www.lsjlt.com/news/288027.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C语言函数加里化和偏函数应用实例分析
    今天小编给大家分享一下C语言函数加里化和偏函数应用实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。【名词解释】Curr...
    99+
    2023-06-17
  • C语言函数使用实例分析
    这篇文章主要介绍了C语言函数使用实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C语言函数使用实例分析文章都会有所收获,下面我们一起来看看吧。函数的声明和定义函数声明告诉编译器有一个函数叫什么,参数是什么...
    99+
    2023-06-30
  • C语言的div()函数实例分析
    本文小编为大家详细介绍“C语言的div()函数实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言的div()函数实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。...
    99+
    2024-04-02
  • C++ 函数模板的偏特化和显式实例化
    c++++ 函数模板提供偏特化和显式实例化来实现特殊类型的定制实现。偏特化:允许为特定类型提供定制实现,优先于通用实现。显式实例化:强制在编译时创建特定类型的实现,提高运行时效率。 C...
    99+
    2024-04-15
    函数模板 偏特化 显式实例化 c++
  • C语言之函数知识点实例分析
    这篇文章主要介绍了C语言之函数知识点实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C语言之函数知识点实例分析文章都会有所收获,下面我们一起来看看吧。一、引入引例:定义6个整型变量a,b,c,d,e,f,...
    99+
    2023-07-02
  • JavaScript函数语法、函数调用和函数返回实例分析
    这篇文章主要介绍了JavaScript函数语法、函数调用和函数返回实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇JavaScript函数语法、函数调用和函数返回实例分析...
    99+
    2024-04-02
  • C语言指针和数组应用实例分析
    这篇文章主要介绍“C语言指针和数组应用实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C语言指针和数组应用实例分析”文章能帮助大家解决问题。一、指针和数组分析-上1.数组的本质数组是一段连续的...
    99+
    2023-06-30
  • C语言中库函数的示例分析
    这篇文章主要为大家展示了“C语言中库函数的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C语言中库函数的示例分析”这篇文章吧。1 返回整数的getchar函数代码:#include<...
    99+
    2023-06-29
  • C语言指向函数的指针实例分析
    这篇文章主要介绍“C语言指向函数的指针实例分析”,在日常操作中,相信很多人在C语言指向函数的指针实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言指向函数的指针实例分析”的疑惑有所帮助!接下来,请跟...
    99+
    2023-07-02
  • C++函数参数实例分析
    这篇文章主要介绍了C++函数参数实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C++函数参数实例分析文章都会有所收获,下面我们一起来看看吧。一、函数参数的默认值C++ 中可以在函数声明时为参数提供一个默...
    99+
    2023-06-30
  • c语言abort函数实例用法
    1、abort函数的作用是异常终止一个进程,意味着abort后面的代码将不再执行。 2、当调用abort函数时,会导致程序异常终止,而不会进行一些常规的清除工作。 实例 #inc...
    99+
    2024-04-02
  • C语言函数返回值与参数传递实例分析
    本篇内容介绍了“C语言函数返回值与参数传递实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一:参数传...
    99+
    2024-04-02
  • C语言中main函数与命令行参数实例分析
    这篇文章主要介绍了C语言中main函数与命令行参数实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C语言中main函数与命令行参数实例分析文章都会有所收获,下面我们一起来看看吧。一、main 函数的概念C...
    99+
    2023-06-30
  • C语言中函数递归的示例分析
    这篇文章主要介绍C语言中函数递归的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!什么是递归?递归(recursion):程序调用自身的一种编程技巧。如何理解函数递归:从调用自身层面:函数递归就是函数自己调用自...
    99+
    2023-06-29
  • C++ 函数的递归实现:递归在语言分析中的应用示例?
    递归是一种函数在自身内部调用自身的编程范式。在 c++++ 中,可使用 operator() 运算符实现递归。递归在语言分析中可用作分析嵌套结构的工具,例如识别括号序列的合法性:如果序列...
    99+
    2024-04-22
    函数 c++ 递归
  • Go语言函数的延迟调用实例分析
    今天小编给大家分享一下Go语言函数的延迟调用实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。基本功能在以下这段代码中,...
    99+
    2023-07-02
  • C语言中数组作为函数参数的示例分析
    这篇文章主要介绍了C语言中数组作为函数参数的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。数组作为函数参数1 冒泡排序函数的错误设计...
    99+
    2024-04-02
  • C语言中main()函数参数问题的示例分析
    这篇文章主要介绍了C语言中main()函数参数问题的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。#include<stdio.h>void m...
    99+
    2023-06-29
  • python基础语法之函数应用实例分析
    这篇“python基础语法之函数应用实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“python基础语法之函数应用实例...
    99+
    2023-06-30
  • C语言函数封装及变量的作用域实例分析
    这篇“C语言函数封装及变量的作用域实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C语言函数封装及变量的作用域实例分析...
    99+
    2023-06-30
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作