में तारों की एक सूची को जोड़ना मैं एक लिस्प को सी अनुवादक लिख रहा हूं और मुझे तारों को संभालने में समस्या है।प्रोलॉग
define(F) --> fun_unary(F), !.
fun_unary(F) --> "(define (", label(Fun), spaces, label(Arg1), ")", spaces, expr(Body), ")",
{swritef(F, "data *%t(data *%t) { return(%t); }", [Fun, Arg1, Body])}, !.
funs([F]) --> define(F), !.
funs([F|Fs]) --> define(F), spaces, funs(Fs), !.
अब मैं कार्यों के किसी भी संख्या पढ़ सकते हैं और उन्हें एक ही स्ट्रिंग के रूप में वापस करना चाहते: यह एक कोड एक सी बराबर करने के लिए एक एकल लिस्प समारोह बदल देती है। ऊपर funs
सबसे अच्छा मैं के साथ आ सकता है, लेकिन यह इस तरह काम करता है:
?- funs(F, "(define (carzero l) (= (car l) 0)) (define (zero n) (= 0 n))", []).
F = ["data *carzero(data *l) { return(eq(car(l), make_atom_int(0))); }", "data *zero(data *n) { return(eq(make_atom_int(0), n)); }"].
मैं कुछ इस तरह चाहते हैं जबकि:
F = "data *carzero(data *l) { return(eq(car(l), make_atom_int(0))); }\n\ndata *zero(data *n) { return(eq(make_atom_int(0), n)); }".
ताकि मैं अच्छी तरह से कर सकते हैं swritef
एक पूरा कार्यक्रम में है , #include
एस और मुख्य() के बीच। एक वैकल्पिक समाधान सूची को संभालने के लिए उच्चतम स्तर अनुवादक को संशोधित करना है। यह ठीक से इस तरह दिखता है:
program(P) --> define(F), {swritef(P, "#include \"lisp2c.h\" \n\n%t \nint main() { return 0; }", [F])}, !.
मैं इन दोनों में से कोई भी कैसे करूं? मैं एसडब्ल्यूआई प्रोलॉग का उपयोग कर रहा हूं।
विषय पंक्ति का उल्लेख है Prolog जबकि के शरीर सवाल "लिस्प टू सी" अनुवाद के बारे में पूछता है। मुझे यह पता लगाने में सहायता करें कि यहां क्या है। कोड स्निपेट प्रोलॉग की तरह थोड़ा दिखते हैं, शायद इसलिए क्योंकि विशेष डीसीजी वाक्यविन्यास नियमों के लिए प्रोलॉग के अधिक बुनियादी वाक्यविन्यास के साथ भ्रमित हो रहा है। जबकि विषय पंक्ति "प्रोलॉग में तारों की एक सूची" के बारे में पूछती है, ऐसा लगता है कि लिस्प कोड शामिल स्ट्रिंग्स का विश्लेषण करता है। स्ट्रिंग्स की सूची का संबंध प्रोलॉग में अपेक्षाकृत सरल कार्य है। आपका उदाहरण भविष्यवाणी ** मजेदार/2 ** सुझाव देता है कि आप कुछ नए अक्षरों के पात्रों में फेंकना चाहते हैं ... – hardmath
... लगातार तारों को संयोजित किया जा रहा है। यदि यह प्रश्न का दायरा है, तो मैं इसका उत्तर दे सकता हूं, और हम वाक्यविन्यास के भ्रम को हल कर सकते हैं (यदि आवश्यक हो)। – hardmath
लिस्प से सी अनुवाद यह है कि कार्यक्रम क्या करता है। कार्यक्रम व्यक्तिगत मामलों का अनुवाद करने के लिए डीसीजी वाक्यविन्यास का उपयोग करते हुए प्रोलॉग में लिखा गया है। अधिकांश अनुमानित पार्स लिस्प कोड, उनके तर्क के परिणामस्वरूप सी कोड है। मैं concatenated तारों के बीच दो newlines चाहता हूँ। उम्मीद है कि यह है। – Igor