首页 > 其他分享 >Coursera Programming Languages, Part C 华盛顿大学 Week 2

Coursera Programming Languages, Part C 华盛顿大学 Week 2

时间:2022-10-13 23:56:44浏览次数:41  
标签:Week function 表达 程序 Coursera Programming OOP each operation

week 2 我们采用一种新的视角来对比 FP 与 OOP,即将问题分解 (decompose) 与实现 (implement) 的方式

OOP Versus Functional Decomposition

对 FP 而言,常见的分解 (decomposition) 方式为:将程序拆分成一个个函数 (function),在对应的函数中执行一些操作 (perform some operation)
对 OOP 而言,我们则是将程序拆分为一个个类 (class),对某类型的数据采取行为

以我们很熟悉的算术语言 (就是之前在 ML 中编写的,又用 Racket 实现的算数小语言) 为例
这个程序中有几个要素:

  • 不同种类的表达 (different variants of expressions),如 integer 类型的值,negate 类型的表达,add 类型的表达等
  • 对这些表达 (expression) 的操作 (operation),例如 evaluate (即 eval),将其转化为字符串 (toString),表达中的值有没有零 (hasZero) 等

我们将这些要素抽象成一个二维网格 / 矩阵 (2D matrix),那么程序编写的过程实际上就是对矩阵的每一个空格进行实现

eval toString hasZero
Int
negate
add

  • The Functional Approach
    • Define a datatype for expressions, with one constructor for each variant
    • Define a function for each operation
    • In each function, has a branch (在 ML 中通过模式匹配 pattern-matching 实现) for each variant of data

标签:Week,function,表达,程序,Coursera,Programming,OOP,each,operation
From: https://www.cnblogs.com/VeniVidiVici/p/16790138.html

相关文章

  • NewStarCTF WEEK3
    WEEK3目录WEEK3catflag竞态条件和数据竞争sheepaflagread&writereturntocsubuurip题解思路warm_up思路ciscn_2019思路catflag竞态条件和数据竞争​ 竞态条件:强......
  • BOOST::ASIO Network programming
    #include<boost/asio/io_service.hpp>#include<boost/asio/write.hpp>#include<boost/asio/buffer.hpp>#include<boost/asio/ip/tcp.hpp>#include<array>#inclu......
  • [Leetcode Weekly Contest]314
    链接:LeetCode[Leetcode]2432.处理用时最长的那个任务的员工共有n位员工,每位员工都有一个从0到n-1的唯一id。给你一个二维整数数组logs,其中logs[i]=[idi......
  • 学校Java Week5
    Week5W5L1ReviewControlFlowConditionLoopscounterLoopsForloopsDoestheexactsamethingwithlesscodefor(inti=0;i<10;i++)//initialvalue......
  • 2022 CCPC Henan Provincial Collegiate Programming Contest (2022年CCPC河南省赛)解题
    比赛地址Difficulty后面跟的是我认为的难度,如果和官方题解不一样那么也会给出官方题解的难度。整体难度比预想中的要简单,除了计算几何和大模拟选择跳过,防AK的poly题......
  • BUUCTF [NewStarCTF] Week1 WEB NotPHP 详解
    NotPHP<?phperror_reporting(0);highlight_file(__FILE__);if(file_get_contents($_GET['data'])=="WelcometoCTF"){if(md5($_GET['key1'])===md5($_GET['k......
  • 考研记录Week20【10.3~10.9】
    一、本周总结:使用时间:【后期专业课和数学都要多花时间了!!!】总计44h9min,高数11h23min,英语10h31min,操作系统6h53min,政治10h31min,数据结构与算法30min.完成任务:英语:1.2020~202......
  • NewStarCTF Week3 Blockchain
    前言:最近学了点blockchain,正好NewStarCTF这周上了题,赶紧来练练手,出题人很友好,代码都很简单,适合刚了解区块链的新手入门Checkin先安装Metamask,再去Goerli水龙头领币然后n......
  • 2022 Jiangsu Collegiate Programming Contest
    APENTAKILL!题意:给定一个击杀序列判断是否有一个人连续击杀五个不同的人分析:开始很容易走到一个误区出现连续相同的就舍去从零开始计数但是比如ACBCAD遇到......
  • Weekly Contest 313
    WeeklyContest313ProblemANumberofCommonFactors思路数据范围小,直接暴力就完事了代码classSolution:defcommonFactors(self,a:int,b:int)->int:......