Определение erlang функционирует в оболочке

Там какой-либо путь состоит в том, чтобы определить функцию Erlang из оболочки Erlang вместо из файла Эрл?

35
задан Brian Tompsett - 汤莱恩 27 November 2015 в 13:51
поделиться

3 ответа

Да, но это больно. Ниже приведен «декларация о лямбдах» (aka Fun в Условиях Эрланга).

1 > f = fun (x) -> x + 2 конца.

#fun

Посмотрите на это пост . Вы даже можете войти в объявление доклада модуля , если вы когда-либо нуждаетесь. Другими словами, да, вы можете объявить функции.

43
ответ дан 27 November 2019 в 07:08
поделиться

Выбор прост. Дельфи, руки вниз. C++ обладает мощными вычислительными возможностями, но не имеет хорошего графического интерфейса. У VB хороший дизайнер форм, но удачи в получении высокой производительности из него, в VB6 или .NET версии!

Delphi компилирует до очень эффективного собственного кода и даже включает встроенный ассемблер, если вам нужно подправить расчеты на этом уровне. И у него очень простой в использовании дизайнер форм. Пока вам нужно только составить Win32 поддержки, Дельфи - очевидный выбор. (И это ограничение выглядит так, будто оно скоро изменится, по сравнению с тем, что команда Delphi говорит в последнее время...)

-121--4089963-

Если вы просто хотите преобразовать значения в красивые последовательности:

twodecimals = ["%.2f" % v for v in vars]

Кроме того, вы можете распечатать единицы измерения, как в вашем вопросе:

vars = [0, 1, 2, 3] # just some example values
units = ['kg', 'lb', 'gal', 'l']
delimiter = ', ' # or however you want the values separated

print delimiter.join(["%.2f %s" % (v,u) for v,u in zip(vars, units)])
Out[189]: '0.00 kg, 1.00 lb, 2.00 gal, 3.00 l'

Второй способ позволяет легко изменить разделитель (табулятор, места, новые линии, что угодно), чтобы удовлетворить ваши потребности; разделитель может также быть аргументом функции вместо жесткого кодирования.

Edit: Чтобы использовать синтаксис «name = value», просто измените элементарную операцию в понимании списка:

print delimiter.join(["%s = %.2f" % (u,v) for v,u in zip(vars, units)])
Out[190]: 'kg = 0.00, lb = 1.00, gal = 2.00, l = 3.00'
-121--967996-

Один из ответов заключается в том, что оболочка вычисляет только выражения, а определения функций не являются выражениями, а являются формами. В файле erl определяются формы, а не выражения.

Все функции существуют в модулях, и кроме определений функций модуль состоит из атрибутов, тем важнее, существа имя модулей и какие функции из него экспортируются. Из других модулей можно вызывать только экспортированные функции. Это означает, что перед определением функций необходимо определить модуль.

Модули являются единицей компиляции в erlang. Они также являются базовой единицей обработки кода, т.е. целыми модулями, которые загружаются в систему, обновляются или удаляются из нее. В этом отношении определение функций по отдельности не вписывается в схему вещей.

Кроме того, с чисто практической точки зрения составление модуля происходит настолько быстро, что в быть, способных определять функции в оболочке, очень мало выигрыша.

14
ответ дан 27 November 2019 в 07:08
поделиться

Если вы хотите определить функцию в оболочке для использования ее в качестве макроса (поскольку она инкапсулирует некоторые функции, которые вам часто нужны), посмотрите

​​https://erldocs.com/current/stdlib/shell_default.html

3
ответ дан 27 November 2019 в 07:08
поделиться
Другие вопросы по тегам:

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