Реализация haskell mapTree с использованием foldTree

Существует способ использования Java из Matlab, в частности класса java.awt.Robot. См. здесь .

По-видимому, существуют два типа программ, касающихся того, как они работают при вызове из Matlab с system('...'):

  1. Для некоторые программы, Matlab ждут , пока программа не завершит работу перед запуском следующего оператора. Это происходит, например, с WinRAR (по крайней мере, на моей машине с Windows 7).
  2. Для других программ этого не происходит, и Matlab переходит к следующим оператором сразу после внешняя программа была запущена. Примером такого типа является explorer (стандартный проводник файлов Windows).

Теперь можно сразу же запустить выполнение в Matlab даже для программ типа 1: просто добавьте & в конце строки, переданной в system. Это стандарт в оболочке Linux Bash , и он также работает в Windows, как обсуждалось здесь здесь .

Итак, вы будете действовать следующим образом:

robot = java.awt.Robot;
command = '"C:\Program Files (x86)\WinRAR\WinRAR"'; %// external program; full path
system([command ' &']); %// note: ' &' at the end
pause(5) %// allow some time for the external program to start
robot.keyPress (java.awt.event.KeyEvent.VK_ENTER); %// press "enter" key
robot.keyRelease (java.awt.event.KeyEvent.VK_ENTER); %// release "enter" key

1
задан J.Ober 4 March 2019 в 00:12
поделиться

1 ответ

Вторая функция неверна из-за ее типа: Tree a -> Tree b, тогда как foldTree ожидает, что она будет a -> b, где a взято из Tree a. b требуется mapTree, чтобы быть Tree b, поэтому третий аргумент для foldTree должен иметь тип a -> Tree b.

Итак, самая простая фиксированная версия вашего transFunc:

mapTree :: forall a b. (a -> b) -> Tree a -> Tree b
mapTree f tree = foldTree Node transFunc tree 
  where transFunc :: a -> Tree b
        transFunc x = Leaf (f x)

Обратите внимание, что вам нужно включить расширение ScopedTypeVariables для его компиляции.

И эта версия transFunc является эквивалентом вашего рабочего решения: (Leaf . f)

0
ответ дан Karol Samborski 4 March 2019 в 00:12
поделиться
Другие вопросы по тегам:

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