list - एक सूची में एक आइटम ढूँढना और उसका सूचकांक लौटाना-ओकैमल



find ocaml (1)

आपका कार्य निरंतर (हे (1)) अंतरिक्ष खपत करता है, क्योंकि यह पूंछ पुनरावर्ती है।

आप OCaml.org पर पूंछ पुनर्कथन के बारे में पढ़ सकते हैं, यहां

अद्यतन करें

यहाँ एक गैर पूंछ-पुनरावर्ती समाधान है:

exception Failure of string

let rec find x lst =
    match lst with
    | [] -> raise (Failure "Not Found")
    | h :: t -> if x = h then 0 else 1 + find x t

(मैं सिर्फ देखा है कि PatJ पहले से ही समझाया, माफ करना :-)

अक्सर गैर पूंछ-पुनरावर्ती समाधान अधिक संक्षिप्त और सुरुचिपूर्ण होता है। यह बहुत बुरा है, लेकिन यह दुनिया जिस तरह से कभी-कभी है

मैंने दिए गए सूची "x" को दी गई सूची "lst" में खोजने के लिए निम्नलिखित कार्य लिखा है और यदि उसे मिले तो इसके सूचक को वापस लौटाएं, अन्यथा यह एक त्रुटि वापस करेगा:

exception Failure of string

let rec func x lst c = match lst with
    | [] -> raise(Failure "Not Found")
    | hd::tl -> if (hd=x) then c else func x tl (c+1)


let find x lst = func x lst 0

फ़ंक्शन पूरी तरह से काम कर रहा है, मैं सोच रहा हूँ कि इसकी स्मृति की खपत क्या है? स्मृति की खपत का मतलब सूची की लंबाई पर निर्भर करता है? या यह ओ (1) है?

यदि यह ओ नहीं है (1) कोई मुझे बता सकता है कि मुझे ऐसा करने के लिए मुझे क्या करना चाहिए?

धन्यवाद





memory-consumption