F # что-то идет не так - PullRequest
       3

F # что-то идет не так

0 голосов
/ 31 октября 2010

Может кто-нибудь помочь мне с этим кодом F #?Я новичок в F # и у меня с этим проблемы.Большое спасибо

let rec rem l xs = match xs with
| [] -> []
| x::xs -> if x>l then rem l y
                 else x::(rem l y)   

let rec minfree1 l:long xs = match xs with
    | [] -> 1
    | _ -> let nxs = rem xs l
           let l1 = List.length(nxs)
           in  if l1=l then (l+1)
                       else minfree1 l1 nxs

let minfree xs = minfree1 (List.length(xs)) xs

Ответы [ 2 ]

2 голосов
/ 01 ноября 2010

Что именно не работает?Что должен делать ваш код?Что вы не понимаете в ошибках вашего компилятора?

Некоторые очевидные вещи, о которых вы должны подумать:

  • Что такое y в вашей первой функции?Вы никогда не заявляете об этом.
  • В F # нет long, есть int64.И вам нужно скобки (( )) вокруг l:int64 во второй функции.
  • Функция rem ожидает, что xs будет списком, но вы передаете его l, который не является спискомво второй функции.
  • Возможно, больше.

Чего вы пытаетесь достичь?

1 голос
/ 01 ноября 2010

И вы пишете с использованием низкоуровневых идиом, когда высокоуровневое программирование будет работать намного лучше. Например

let rem l = List.filter (fun x -> x <= l)

Ваш алгоритм (minfree1) также выполняет несколько проходов для ваших данных (один для вычисления длины, другой для фильтрации, повтор). Если бы вы работали над парой списка и его длиной, это было бы быстрее. В любом случае это похоже на задачу, где потребуется некоторая фактическая структура данных [списки - это уровень сборки функциональной программы ...]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...