【 在 guvest (我爱你老婆Anna) 的大作中提到: 】 My two percent: Abstract = lift up to superset fruit is the abstraction of apple,orange,... 一般情况下的抽象是提出概念,或者说给结构命名。计算机编程领域的抽象我理解是
【 在 guvest (我爱你老婆Anna) 的大作中提到: 】 My two percent: Abstract = lift up to superset fruit is the abstraction of apple,orange,... 一般情况下的抽象是提出概念,或者说给结构命名。计算机编程领域的抽象我理解是
【 在 hci (海螺子) 的大作中提到: 】 用代码来描述比较清楚。 本来的数据,是两个字符串,“Apple", "Orange" 老板说,这两串其实有共性,他们都是"Fruit"。 OOP马公说,我知道该咋办: class Fruit { String name = ""; } class Apple extends Fruit { String name = "Apple"; } ...................
【 在 hci (海螺子) 的大作中提到: 】 用代码来描述比较清楚。 本来的数据,是两个字符串,“Apple", "Orange" 老板说,这两串其实有共性,他们都可以抽象成"Fruit"。 OOP马公说,我知道该咋办: class Fruit { String name = ""; } class Apple extends Fruit { String name = "Apple"; } ...................
共用内存,复用变量,搞搞乱。反正语言一般都没有native fp支持。
指针什么的,按定义就是可以乱指的。所以其实还行。变量,如果复用。。。
给结构命名。所以OOP中的定义Class,以及封装,更符合我理解的抽象。
迄今为止所有的讨论,都有一个大前提,就是源代码是纯文本。
fp,immutable, 封装抽象什么的都有一个假设,就是源代码是纯文本.
所以只能用语法,也就是ascii字符串来达到目的.
方便高效指的是在纯文本源代码的前提下的方便高效.
但是这是一定合理的吗?
case 1.
fp的语言,专门使用语法把immutabl和mutable的东西分开,
效果是不是说不定还不如emacs改改字体或者语法高亮?
凡是immutable的,多敲一个键,用一个特殊的字体。
进编译器之前加一点文本预处理,是不是不就完事了。
case 2.
oo也一样。什么封装继承,一定能赢Emacs把代码改的
五颜六色加上图表注释吗吗?我看未必吧?
当然,我这是星宿派的独来独往的做法,不适合和人合作。
不追求在社会上能scale up。
Abstract = lift up to superset
fruit is the abstraction of apple,orange,...
是还是有很多人无畏的跳进去学习,感觉就是浪费生命。。。
c++现在就是个垃圾语言,c++委员会就是群二货
二元函数就是抽象。
这是你所说的higher order function?
本来的数据,是两个字符串,“Apple", "Orange"
老板说,这两串其实有共性,他们都可以抽象成"Fruit"。
OOP马公说,我知道该咋办:
class Fruit {
String name = "";
}
class Apple extends Fruit {
String name = "Apple";
}
class Orange extends Fruit {
String name = "Orange";
}
FP马公说,其实加个函数就够了:
(defn fruit? [s] (#{"Apple" "Orange"} s))
DOP (data oriented programming)马公说,这些都是脱裤子放屁,不就是数据么:
{:fruit "Apple"}
{:fruit "Orange"}
你说所谓抽象是不是就是“数据上加数据”?
等于就是函数列表.
你最后那种语法是什么意思?in python就是:
fruit=['apple','orange']?
给list或者字典一个名字叫fruit?
这样也对。就是superset.
这是很FP的。这个hashmap本身也可以作函数:
(def a {:fruit "Apple"})
(a :fruit)会返回"Apple"
当然:fruit也可以作函数
(:fruit a)同样返回“Apple"
:fruit是Lisp里面的keyword。keyword always evaluates to itself.
(:fruit "Car")返回nil
从OOP角度,这个hashmap其实就是一个轻量级的对象。不过不是封装的,你可以随便给一个hashmap添加新键来产生一个新的hashmap。因为hashmap是immutable的,你可以把它随便传来传去,不怕被人改了。
能用look up table我尽量用look up table
class Fruit {
Map createOrange() {};
Map createApple() {};
}