#'
শর্টহ্যান্ডের জন্য function
ঠিক যেমন '
শর্টহ্যান্ড quote
।
আপনি যেখানেই বাইট-সংকলক বা দোভাষী বা একজন মানব পাঠকের কাছে নির্দেশ করতে চান সেখানে এটি ব্যবহার করতে পারেন যে তার যুক্তিটি কোনও ফাংশন হিসাবে প্রত্যাশিত (হিসাবে বিবেচিত হবে)।
অনেক প্রসঙ্গে প্রসঙ্গ নির্ধারণ করে যে আর্গুমেন্টটি কীভাবে আচরণ করা হয়, উদাহরণস্বরূপ, আপনি কেবল (বা ) ব্যবহার করার পরিবর্তে এটিকে (ব্যবহার quote
বা '
) উদ্ধৃতি দিন । উদাহরণস্বরূপ, এমন একটি প্রসঙ্গে যেখানে একটি প্রতীক কেবল তার সম্পত্তির জন্য ব্যবহৃত হয় , অর্থাত্ এটি একটি ফাংশন হিসাবে ব্যবহৃত হয়, আপনি কেবলমাত্র চিহ্নটি পাস করতে পারেন (উদাহরণস্বরূপ এটি উদ্ধৃত করে বা ভেরিয়েবলটি পাস করার মাধ্যমে যার মান প্রতীক)।#'
function
symbol-function
তবে কখনও কখনও কোডটি পরিষ্কার হয় যদি আপনি এই #'
জাতীয় প্রসঙ্গে ব্যবহার করেন। এমনকি যদি ইমাস-লিস্প নিজেই বুঝতে পারে যে প্রতীকটি এই জাতীয় প্রসঙ্গে একটি ফাংশন হিসাবে ব্যবহৃত হয়, তবে এটি কোডের একজন মানব পাঠকের পক্ষে এটি জোর দেওয়াতে সহায়তা করতে পারে।
অন্য কিছু '
লিস্পে, ল্যাম্বদা ফর্মগুলির চিকিত্সা যা কেবল উদ্ধৃত (সাথে ) বা অব্যক্ত হয় তাদের ব্যবহারের সাথে পৃথক হতে পারে function
( #'
) ব্যবহার করে উদ্ধৃত করার সময় একটি ফাংশন অবস্থানে use তবে ইমাস লিস্পে নয়। এ গিয়ে Emacs পাতার মর্মর আপনাকে (ব্যবহার হয় উদ্ধৃত করার প্রয়োজন নেই '
বা #'
) একটি ল্যামডা ফর্ম যে আপনি একটি ফাংশন হিসাবে গণ্য চান (এবং কেবল একটি তালিকা হিসাবে)। আপনি যদি চান যে এটি কেবল একটি তালিকা, কার lambda
ইত্যাদি সহ পরিচালনা করে , তবে এটিকে উদ্ধৃত করুন (সহ '
) - নীচের উদাহরণটি এটি চিত্রিত করে।
(এলিস্প) থেকে নামহীন ফাংশন :
- বিশেষ ফর্ম: function
function-object
এই বিশেষ ফর্মটি FUNCTION-OBJECT
মূল্যায়ন না করেই ফিরে আসে ।
এটিতে এটি quote
(* নোট উদ্ধৃতি: :) এর মতো। তবে বিপরীতে
quote
, এটি ইমাক্স মূল্যায়নকারী এবং বাইট-সংকলককে FUNCTION-OBJECT
একটি ফাংশন হিসাবে ব্যবহার করার উদ্দেশ্যে তৈরি হিসাবে একটি নোট হিসাবে কাজ করে। ধরে FUNCTION-OBJECT
নেওয়া একটি বৈধ ল্যাম্বডা এক্সপ্রেশন, এর দুটি প্রভাব রয়েছে:
• কোডটি বাইট-সংকলিত হয়ে গেলে, FUNCTION-OBJECT
বাইট-কোড ফাংশন অবজেক্টে সংকলিত হয় (* নোট বাইট সংকলন: :)।
Le যখন লেজিকাল বাঁধাই সক্ষম হয়, তখন FUNCTION-OBJECT
একটি বন্ধে রূপান্তরিত হয়। * নোট বন্ধ করুন ::।
পঠন সিনট্যাক্সটি ব্যবহারের #'
জন্য একটি স্বল্প হাত function
। নিম্নলিখিত ফর্মগুলি সমস্ত সমতুল্য:
(lambda (x) (* x x))
(function (lambda (x) (* x x)))
#'(lambda (x) (* x x))
নিম্নলিখিত উদাহরণে, আমরা একটি change-property
ফাংশনটিকে সংজ্ঞায়িত করি যা একটি ফাংশনকে এর তৃতীয় আর্গুমেন্ট হিসাবে গ্রহণ করে, এর পরে একটি double-property
ফাংশন যা change-property
এটি একটি বেনাম ফাংশন পাস করে ব্যবহার করে:
(defun change-property (symbol prop function)
(let ((value (get symbol prop)))
(put symbol prop (funcall function value))))
(defun double-property (symbol prop)
(change-property symbol prop (lambda (x) (* 2 x))))
মনে রাখবেন যে আমরা lambda
ফর্মটি উদ্ধৃত করি না ।
আপনি যদি উপরের কোডটি সংকলন করেন তবে বেনামে ফাংশনটিও সংকলিত হয়। এটি হবে না যদি, বলুন আপনি বেনামে ফাংশনটি তালিকা হিসাবে উদ্ধৃত করে নির্মাণ করেছেন:
(defun double-property (symbol prop)
(change-property symbol prop '(lambda (x) (* 2 x))))
সেক্ষেত্রে, বেনামে ফাংশন সংকলিত কোডে ল্যাম্বডা এক্সপ্রেশন হিসাবে রাখা হয়। বাইট-সংকলকটি এই তালিকাটিকে একটি দেখতে দেখতে একটি ফাংশন বলে ধরে নিতে পারে না, যেহেতু এটি জানে না যে
change-property
এটি কোনও ফাংশন হিসাবে ব্যবহার করতে চায়।