2009-11-24 9 views
9

मैं LFE के स्रोत के सबसे सभी प्रलेखन के माध्यम से पढ़ा है, और। सभी प्रस्तुतियों पारंपरिक लिस्प भूमिकाओं में मूल लिस्प पर जोर देती है - सामान्य समस्या हल करने, हैलो दुनिया और मैक्रोज़ अनुकरण वाक्यविन्यास।लिस्प फ्लेवर्ड Erlang - मैसेजिंग पुरातन

किसी को पता कैसे LFE मैसेजिंग पुरातन संभालती है? एक और अधिक सटीक प्रश्न निर्दिष्ट करने के लिए, तो आप इस erlang कैसे व्यक्त करेंगे:

A = 2, 
Pid = spawn(fun()-> 
    receive 
     B when is_integer(B) -> io:format("Added: ~p~n",[A+B]); 
     _ -> nan 
    end 
end), 
Pid ! 5. 

और फिर, क्या आप जानते हैं, यह कुछ कुछ संख्या और जवाब किया जा रहा है 7.

उत्तर

7

मैं नहीं कर रहा हूँ जोड़ा होने के बारे में फुसफुसाता एक एलएफई उपयोगकर्ता, लेकिन स्रोत पेड़ में user guide है। इसे पढ़ने से मुझे लगता है कि होगा यह कुछ इस तरह है:

(let ((A 2)) 
    (let ((Pid (spawn (lambda() 
         (receive 
         (B (when (is_integer B)) 
          (: io format "Added: ~p~n" (list (+ A B)))) 
         (_ nan)))))) 
    (! Pid 5))) 

लेकिन मैं बहुत संभावना एक गलती के बाद से मैं भी LFE में यह मूल्यांकन नहीं किया बना दिया है करने के लिए कर रहा हूँ।

मेरा कुछ सवाल:

  • वहाँ है एक LET* फार्म या यह पहले से ही एक तरह बर्ताव कर रहा है?
  • हैं गार्ड कहा जाता है और अधिक lispy है-पूर्णांक और is_integer नहीं के रूप में मैंने लिखा?
5

एलएफई रिलीज में उदाहरणों की गंभीर कमी है, सभी योगदान स्वागत है।

ईसाई के सुझाव सही है। मेरी एकमात्र टिप्पणी यह ​​है कि पूंजीकृत परिवर्तनीय नाम रखने की कोई आवश्यकता नहीं है, यह गलत नहीं है, लेकिन आवश्यक नहीं है।

LFE let एक 'असली' चलो, जिसमें चर बाइंडिंग शरीर में दिखाई पहले हो रहा है। आप चलो पैटर्न का उपयोग कर सकते हैं। let* रूप (वास्तव में मैक्रो) भी है जो अनुक्रमिक रूप से बांधता है।

नहीं, मैं अब तक सभी Erlang मुख्य कार्य के नाम बस के रूप में वे वेनिला erlang में हैं रखा है। नामों में _ के बजाय - का उपयोग करना निश्चित रूप से अधिक अजीब है, लेकिन आप ओटीपी में अन्य सभी फ़ंक्शन नामों और परमाणुओं के साथ क्या करते हैं? एक सुझाव है कि परिणामी परमाणुओं में _ पर एलएफई प्रतीकों में स्वचालित रूप से - मानचित्र करें, और फिर से दूसरे तरीके से वापस जाएं। यह शायद काम करेगा, लेकिन यह भ्रम पैदा करेगा?

(defmodule foo 
    (export (init 1) (handle-call 2) (handle-cast 2) (handle-info 2) ...) 
    (behaviour gen-server)) 

(defun handle-call ...) 

(defun handle-cast ...) 

etc ... 

लेकिन मैं इसके बारे में बहुत उभयभावी हूँ:

मैं तो एक व्यवहार मॉड्यूल की तरह लग रही हो सकता था।

+0

इससे शायद भ्रम पैदा हो जाएगा। कल्पना करें कि कॉमन लिस्प के उपयोगकर्ताओं को सूचित करने में हर समय खर्च किया गया है कि परमाणु नाम केस असंवेदनशील नहीं हैं, लेकिन पाठक उन्हें "इंटर्निंग" करने से पहले परमाणुओं को ऊंचा कर रहा है। – Christian

+0

मेरा छोटा सा अनुभव यह है कि लिस्प और एरलांग के बीच सिंटैक्टिक मैपिंग बहुत तेज़ी से गायब हो जाती है, जिसका अर्थ है कि एक कोडर एरलांग स्रोत पढ़ेगा और मानसिक रूप से कॉमा के लिए कोष्ठक को प्रतिस्थापित करके इसका अनुवाद करेगा। मुझे लगता है कि पुनः लिखने वाले पहचानकर्ताओं का एक और कदम मुझे यात्रा करेगा लगभग हर बार जब मैं केवल वाक्यविन्यास को फिर से लिखना चाहता हूं। मैं प्रतिस्थापन के खिलाफ वोट। –