Portál AbcLinuxu, 8. května 2025 20:28

Dotaz: Lisp / Scheme

9.12.2013 00:28 prussian
Lisp / Scheme
Přečteno: 399×
Odpovědět | Admin
Hram sa trosku s Common Lispom a snazim sa ho naucit. napisal som funkcionalnu implementaciu cyklu for:
(defun for-loop (min max func)
  (func min)
  (if (= min max) () (for-loop (+ min 1) max func)))

(for-loop 1 4 (lambda (i) (print i)))
ale hadze to chybu "EVAL: undefined function FUNC"

v Scheme mi podobna funkcia normalne funguje:
(define (for-loop min max func)
  (func min)
  (if (= min max) (void) (for-loop (+ min 1) max func)))

(for-loop 1 4 (lambda (i) (display i)))
kde môže byť chyba?

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

9.12.2013 01:55 jas | skóre: 13 | blog: blag
Rozbalit Rozbalit vše Re: Lisp / Scheme
Odpovědět | | Sbalit | Link | Blokovat | Admin

Treba pouzit funkciu, ktora zavola funkciu func pre argument min (napr. funcall alebo apply). Spravne je to napr. takto (aj ked aj volanie cez lambda by malo fungovat, kazdopadne lepsie by tam bolo mat #' pred (lambda ...))


(defun for-loop (min max func)
  (funcall func min)
  (if (= min max) () (for-loop (+ min 1) max func)))
(for-loop 1 4 #'print)
Goheeca avatar 9.12.2013 09:23 Goheeca | skóre: 7
Rozbalit Rozbalit vše Re: Lisp / Scheme
Odpovědět | | Sbalit | Link | Blokovat | Admin
Common Lisp je tzv. Lisp-2 a Scheme Lisp-1 (číslo značí počet jmenných prostorů) oboje má své výhody a nevýhody a vedou se o tom flamewary. Tzn., že pro zavolání funkce uložené jako hodnota proměnné je potřeba použít funcall a pro získání funkce jako hodnoty do proměnné z názvu function neboli #', jak už psal kolega. Nějaké povídání je tady.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.