lisp中getkword输入默认_Lisp中的默认编程

原则上这种编程风格是可行的,但作为一个Lisp-2,必须添加多个#和funcalls。此外,与Haskell相反,例如,CL中没有函数,并且没有隐式的部分应用程序。一般来说,我认为这样的风格不会很习惯CL。

例如,您可以定义部分应用程序和组合,如下所示:

(defun partial (function &rest args)

(lambda (&rest args2) (apply function (append args args2))))

(defun comp (&rest functions)

(flet ((step (f g) (lambda (x) (funcall f (funcall g x)))))

(reduce #'step functions :initial-value #'identity)))

(这些只是我匆匆忙忙的例子 – 他们没有真正的测试,或者是针对不同的用例进行了深思熟虑。)

那些,像Haskell中的map((* 2)。(1))xs的东西变成:

CL-USER> (mapcar (comp (partial #'* 2) #'1+) '(1 2 3))

(4 6 8)

总结示例:

CL-USER> (defparameter *sum* (partial #'reduce #'+))

*SUM*

CL-USER> (funcall *sum* '(1 2 3))

6

(在这个例子中,你也可以设置一个符号的函数单元,而不是将该函数存储在值单元格中,以便绕过函数调用)。

在Emacs Lisp中,部分应用程序内置在应用程序中。

在Qi / Shen中,函数是curried,隐式部分应用程序(当使用一个参数调用函数时):

(41-) (define comp F G -> (/. X (F (G X))))

comp

(42-) ((comp (* 2) (+ 1)) 1)

4

(43-) (map (comp (* 2) (+ 1)) [1 2 3])

[4 6 8]

在Clojure中还有一种类似于“流水线”的感觉的句法穿线糖:

user=> (-> 0 inc (* 2))

2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值