Browsing projects by Tag(s)

Select a tag to browse associated projects and drill deeper into the tag cloud.

Showing page 1 of 1

cl-op is a partial application and partial evaluation library for Common Lisp inspired by Goo's op function and SRFI 26 (Notation for Specializing Parameters without Currying). Release notes0.7.0: Rewrote code walker in CPS. Better lifting from special forms. Added compiler macro for beta ... [More] reduction. BREAKING CHANGE -- renamed CL-OP-HOF to CL-OP.HOF 0.6.1: Added GENERATOR to CL-OP-HOF. Refactored WALK. 0.6.0: Better invariant lifting of macro forms containing slots. Added compose. BREAKING CHANGE: Moved the utility higher order functions (flip, conjoin, disjoin, compose) to a seperate package cl-op-hof. 0.5.2: Major refactoring. Added conjoin. Exported conjoin and disjoin. 0.5.1: Made environment passing explicit. Added CHANGELOG.txt 0.5.0: BREAKING CHNAGE -- removed papply, papply*, pfuncall, pfuncall*, pmultiple-value-bind, pmultiple-value-bind*, *walker-ignore-list* 0.4.2: added support for nested ops. 0.4.0: made invariant lifting less aggressive but more robust. 0.3.2: minor cleanup. 0.3.1: bugfix: improper handling of lambda macro. 0.3.0: macroexpanding only to determine whether to lift. 0.2.0: BREAKING CHANGE -- op now takes a function name or a lambda expression as the function argument (instead of a function designator as before). Added pfuncall and pmultiple-value-call. 0.1.0: initial release. Installationcl-op is ASDF installable. DocumentationPackage cl-opMacro op, op*Syntax:op fn &rest args+ => function op* fn &rest args+ => functionDescription:op creates an anonymous function with implicitly defined arguments. fn is either a function name or a lambda expression (not a function designator. In this regard op is more akin to function than funcall). Each arg is either a slot for an implicit required parameter _ or rest parameter __ or an s-expression potentially containing further slots or op forms (see below). Non-slot args are evaluated. op* is like op except it defers evaluation of non-slot arguments. It is primarily intended to be used with functions with side-effects. Examples:(mapcar (op / _ 2) '(1 2 4 8 10)) => '(1/2 1 2 4 5) (mapcar (op / (+ _ _)) '(2 3 4) '(2 3 4)) => '(1/4 1/6 1/8) (mapcar (op + _ (random 100)) '(1 1 1 1 1)) => '(26 26 26 26 26) (mapcar (op* + _ (random 100)) '(1 1 1 1 1)) => '(51 51 89 13 99) Notes:op forms can be meaningfully nested. Slots in nested op forms are not added to the surrounding op argument list. Symbols _ and __ can still be used as arguments if quoted: (defun __ (x y) (equal x y)) (mapcar (op subst _ '_ _ :test #'__) '(a b c) '((foo _ bar _ _ baz) (_ _) (1 2 _ d))) => '((FOO A BAR A A BAZ) (B B) (1 2 C D))Function argument as slot can be simulated by using funcall or apply: (mapcar (op funcall _ '(1 2 3 4 5)) (list #'first (op nth 2 _))) => '(1 3)Package cl-op-hofFunction conjoinSyntax:conjoin &rest predicates => functionDescription:conjoin combines predicates by (logical) and. Function disjoinSyntax:disjoin &rest predicates => functionDescription:disjoin combines predicates by (logical) or. Function composeSyntax:compose &rest functions => functionDescription:compose composes functions. Function flipSyntax:flip fn => functionDescription:flip switches the first two arguments of fn. Among other things it somewhat compensates for op's strict left-to-right argument order. Examples:(mapcar (flip #'/) '(2 2 2) (1 2 3)) => '(1/2 1 3/2)Macro generatorSyntax:generator &body body => functionDescription:generator makes an anonymous function with body body that takes any number of arguments (but ignores them). Examples:(mapcar (generator (1- (random 2.0))) '(2 2 2)) => '(-0.864053 0.52210474 -0.8798127)Deprecated[deprecated] Macro papply, papply*, pfuncall, pfuncall*, pmultiple-value-call, pmultiple-value-call*Syntax:papply &rest args+ => function papply* &rest args+ => function pfuncall &rest args+ => function pfuncall* &rest args+ => function pmultiple-value-call &rest args+ => function pmultiple-value-call* &rest args+ => functionDescription:papply, pfuncall and pmultiple-value-call are op equivalents of apply, funcall and multiple-value-call respectively. [deprecated] Special variable *walker-ignore-list*Description:Parser ignores forms starting with a symbol from this list. Used in situations where _ or __ already have an established meaning (e.g. to facilitate op nesting). Related workcurly Alexandria (curry and rcurry) arnesi (L# -- A reader macro for simple lambdas ) F-underscore [Less]

0
 
  0 reviews  |  0 users  |  157 lines of code  |  0 current contributors  |  Analyzed 4 days ago
 
 
 
 

Creative Commons License Copyright © 2013 Black Duck Software, Inc. and its contributors, Some Rights Reserved. Unless otherwise marked, this work is licensed under a Creative Commons Attribution 3.0 Unported License . Ohloh ® and the Ohloh logo are trademarks of Black Duck Software, Inc. in the United States and/or other jurisdictions. All other trademarks are the property of their respective holders.