Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 3277744
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 17, 20262026-05-17T19:24:12+00:00 2026-05-17T19:24:12+00:00

The prototype must be: listMinPos(lst) I’m able to write the same using two arguments,

  • 0

The prototype must be:

listMinPos(lst)

I’m able to write the same using two arguments, (list and index), but am not able to even think how it can be possible using only the list argument.

The following must hold:

  1. only 1 argument (the list).
  2. no external libraries.
  3. function should be recursive (no ‘let’ inside the function)
  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-17T19:24:12+00:00Added an answer on May 17, 2026 at 7:24 pm

    I have a solution that cheats slightly : I return the position of the smallest element, but not only. The value of the smallest element is also returned.

    let rec min_pos = function
      | [] -> invalid_arg "min_pos"
      | [x] -> (0, x)
      | hd::tl ->
        let p, v = min_pos tl in
        if hd < v then (0, hd) else (p + 1, v)
    

    (As Pascal Cuoq noticed, there is still one let p, v = .. in .. remaining; it can be replaced by match .. with p, v -> ... See comments).

    Another solution that relax your second constraint (no external library) :

    let rec min_pos = function
      | [] -> invalid_arg "min_pos"
      | [x] -> 0
      | hd::tl ->
        let p = min_pos tl in
        if hd < List.nth tl p then 0 else p + 1
    

    It’s inefficient but I don’t think you can do much better without passing more information.

    Edit

    I didn’t understand this was a homework. Is there a policy against giving complete solution to homework questions ?

    Anyway, in this case I suppose that the list of restriction you gave is not, as I supposed, a creativity-forcing constraint, and I suppose that you can break them if it gives better solutions.

    I therefore propose, using local let :

    let min_pos li =
      let rec min_pos = function
        | [] -> invalid_arg "min_pos"
        | [x] -> (0, x)
        | hd::tl ->
          let p, v = min_pos tl in
          if hd < v then (0, hd) else (p + 1, v)
      in fst (min_pos li)
    

    And a tail-recursive version :

    let min_pos li =
      let rec min_pos mini mpos cur_pos = function
        | [] -> mpos
        | hd::tl ->
          if hd < mini
          then min_pos hd cur_pos (cur_pos + 1) tl
          else min_pos mini mpos (cur_pos + 1) tl
      in match li with
         | [] -> invalid_arg "min_pos"
         | hd::tl -> min_pos hd 0 1 tl
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

No related questions found

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.