LINUX.ORG.RU

[Грызем гранит Святого Лиспа] Велосипедостроение


0

0

Наваял я тут такой макрос

(defmacro bind1st(f arg)
	   (let ((f0 (gensym))
		 (arg1 (gensym))
		 (args (gensym)))
	     `(let ((,arg1 ,arg)
		    (,f0 ,f))
	       #'(lambda (&rest ,args)
		   (apply ,f0 (cons ,arg1 ,args))))))

Но возникло ощущение что он должен уже где-то быть среди стандартных функций. Чего-то я не понял как подобные вещи искать.

★★★
Ответ на: комментарий от Sphinx

>> как подобные вещи искать

>google://common+lisp+partial+application

Меня встроенный макрос интересует, если он есть.

Absurd ★★★
() автор топика
Ответ на: комментарий от guest-3484-2009

В няшной Mz эта функция ожидаемо называется curry ^_^:

> (expt 2 3)

8
> (curry expt 2)

#<procedure:curried>
> ((curry expt 2) 3)

8
> ((curry expt 2) 4)

16
>

Sphinx ★★☆☆
()

curry на common lisp:

(declaim (ftype (function (function &rest t) function) curry)
           (inline curry))

(defun curry (function &rest args)
  (lambda (&rest more-args)
    (apply function (append args more-args))))

h1t
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.