Loading [MathJax]/jax/output/HTML-CSS/config.js
Ask Your Question
1

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

asked Apr 4 '15

updated Apr 4 '15

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.

add a comment

1 Answer

Sort by » oldest newest most voted
3

answered Apr 4 '15

updated Apr 4 '15

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

link

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 (Apr 4 '15)
add a comment

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: Apr 4 '15

Seen: 611 times

Last updated: Apr 04 '15