Проблемы с кодом в REPL Фреге

Пытаясь изучить Фреге, я скопировал некоторый код из Real World Frege Дирка в онлайн-REPL и попытался выполнить его. это (см. также Как выполнить скомпилированный код вырезано в онлайн-отчете Фреге). Скрипты, которые я пробовал, не компилируются :-(

Что я делаю не так?

Вот примеры того, что не компилируется:

println ( 2 *-3 )       -- unlike haskell, this will work!

и весь код ValuesAndVariables.fr


person rdmueller    schedule 26.11.2015    source источник


Ответы (2)


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

Было бы неплохо, если бы мы могли видеть пример, а не обобщение типа «большинство».

Следующим лучшим вариантом было бы иметь проблему в проекте Dierks, указывающую на ошибку(и).

Но лучше всего было бы приложить усилия, чтобы выяснить, что не так. Это также ускорит процесс обучения.

Вот два ресурса, которые могут помочь:

https://github.com/Frege/frege/wiki/Новые-или-Измененные-Функции -- примечания к выпуску для каждого выпуска, содержащие сводку вещей, которые изменились между выпусками, и особенно причины, по которым код больше не будет компилироваться, и как это исправить.

http://www.frege-lang.org/doc/fregedoc.html -- документы библиотеки. Может объяснить возможные ошибки, такие как импорт не найден или отсутствующие идентификаторы.

Иди, попробуй. И я убежден, что Дирк будет рад принять запросы на включение.

Изменить: исправления объявленных ошибок.

Ошибка в:

println ( 2 *-3 ) 

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

println (2 * -3)

Однако сообщение об ошибке, которое вы получили здесь, было:

can't resolve `*-`, did you mean `-` perhaps?

что могло вызвать идею, что он пытается интерпретировать *- как одиночный оператор.

Другая ошибка в ValuesAndVariables1.fr действительно является препятствием для новичка. Предыстория состоит в том, что у нас есть один pi с типом Double и один с типом Float и потенциально многие другие через класс типов Floating, поэтому нужно указать, какой из них печатать. Будет работать следующее:

import Prelude.Math    -- unless already imported
println Float.pi
println (pi :: Double)
person Ingo    schedule 26.11.2015
comment
Спасибо за этот подробный ответ. Ты абсолютно прав. Я не считаю изменение языка проблемой, но люди, которые начинают его изучать, должны знать об этом :-) как только я продвинусь в своем обучении, я начну запросы на вытягивание... Обещано! - person rdmueller; 27.11.2015
comment
Это было бы прекрасно. При этом возникает вопрос, почему этот код не компилируется? абсолютно в порядке, и вы быстро получите помощь (но вы из тех, кто хочет выяснить это сам, у меня такое чувство. Очень хорошо!). Тем не менее, судите сами, никто не может сказать вам конкретную причину, по которой большая часть кода не компилируется. - person Ingo; 27.11.2015

онлайн-REPL на http://try.frege-lang.org в настоящее время основан на Frege V3.23.370. -g898bc8c . Примеры кода Дирка основаны на V3.21.500-g88270a0 (которую можно увидеть в файле сборки gradle).

Похоже, разработчики Frege решили немного изменить синтаксис Frege между этими версиями. В результате вы больше не сможете запускать эти фрагменты кода в онлайн-REPL.

person rdmueller    schedule 26.11.2015