Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

posted 2015-04-04 11:10:30 +0100

Lze v lispu z funkce se 2 parametry udělat funkci s jedním?

Mám matici:

(setq mat '((1 2 3) (0 5 0) (7 8 9)))

A funkci na vrácení řádku matice:

(defun radek (i m)
    (if (eq i 1)
        (car m)
        (radek (1- i) (cdr m))
    )
)

Jde udělat něco, abych zafixoval hodnotu i a vrátila se mi funkce s jedním parametrem? Vím, že nám nedávno Daněček na Scale tohle povídal, že jde a přišlo mi to docela logický u funkcionálního programování. Jde vlastně o aplikaci (substituci) jen toho jednoho parametru.

Hodilo by se to třeba v případě, že chci udělat sloupec matice pomocí mapcar:

(defun sloupec (j m) 
    (mapcar 'fixniRadek m) ; kde fixniRadek je fce odvozena z funkce radek
)

Vím, že bych si mohl napsat vlastní funkci s jedním parametrem (i - řádek) která mi vrátí funkci s jedním parametrem (m - matice) a tu volat. Ale chci právě vědět jestli pro to existuje nějaká automatická funkce/makro, která to udělá pro každou funkci. Díky.

Lze v lispu z funkce se 2 parametry udělat funkci s jedním?

Mám matici:

(setq mat '((1 2 3) (0 5 0) (7 8 9)))

A funkci na vrácení řádku matice:

(defun radek (i m)
    (if (eq i 1)
        (car m)
        (radek (1- i) (cdr m))
    )
)

Jde udělat něco, abych zafixoval hodnotu i a vrátila se mi funkce s jedním parametrem? Vím, že nám nedávno Daněček na Scale tohle povídal, že jde a přišlo mi to docela logický u funkcionálního programování. Jde vlastně o aplikaci (substituci) jen toho jednoho parametru.

Hodilo by se to třeba v případě, že chci udělat sloupec matice pomocí mapcar:

(defun sloupec (j m) 
    (mapcar 'fixniRadek m) ; kde fixniRadek je fce odvozena z funkce radek
)

Vím, že bych si mohl napsat vlastní funkci s jedním parametrem (i - řádek) která mi vrátí funkci s jedním parametrem (m - matice) a tu volat. Ale chci právě vědět jestli pro to existuje nějaká automatická funkce/makro, která to udělá pro každou funkci. Díky.