Kezdőlap › Fórumok › Programozás › Fejtörő – „csak guruknak”…
- This topic has 120 hozzászólás, 10 résztvevő, and was last updated 18 years telt el by
pointux.
-
SzerzőBejegyzés
-
2007-05-21-21:20 #2104395uzsolt wrote:Hm. Ilyenekben nem vagyok jártas, de gondolom nem az a megoldás, hogy a fentebb leírt kódo(ka)t bemásolom, hogy azt írja ki egy fájlba 🙂
Pedig valami ilyesmiről van szó… az más kérdés, hogy milyen finomságokra gondolt.
Úgyhogy csináltam poénból egy univerzális változatot, melyet ki-ki alakíthat, hogy többet tudjon. 🙂2007-05-21-21:20 #2104396uzsolt wrote:Hm. Ilyenekben nem vagyok jártas, de gondolom nem az a megoldás, hogy a fentebb leírt kódo(ka)t bemásolom, hogy azt írja ki egy fájlba 🙂Pedig valami ilyesmiről van szó… az más kérdés, hogy milyen finomságokra gondolt.
Úgyhogy csináltam poénból egy univerzális változatot, melyet ki-ki alakíthat, hogy többet tudjon. 🙂2007-05-22-22:00 #2104397„Pedig valami ilyesmiről van szó… az más kérdés, hogy milyen finomságokra gondolt.”
Mindkét ötlet jó, és kielégíti a nagyon rövid feladatmegadást. Szándékosan nem akartam korlátokat állítani. Az első ötlet is metaprogram, de így is meg lehet valósítani:
Code:#!/bin/shKOD=””
`$KOD`
Ez esetben a metaprogram a változó és a külső programfutást lehetővé tevő operátor („), a metaprogram példányosítása a változó tartalma, a generált kód meg a változó értékének behelyettesítése.
Vizsla megoldása még jobb, bár az nem bash metaprogram, hanem inkább meta-bash program (bash nyelven írt bash metaprogram), és az implementációs szintet viszi „meta fellegekbe”.
Azért jutott az eszembe ez a feladat, mert három független logikai részre lehet leboltani az általam megvalósított progit:
– halmaz operátorok (metszet, únió, különbség)
– normál és numerikus rendezés
– forrásfájl kódolása (karakterlánc vagy új sorral elválasztott felsorolás).De egy valami hasolnó mindegyikben, hogy a megvalósító funkciók, a segítség szövege és a paraméterek feldolgozása logikailag összefüggőek. Azaz ha megadok egy binér halmaz operátor definíciót így (a három pont (…) a kihagyás jele):
Code:név „leírás” {kód}pl:
kivon „Két halmaz különbsége” {$RENDEZ $1 $TMP1; $RENDEZ $2 $TMP2; diff (…)>$TMP3; $RENDEZ $TMP3 $3;}akkor meglehetősen könnyen lehet új operátorokkal bővíteni a programot, és az mindig érvényes és jól definált lesz a progi (az összes összefüggő rész egyszerre módosul, csökken a programozási hiba lehetősége).
A következő három sablonnal:
Code:function {}
function segitseg {
(…)
echo ” — ”
(…)
}for i in $*
(…)
–) MUVELET=
if test „$BEVITEL” != 2
then
segitseg
fi ;;
(…)viszonylag könnyen lehet előállítani pl. ezeket a kódrészeket:
Code:function kivon {
$RENDEZ $1 $TMP1
$RENDEZ $2 $TMP2
diff (…)>$3;
$RENDEZ $TMP3 $3;
}function segitseg {
(…)
echo ” –kivon Két halmaz különbsége”
(…)
}for i in $*
(…)
–kivon) MUVELET=kivon
if test „$BEVITEL” != 2
then
segitseg
fi ;;
(…)Ugyanígy a rendezést is és a fájlok kódolását (formátumát) is végig lehetne zongorázni. Ez a megközelítés a feladatleírás oldaláról történik, és szintén metaprogram. Egy kicsit (vagy nagyon, izlés dolga) loptam a webes technikák közül. Kissé hosszú lett, remélem érthető a lényeg.
2007-05-22-22:00 #2104398„Pedig valami ilyesmiről van szó… az más kérdés, hogy milyen finomságokra gondolt.”
Mindkét ötlet jó, és kielégíti a nagyon rövid feladatmegadást. Szándékosan nem akartam korlátokat állítani. Az első ötlet is metaprogram, de így is meg lehet valósítani:
Code:#!/bin/shKOD=””
`$KOD`
Ez esetben a metaprogram a változó és a külső programfutást lehetővé tevő operátor („), a metaprogram példányosítása a változó tartalma, a generált kód meg a változó értékének behelyettesítése.
Vizsla megoldása még jobb, bár az nem bash metaprogram, hanem inkább meta-bash program (bash nyelven írt bash metaprogram), és az implementációs szintet viszi „meta fellegekbe”.
Azért jutott az eszembe ez a feladat, mert három független logikai részre lehet leboltani az általam megvalósított progit:
– halmaz operátorok (metszet, únió, különbség)
– normál és numerikus rendezés
– forrásfájl kódolása (karakterlánc vagy új sorral elválasztott felsorolás).De egy valami hasolnó mindegyikben, hogy a megvalósító funkciók, a segítség szövege és a paraméterek feldolgozása logikailag összefüggőek. Azaz ha megadok egy binér halmaz operátor definíciót így (a három pont (…) a kihagyás jele):
Code:név „leírás” {kód}pl:
kivon „Két halmaz különbsége” {$RENDEZ $1 $TMP1; $RENDEZ $2 $TMP2; diff (…)>$TMP3; $RENDEZ $TMP3 $3;}akkor meglehetősen könnyen lehet új operátorokkal bővíteni a programot, és az mindig érvényes és jól definált lesz a progi (az összes összefüggő rész egyszerre módosul, csökken a programozási hiba lehetősége).
A következő három sablonnal:
Code:function {}
function segitseg {
(…)
echo ” — ”
(…)
}for i in $*
(…)
–) MUVELET=
if test „$BEVITEL” != 2
then
segitseg
fi ;;
(…)viszonylag könnyen lehet előállítani pl. ezeket a kódrészeket:
Code:function kivon {
$RENDEZ $1 $TMP1
$RENDEZ $2 $TMP2
diff (…)>$3;
$RENDEZ $TMP3 $3;
}function segitseg {
(…)
echo ” –kivon Két halmaz különbsége”
(…)
}for i in $*
(…)
–kivon) MUVELET=kivon
if test „$BEVITEL” != 2
then
segitseg
fi ;;
(…)Ugyanígy a rendezést is és a fájlok kódolását (formátumát) is végig lehetne zongorázni. Ez a megközelítés a feladatleírás oldaláról történik, és szintén metaprogram. Egy kicsit (vagy nagyon, izlés dolga) loptam a webes technikák közül. Kissé hosszú lett, remélem érthető a lényeg.
2007-05-23-04:43 #2104399„Vizsla megoldása még jobb, bár az nem bash metaprogram, hanem inkább meta-bash program (bash nyelven írt bash metaprogram), és az implementációs szintet viszi „meta fellegekbe”.”
Gondoltam, hogy nem erre gondoltál, de ezzel a szöveggel a ” fellegekbe küldtél”. :))))
Az ötlet – tulajdonképpen – a gnuplotból ered, a bash meg azért, mert mostanában erről szólt leginkább a topic.
De lehetne az újabb feladat egy bash nyelven megírt assembler. Na jó nem szívatom a jónépet… :))))
Mondjuk, ami nekem hiányzik, az egy gobject c kód generátor. Noha van pl. a gob, de az elég rugalmatlan.
Maga az preprocesszor nem enged meg bizonyos dolgokat, amelyeket ugyan a c kódba be lehet tenni, de ha felülírja az ember a kinduló kódot, és „frissíti” c kódot eltűnnek a változások. (Elsőre – nekem – elég lehetetlen vállalkozás végleges formában eltalálni egy objektumot, úgyhogy…)2007-05-23-04:43 #2104400„Vizsla megoldása még jobb, bár az nem bash metaprogram, hanem inkább meta-bash program (bash nyelven írt bash metaprogram), és az implementációs szintet viszi „meta fellegekbe”.”
Gondoltam, hogy nem erre gondoltál, de ezzel a szöveggel a ” fellegekbe küldtél”. :))))
Az ötlet – tulajdonképpen – a gnuplotból ered, a bash meg azért, mert mostanában erről szólt leginkább a topic.
De lehetne az újabb feladat egy bash nyelven megírt assembler. Na jó nem szívatom a jónépet… :))))
Mondjuk, ami nekem hiányzik, az egy gobject c kód generátor. Noha van pl. a gob, de az elég rugalmatlan.
Maga az preprocesszor nem enged meg bizonyos dolgokat, amelyeket ugyan a c kódba be lehet tenni, de ha felülírja az ember a kinduló kódot, és „frissíti” c kódot eltűnnek a változások. (Elsőre – nekem – elég lehetetlen vállalkozás végleges formában eltalálni egy objektumot, úgyhogy…)2007-05-23-18:13 #2104401vizsla wrote:Mondjuk, ami nekem hiányzik, az egy gobject c kód generátor. Noha van pl. a gob, de az elég rugalmatlan.
Maga az preprocesszor nem enged meg bizonyos dolgokat, amelyeket ugyan a c kódba be lehet tenni, de ha felülírja az ember a kinduló kódot, és „frissíti” c kódot eltűnnek a változások.„GObject Builder (GOB) is a simple preprocessor for easily creating GObjects (glib objects).”
Ez mindent elmond a korlátokról. Arra épít, hogy aki nem profi, azt megkímélje a sok gépeléstől. Ha az exit_on_error változó értékét kivezeted a paraméterezéshez (mint a –no-exit-on-warn kapcsoló esetén), akkor ugyan továbbra is sírni fog, de legalább a kódot ki fogja írni.
2007-05-23-18:13 #2104402vizsla wrote:Mondjuk, ami nekem hiányzik, az egy gobject c kód generátor. Noha van pl. a gob, de az elég rugalmatlan.
Maga az preprocesszor nem enged meg bizonyos dolgokat, amelyeket ugyan a c kódba be lehet tenni, de ha felülírja az ember a kinduló kódot, és „frissíti” c kódot eltűnnek a változások.„GObject Builder (GOB) is a simple preprocessor for easily creating GObjects (glib objects).”
Ez mindent elmond a korlátokról. Arra épít, hogy aki nem profi, azt megkímélje a sok gépeléstől. Ha az exit_on_error változó értékét kivezeted a paraméterezéshez (mint a –no-exit-on-warn kapcsoló esetén), akkor ugyan továbbra is sírni fog, de legalább a kódot ki fogja írni.
2007-05-23-22:21 #2104403„Arra épít, hogy aki nem profi, azt megkímélje a sok gépeléstől.”
Ha úgy nézzük, hogy gobject, akkor úgymond nem „profi” hozzá sem kezd…
Amúgy meg pont nem…, mert a nem „profi” valami olyat szerezne mint pl. a netbeans… (mármint technikai oldalról gondoltam, nem funkcionalitásról – mint pl.: netbeans vs. glade)
Egyszer gondoltam is rá, hogy kéne fejleszteni egyet, de ez ugye nem két perc… ötlet meg annyi van. :))))2007-05-23-22:21 #2104404„Arra épít, hogy aki nem profi, azt megkímélje a sok gépeléstől.”
Ha úgy nézzük, hogy gobject, akkor úgymond nem „profi” hozzá sem kezd…
Amúgy meg pont nem…, mert a nem „profi” valami olyat szerezne mint pl. a netbeans… (mármint technikai oldalról gondoltam, nem funkcionalitásról – mint pl.: netbeans vs. glade)
Egyszer gondoltam is rá, hogy kéne fejleszteni egyet, de ez ugye nem két perc… ötlet meg annyi van. :)))) -
SzerzőBejegyzés
- Be kell jelentkezni a hozzászóláshoz.
legutóbbi hsz