小编one*_*one的帖子

Clojure - 命名参数

Clojure是否有命名参数?如果是这样,请您提供一个小例子吗?

clojure

77
推荐指数
3
解决办法
2万
查看次数

为什么ADT好,继承不好?

我是一个很长时间的OO程序员和功能编程新手.从我的小曝光代数数据类型看起来只是一个特殊的继承情况,我只有一个级别的层次结构,超级类不能扩展到模块之外.

所以我的(可能是愚蠢的)问题是:如果ADT只是那个,一个特殊的继承案例(再次这个假设可能是错误的;请在那种情况下纠正我),那么为什么继承得到所有的批评和ADT得到所有的赞美?

谢谢.

java oop haskell programming-languages functional-programming

21
推荐指数
4
解决办法
2359
查看次数

删除代码重复

我正在尝试为Java创建一个小函数式编程库(只是为了抓住我自己的痒).在为s,s和s 定义高阶函数时List,我遇到了这个问题:采用集合并返回相同类型集合的函数具有几乎相同的实现,但必须为每个函数重新定义数据结构 - s,s和s.SetMapListSetMap

例如,这里是s和s 的map函数的实现:ListSet

public static <A, B> List<B> map(
  List<? extends A> xs, 
  Func1<? super A, ? extends B> transformer
) {
  List<B> ys = new ArrayList<B>();
  for(A a : xs) {
    ys.add(transformer.apply(a));
  }
  return ys;
}

public static <A, B> Set<B> map(
  Set<? extends A> xs, 
  Func1<? super A, ? extends B> transformer
) {
  Set<B> ys = new HashSet<B>();
  for(A a : xs) …
Run Code Online (Sandbox Code Playgroud)

java generics programming-languages functional-programming

9
推荐指数
2
解决办法
635
查看次数

打印对象列表

我是一个Python新手.我有这个小问题.我想打印一个对象列表,但它打印的是对象的一些奇怪的内部表示.我甚至定义了__str__方法,但我仍然得到这个奇怪的输出.我在这里错过了什么?

class person(object):
  def __init__(self, name, age):
    self.name = name
    self.age = age

  def __str__(self):
     return self.name + "(" + str(self.age) + ")"

def partition(coll, pred):
  left = []
  right = []
  for c in coll:
    if pred(c):
      left.append(c)
    else:
      right.append(c)
  return left, right


people = [
  person("Cheryl", 20),
  person("Shemoor", 14 ),
  person("Kimbala", 25),
  person("Sakharam", 8)
]

young_fellas, old_fellas = partition(people, lambda p : p.age < 18)
print(young_fellas)
print(old_fellas)
Run Code Online (Sandbox Code Playgroud)

请注意,我知道我可以在这里使用for循环或map函数.我正在寻找更短,更惯用的东西.谢谢.

编辑:

还有一个问题:我的上述代码是Pythonic吗?

python

5
推荐指数
1
解决办法
268
查看次数