Как я могу начать с функциональным программированием?

Может ли модификатор const в поле структуры указателя типа изменить способ хранения структуры в памяти?

Ответ , может быть , зависит от компилятора. Более важным для вашего вопроса является то, как const влияет на способ доступа к полю на нативной стороне. Независимо от того, что вы делаете на стороне Java, после инициализации поля info вашей структуры core_st вы не сможете его изменить.

И именно поэтому вы видите то, что видите здесь: определяя public info_st.ByReference info;, вы инициализируете структуру core_st указателем на NULL и получаете адрес памяти 0x0, сохраненный для этого поля. При доступе к этому полю с помощью API вы не можете изменить адрес памяти, он застрял.

Вы видите те же результаты, инициализирующие его как long со значением по умолчанию (0).

Решение зависит от того, как API заполняет это значение. Если на нативной стороне функция open_core предполагает, что поле info уже инициализировано с указателем на выделенную структуру, и просто изменяет значения в указанной памяти, все готово. Вам просто нужно инициализировать это поле при первом создании структуры.

Вы ничего не говорите мне о том, на что указывает *info, поэтому ответ будет разным в зависимости от того, является ли он массивом info_st структур или одной структурой. Если это одна структура, у вас есть:

public class core_st extends Structure {

    public Pointer instance;
    public info_st.ByReference info = new info_st.ByReference();

}

Это выделит здесь необходимую память для структуры info_st и сохранит указатель только для чтения в вашей структуре core_st , В зависимости от внутренней работы open_core() (и на основании вашего отчета это работает на стороне C), это может сработать!

Если нет, то, возможно, размещение рабочего кода C поможет определить, есть ли другое сопоставление JNA, которое могло бы помочь, или вам нужно обойти его с помощью собственной пользовательской функции-оболочки dll.

5
задан Svante 12 March 2009 в 14:06
поделиться

7 ответов

Я думаю для разработчика C# с фоном.NET, лучший способ ввести функциональное программирование состоит в том, чтобы изучить F#.

11
ответ дан 18 December 2019 в 05:36
поделиться

Бесстыдный разъем: я - соавтор (хорошо, прославленный редактор действительно :) Функционального программирования Реального мира. Это прямо нацелено на людей такой как самостоятельно. Это преподает принципы функционального программирования, главным образом через F#, и также показывает, как можно применить те же принципы во многих случаях в C#.

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

Это еще не отсутствует, но можно получить ранний доступ с помощью программы MEAP. Несколько глав уже доступны с большим количеством прибытия скоро.

12
ответ дан 18 December 2019 в 05:36
поделиться

Выберите функциональный язык. Python имеет много функциональных возможностей. Haskell чисто функционален.

Перейдите к Euler Проекта.

Решите некоторые проблемы.

При рассмотрении Euler статистики Проекта Python и Haskell очень высоко оцениваются.


Править

Функциональное программирование в Python:

4
ответ дан 18 December 2019 в 05:36
поделиться

Бесплатная онлайн версия Реального мира Haskell является хорошим, дешевым способом начать.

После того как Вы сделали несколько глав, Вы будете иметь возможность решать, является ли FP для Вас, и хотите ли Вы продолжить Haskell или идти дальше на некоторый другой язык. Можно даже продолжить покупать мертвую древовидную версию (как я сделал).

Парадигмы, которые Вы узнаете из этой книги, особенно вводных глав, применяются одинаково хорошо к другим функциональным языкам. (Мне нравится думать мой JavaScript и Groovy, которому извлекают выгоду из моего изучения Haskell).

3
ответ дан 18 December 2019 в 05:36
поделиться

Проведите некоторое время, смотря на Lisp или Схему, поскольку они - родительский элемент и родительский элемент функционального программирования. Схема PLT является большой средой для проигрывания со Схемой. Вовлеките себя копия Маленького Интригана, поскольку это - хорошее введение для Интригования и поможет Вам войти в курс дела справедливо быстро.

После того как у Вас есть голова вокруг функциональной попытки, делающей некоторые Euler проблемы Проекта функциональным способом.

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

Я изучил функциональное программирование в колледже, с помощью языка Haskell.

В его домашней странице Вы, скорее всего, находите то, что необходимо начать :)

BTW, требуется много практики для наблюдения решения; алгоритмы, как таковые, не то, что все раньше кодировали на Объектно-ориентированных, логических или процедурных языках.

0
ответ дан 18 December 2019 в 05:36
поделиться

Я соглашаюсь с Mehrdad Afshari. Если Вы знакомы с C#, запускают функциональное программирование с F#. Синтаксис подобен лямбда-выражениям в C#.

0
ответ дан 18 December 2019 в 05:36
поделиться
Другие вопросы по тегам:

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