WebHU - Programozási kérdések és válaszok

elip: két függvény azonos argumentumnévvel

Írok valami util függvényt az emacs init.el-be. Úgy tűnik, hogy két, azonos argumentumnévvel rendelkező függvény hibát okoz.

Ha megváltoztatom az egyik függvény argumentumnevét, minden rendben van. De mivel az argumentum lokális a függvényre, nem lehetnek hatással egymásra.

(defun for-loop (op list-var)
  (if (not (eq list-var nil))
    (progn
      (funcall op (car list-var))
      (for-loop op (cdr list-var)))))

(defun append-to-list (list-var element-list)
  (let ((op (lambda (item) (add-to-list list-var item))))
    (for-loop op element-list)))

(setq list-1 '(1 2 3))
(append-to-list 'list-1 '(4 5 6))

Ha megváltoztatom a 'list-var' nevet a for-loopban egy másik névre, akkor az 'anohoer-list-var' pl. minden rendben megy, de a fenti kód szerint az emacs kinyomtatja a köteget:

Debugger entered--Lisp error: (wrong-type-argument symbolp (4 5 6))
  add-to-list((4 5 6) 4)
  (lambda (item) (add-to-list list-var item))(4)
  funcall((lambda (item) (add-to-list list-var item)) 4)
  (progn (funcall op (car list-var)) (for-loop op (cdr list-var)))
  (if (not (eq list-var nil)) (progn (funcall op (car list-var)) (for-loop op (cdr list-var))))
  for-loop((lambda (item) (add-to-list list-var item)) (4 5 6))
  (let ((op (function (lambda (item) (add-to-list list-var item))))) (for-loop op element-list))
  append-to-list(list-1 (4 5 6))
20.07.2019

Válaszok:


1

Üdvözöljük a dinamikus hatókör-meghatározás csodálatos világában!
[ A list-var jelenleg aktív dinamikus összerendelése a for-loop kötése, nem pedig a append-to-list, mivel ez az közelebb a veremben, ahogy az a visszakövetésben is látható. ]

Első javaslat: soha ne használja a add-to-list értéket a helyi változókra (jobb, ha helyette push vagy cl-pusnew)!

Második javaslat: Adja hozzá a -*- lexical-binding:t -*- jelet valahol az Elisp-fájlok első sorába, hogy azok alapértelmezés szerint az értelmesebb lexikális hatókört használják.

20.07.2019
Új anyagok

A rádiógomb ellenőrzött eseményének használata a jQueryben
Ebben a cikkben látni fogjuk, hogyan kell dolgozni a jquery választógombbal ellenőrzött eseményeivel. A választógombok HTML gombok, amelyek segítenek kiválasztani egyetlen értéket egy csoportból...

Körkörös függőségek megoldása terraformban adatforrásokkal – lépésről lépésre
Mi az a körkörös függőségek Dolgozzunk egy egyszerű eseten, amikor az SQS-sor és az S3-vödör közötti körkörös függőség problémája van egy egymástól függő címkeérték miatt. provider..

Miért érdemes elkezdeni a kódolást 2023-ban?
01100011 01101111 01100100 01100101 — beep boop beep boop Világunk folyamatosan fejlődik a technológia körül, és naponta fejlesztenek új technológiákat a valós problémák megoldására. Amint..

🎙 Random Noise #2  – Örökbefogadás és hit
az analitika íratlan világának gondozása Szeretné, hogy ezek a frissítések a postaládájába kerüljenek? Iratkozzon fel itt . "Ha önvezető autókat gyártanak, akkor mi miért ne..

A legrosszabb politika és prediktív modellek májátültetésre jelöltek számára az Egyesült Államokban
A máj (vagy óangolul lifer) az emberi test legnehezebb belső szervére utal, amely csendesen működik a nap 24 órájában. Mit csinál a máj? 500 feladatot hajt végre a szervezet egészségének..

5 webhely, amely 2022-ben fejleszti front-end fejlesztői készségeit
Frontendmentor.io A tényleges projektek létrehozásával a Frontendmentor.io segítséget nyújt a front-end kódolási képességeinek fejlesztésében. A kódolást azután kezdheti meg, hogy..

Mikor kell használni a Type-t az interfészhez képest a TypeScriptben?
A TypeScript a JavaScript gépelt szuperkészlete, amely statikus gépelést ad a nyelvhez. Ez megkönnyíti a robusztus és karbantartható kód írását azáltal, hogy a hibákat a fordítási időben..