Для выполнения любого кода JavaScript на странице из Unity WebAssembly требуется две вещи:
Вся процедура описана в этом руководстве: https://docs.unity3d.com/Manual/webgl-interactingwithbrowserscripting.html .
Код плагина должен находиться в пути Assets / Plugins / pluginname.jslib (расширение важно) и иметь схожую структуру:
mergeInto(LibraryManager.library, {
Hello: function () {
window.alert("Hello, world!");
},
HelloReturn: function () {
return "Hello, world!";
}
}
Для его использования необходим импорт:
[111 ]
Ну, это - новичок Haskell способ записать это, но так как это делает явную рекурсию существует, вероятно, лучший путь.:-)
head0 [] = 0
head0 xs = head xs
tail0 [] = []
tail0 xs = tail xs
nreorder n ts
| all null ts = []
| otherwise = (n : map head0 ts) : nreorder (n+1) (map tail0 ts)
И nreorder 1 tAll
печатает список, который Вы хотите. Можно избежать тех индексов путем выполнения следующего вместо этого:
reorder ts
| all null ts = []
| otherwise = (map head0 ts) : reorder (map tail0 ts)
так, чтобы reorder tAll = [[1000,2000,3000],[1001,2001,3001],[1002,2002,3002],[1003,0,3003],[1004,0,0]]
, и (немного очищенный благодаря mattiast):
nreorder ts = zipWith (:) [1..] (reorder tAll)
так, чтобы nreorder tAll
печатает список, который Вы хотите.
Вот острота для Вас, если Вам все еще интересно:
zipWith (:) [1..] $ take (maximum $ map length tAll)
(transpose (map (++repeat 0) tAll))
править: Хорошо, лучше записать это с двумя строками :)
запахи как домашняя работа, таким образом, я не дам код, но некоторые подсказки:
- длина получающихся списков является всей одинаковой, который является макс. из списков. Найдите это макс. и заполните все другие списки, обнуляет (использование лени, из которой можно заполнить все списки бесконечным списком, обнуляет).
- получите промежуточную версию, работающую, который просто печатает первый столбец Вашего возможного ответа...
- когда Вы имеете ту работу, получаете 2-й столбец...., и остальные должны быть соусом.
Править: Комментарии указывают, что это не домашняя работа, таким образом:
list = [[1000, 1001, 1002, 1003, 1004],[2000, 2001, 2002],[3000, 3001, 3002, 3003]]main = do mapM_ (putStrLn.show) (rotate list) rotate list = [(i+1):map (!!i) paddedlist | i<-[0..(len-1)] ] where len = maximum $ map length list paddedlist = map (++repeat 0) list
zip3
превратит 3 списка в единственный список утраивается. Если Вы хотите длину три списка вместо этого, можно использовать zipWith3 (\a b c -> [a,b,c])
Если Вы захотите что-то другое подробно (как в Вашем обновленном запросе), то Вы будете иметь к самокрутке. Я сказал бы, поместил бы Ваше условие завершения сначала, затем имел бы дело с общим случаем. У Вас должно быть две вспомогательных функции - один для фиксации значений путем Вы хотите (например, "head_or_zero"), и один обработать входные списки, которые завершились (например, "tail_or_nil"):
fix _ [] [] [] = []
fix i as bs cs = [i, hoz as, hoz bs, hoz cs]:fix (i+1) (ton as) (ton bs) (ton cs) where
hoz [] = 0
hoz x:xs = x
ton [] = []
ton x:xs = xs