Превратите эти haskell Международные списки в другой

Для выполнения любого кода JavaScript на странице из Unity WebAssembly требуется две вещи:

  1. Создайте код Javascript как плагин.
  2. Импортировать код в сценарий Unity.

Вся процедура описана в этом руководстве: 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 ]

5
задан Ricardo Amaral 18 December 2008 в 20:15
поделиться

4 ответа

Ну, это - новичок 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 печатает список, который Вы хотите.

2
ответ дан 18 December 2019 в 13:20
поделиться

Вот острота для Вас, если Вам все еще интересно:

zipWith (:) [1..] $ take (maximum $ map length tAll) 
                         (transpose (map (++repeat 0) tAll))

править: Хорошо, лучше записать это с двумя строками :)

9
ответ дан 18 December 2019 в 13:20
поделиться

запахи как домашняя работа, таким образом, я не дам код, но некоторые подсказки:
- длина получающихся списков является всей одинаковой, который является макс. из списков. Найдите это макс. и заполните все другие списки, обнуляет (использование лени, из которой можно заполнить все списки бесконечным списком, обнуляет).
- получите промежуточную версию, работающую, который просто печатает первый столбец Вашего возможного ответа...
- когда Вы имеете ту работу, получаете 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

2
ответ дан 18 December 2019 в 13:20
поделиться

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
1
ответ дан 18 December 2019 в 13:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: