আমি কীভাবে এলিস্পের পাঠককে সংশোধন করতে পারি?


12

পাঠককে সংশোধন করার ফলে নতুন পঠন-সিনট্যাক্স (যেমন #(hash table)এবং '(quoted)) প্রবর্তন করা যাবে । অনেক লিস্পের এই ক্ষমতা রয়েছে, তবে এলিস্পের জন্য এই জাতীয় কোনও সুবিধা বিদ্যমান বলে মনে হয় না।


সি উত্স হ্যাক করুন।
ওয়াসমাস

3
ইমাস লিস্পের কাছে লিস্প-প্রোগ্রামযোগ্য পাঠক নেই।
ড্র করুন

@ ওসামাসা ওয়েল, এটি সর্বদা একটি বিকল্প :) একটি পোর্টেবল নয় , একটি বিকল্প।
শন অলরেড

আমি "অনেক লিপস এটি আছে।" আসলেই প্রশ্ন নয়। আমি অনেক বেশি সত্যিকারের প্রশ্ন করতে পছন্দ করব। আমি শিরোনামটি সংক্ষিপ্ত করার এবং এটি শরীরে পুনরায় লেখার পরামর্শ দিচ্ছি।
ইয়ংফ্রোগ

@ ইউংফ্রোগের সম্পাদনাগুলি স্বাগত। অতিরিক্ত শব্দবাজি না হয়ে আমি আরও প্রত্যক্ষ বা উপযুক্ত কিছু ভাবতে পারি না। প্রশ্নটি সহজ; এটি দীর্ঘ হতে হবে না।
শন অলরেড

উত্তর:


11

সক্রিয় হয় যে ম্যানুয়ালটি বোঝায় যে আপনি আসলে পাঠক ম্যাক্রোগুলি করতে পারবেন না।

মতে পরিশিষ্ট C পোর্টিং প্রচলিত পাতার মর্মর :

পাঠক ম্যাক্রো। কমন লিস্পে দ্বিতীয় ধরণের ম্যাক্রো অন্তর্ভুক্ত যা পৃথক অক্ষরের স্তরে কাজ করে। উদাহরণস্বরূপ, কমন লিস্প একটি পাঠক ম্যাক্রো দ্বারা উদ্ধৃত স্বরলিপি প্রয়োগ করে 'বলা হয়, যেখানে ইমাস লিস্পের পার্সার কেবল উদ্ধৃতিটিকে একটি বিশেষ কেস হিসাবে বিবেচনা করে। কিছু লিসপ প্যাকেজগুলি নিজের জন্য বিশেষ সিনট্যাক্স তৈরি করতে পাঠক ম্যাক্রো ব্যবহার করে, যা ইমাস পার্সার পড়ার পক্ষে অক্ষম।


আমি মনে করি এটি কমন লিস্প সফটওয়্যার সম্পর্কে যা এলিস্পের চেয়ে বিশেষ পাঠক ম্যাক্রোগুলি ব্যবহার করে। পৃষ্ঠাটি এলিস্পে সিএল কোড পোর্টিং সম্পর্কে। এবং হ্যাঁ, আনুষ্ঠানিকভাবে পাঠক অনুকূলিতযোগ্য নয়, তবে নীচে আমার উত্তরটি দেখুন ...
মিশু

এখানে অন্য সমস্যাটি হ'ল এমনকি যদি আপনি কোনওভাবে নতুন পাঠক সিনট্যাক্সটি প্রবর্তন করেছেন, বাকি syntax.c
ইমাকগুলি

9

স্পষ্টতই এটি করা যেতে পারে তবে প্রচুর কাজের জন্য প্রস্তুত prepare (বা করবেন না কারণ আমি কিছু সপ্তাহান্তে এটি মোকাবেলা করব ;-)।

(defvar *orig-read* (symbol-function 'read))

(defun read (&optional in)
  (message "reading from %s" load-file-name)
  (funcall *orig-read* in))

(setq load-read-function (symbol-function 'read))

এখন "সমস্ত" যা করা বাকি তা হ'ল একটি সম্পূর্ণ লিস্প রিডার বাস্তবায়ন করা যা এলিস্প যা কিছু করে এবং যা আপনি আরও কিছু চান তা সমর্থন করে। আমি মনে করি এটি defpackageএকটি উদাহরণ হিসাবে সিএল-জাতীয় এবং প্যাকেজ অভ্যন্তরীণ প্রতীক সরবরাহ করতে ব্যবহৃত হতে পারে । এছাড়াও, রেগেক্সপসের জন্য একটি বিশেষ সিনট্যাক্স হ'ল আমি খারাপভাবে যা করতে চাই (বা আরও সঠিকভাবে, কিছু স্ট্রিং সিনট্যাক্স যা ব্যাকস্ল্যাশগুলি ব্যাখ্যা করে না)।

সম্পাদনা করুন: ধারণার বাস্তবায়ন এখানে রয়েছে: https://github.com/mishoo/elisp-reader.el


আপনার পরামর্শ অনুসারে আপনি সম্পূর্ণ লিপ্প রিডার বাস্তবায়িত না করা পর্যন্ত সম্ভবত উত্তর হিসাবে এটি পোস্ট না করা (যা আমি অনুমান করছি, এটি একটি তুচ্ছ উদ্যোগ নয়)।
ড্যান

@ ড্যান এটি করণীয়, এটি কেবল যে সি তে করা আরও বেদনাদায়ক কারণ এটি স্ট্রিং প্রসেসিংয়ের জন্য ব্যর্থ হয়।
ওয়াশমাস

1
@ ড্যান এটি কাজ করে চলেছে, আমি বাস্তবায়নের লিঙ্কটি যুক্ত করার জন্য উত্তরটি সম্পাদনা করেছি।
মিশু
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.