`Итак, я очень новичок в F #. Надеюсь, проблема проста. Я занимаюсь исследованиями и оглядываюсь. У меня есть «Неполная структурированная конструкция в точке или до этой точки в выражении». Я чувствую, что это может быть что-то простое, или я ухожу.F # Поиск отсутствующего элемента между 2 массивами/списками
Цель состоит в том:
Существует массив неотрицательных целых чисел. Второй массив равен , образованному перетасовкой элементов первого массива и удалением случайного элемента. Учитывая эти два массива, найдите, какой элемент отсутствует во втором массиве . Линейный поиск не допускается.
let FindMiss list =
match list with
| [] ->
[]
|firstElem::otherElements ->
let rand = new Random
let shuffle (arr : 'a array) =
let array = Array.copy arr
let n = array.Length
for x in 1..n do
let i = n-x
let j = rand.Next(i+1)
let tmp = array.[i]
array.[i] <- array.[j]
array.[j] <- tmp
array
return array
array.[rand].delete
|array::list ->
let d=collections.defaultdict(int)
for num in list do
d[num] +=1
for num in array1 do
if d[num]==0 then return num
else d[num]-=1
printfn "The missing Number is: %A" (FindMiss[4;2;1;7;5;6;3;2])
Здесь, кажется, что-то не так. несколько вещей, похоже, больше Python, чем F # (или я пропустил некоторые новости): '.delete'' defaultdict' 'return array' (хотя return тоже существует в F #, но не так); идентификация отключена, что не помогает понять, что начинается и заканчивается; было бы неплохо иметь все сообщение об ошибке, и в этот момент оно тоже было поднято – Sehnsucht
Я боялся, что defaultdict был только python. Сообщение об ошибке бросается на «let shuffle (arr: 'a array) =», который является строкой 7. Я могу найти другие методы для .delete, и я понимаю, что без «возврата» в возвратном массиве, который он будет просто верните. Я в основном просто бросил «возвращаемый массив» там, чтобы проверить, не исправит ли это что-нибудь. Но, остальное я все еще не уверен. – LinkHyrule
это, вероятно, 'return array' (не уверен без точного отступа, я не могу его проверить); в F # вы возвращаете последнее выражение функции no need for return (например, 'array' чуть выше). Я предлагаю вам начать с написания двух отдельных функций; один для перетасовки и один, который ищет «разницу» между двумя «контейнерами». Также вы склонны смешивать массивы и списки, которые вы должны выбрать, и придерживаться его (на первом шаге). – Sehnsucht