Ask Your Question
1

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

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

updated 2015-04-04 14:57:13 +0100

Miro Hrončok gravatar image

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.

edit retag flag offensive close delete

1 Answer

Sort by » oldest newest most voted
3

answered 2015-04-04 12:51:42 +0100

updated 2015-04-04 14:58:26 +0100

Miro Hrončok gravatar image

Napsat higher-order funkci, která fixuje dané parametry dané funkce (partial application), je celkem snadné :-)

V Common Lispu to asi bude tohle: https://common-lisp.net/project/bese/docs/arnesi/html/api/function_005FIT.BESE.ARNESI_003A_003ACURRY.html

edit flag offensive delete publish link more

Comments

Perfektní. Přesně co jsem hledal jen ne pod spojením "partial application" takže jsem nic kloudnýho nenašel.

Jakub Melezínek ( 2015-04-04 15:00:36 +0100 )edit

Your answer

Please start posting your answer anonymously - your answer will be saved within the current session and published after you log in or create a new account. Please try to give a substantial answer, for discussions, please use comments and please do remember to vote (after you log in)!

Add answer

[hide preview]

Question tools

Follow
1 follower

Stats

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

Seen: 611 times

Last updated: Apr 04 '15