在Linux上使用命令行编译F#程序

8
使用C语言,我可以使用通用文本编辑器(如nano)编写程序,并在Linux终端中进行编译。
gcc mySum.c -o mySum

获取一个窗口,要求输入并返回输出。
#include <stdio.h>

int main(){
        int x;
        int y;
        int sum;
        printf("Program that sums two numbers.\n\nPlease type the first one:\n");
        scanf("%d", &x);
        printf("Type the second one:\n");
        scanf("%d", &y);
        sum = x + y;
        printf("The sum of %d and %d is %d\n", x, y, sum);
return 0;
}

我能否在没有Visual Studio/MonoDevelopment的情况下使用F#编写同样类型的程序?

对我来说,使用类似于裸文本编辑器(如我使用C时所做的)非常有益。这迫使我更加集中精力学习,减少了IDE的帮助。此外,文本编辑器(如nano、notepad++或其他工具)提供比fsharpi更灵活的工具来编写程序。这样,当程序完成后,我可以像在C示例中一样将其提交给编译器。

我想说的是通过实现这个函数:

let mySum x y =
    x + y

使用

标签

fsharpc mySum.fs

但是我不知道如何实现它。我找到了这个参考资料,但它有点高级。


1
你是否了解 Visual Studio Code,它可以在 Linux 上运行,并且不应与 Visual Studio 混淆。请参阅 使用 Ionide 在 Visual Studio Code 中开始使用 F# - Guy Coder
1
@Abel 你可能也会对WSLWSL-Programs感兴趣。 - Guy Coder
1
关于使用WSL和编辑文件,请参见:编辑Linux文件。我已经尝试使用WSL很多个月了,但需要理解一些东西才能熟练使用。 - Guy Coder
1
我还订阅了WSL问题,以便在事情得到修复或更新时得到通知。最近的大变化是Haskell现在可以使用,但您必须在Fast Ring上才能使用。 - Guy Coder
1
感兴趣的内容:从Visual Studio 2015启动基于WSL的Bash构建 - Guy Coder
显示剩余5条评论
1个回答

6
我想你需要的是FSI (F# Interactive),在Linux / MacOS上它被称为fsharpi。你也可以使用fsharpc来编译它,但如果你只是尝试、测试或脚本化,那么fsharpi提供的REPL环境可能更方便。
关于如何在Linux上使用它的介绍可以在这里找到
请注意,在Linux中使用F#之前,您必须至少安装Mono。
编辑:作为说明,你提到的C程序可以用无数种方式表达,这里有一种方式(假设输入正确,或异常,程序未经过测试):
[<EntryPoint>]
let main argv = 
    let scani() =
        printfn "Give a number: "
        Console.ReadLine()
        |> Int64.Parse

    let (x, y) = (scani(), scani())
    printfn "The sum of %d and %d is %d" x y (x + y)

    // wait before returning prompt
    printfn "Hit any key to continue"
    Console.ReadKey() |> ignore

编辑2:您编辑了您的问题并表示希望使用“Nano”进行工作。那是我不知道的一种编辑器。您还说您不想使用Mono。我不知道为什么,除非您指的是MonoDevelop,因为在Linux上没有Mono,您无法编译.NET程序。
您提到的命令gcc mySum.c -o mySum可以转换为F#的命令行变体。例如(假设与fsc.exe的语法相同)(为了清晰起见,放在多行上):
fsharpc.exe 
 -o:MyProgram.exe 
 --debug:pdbonly 
 --noframework 
 --optimize+ 
 --platform:anycpu32bitpreferred 
 -r:"PathTo\FSharp.Core.dll" 
 -r:"PathTo\mscorlib.dll" 
 -r:"PathToYourReferencedOtherDlls\SomeClassLib.dll 
 -r:"PathTo\System.Core.dll" 
 -r:"PathTo\System.dll"
 --target:exe 
 --warn:3 
 file1.fs file2.fs file3.fs 

许多选项可能可以省略,但这是一个有效的命令行,来自Visual Studio。
然而,我建议使用预配置为运行F#程序、集成了REPL、调试器、语法着色、实时类型信息(非常重要!)以及其他Intellisense功能的编辑器,你可以在Visual Studio中获得这些功能(VS Code edition适用于Linux,并且有一个出色的编辑器,感谢Guy Coder提醒我),也可能有其他一些支持F#的编辑器。

谢谢你的回答,它帮助我更好地定义了问题。我经常使用 fsharpi。我想使用文本编辑器提供的更灵活的工具,比如 nano,来编写程序。一旦程序完成,就像我用 C 语言那样将其交给编译器。 - Worice
@Worice,我看到你编辑了你的问题。虽然我不理解你不想使用Visual Studio或MonoDevelop的动机,但我已经尝试给出一个示例命令行(可能比必要的更加复杂)。 - Abel
这是一个很好的例子,Abel,谢谢。我是一名新手程序员。我发现使用类似于我正在使用C语言的裸文本编辑器对我非常有启发性。它迫使我更加专注于学习,减少IDE的帮助。可以说是出于教学目的。 - Worice
谢谢您的建议,@GuyCoder。 - Worice
@Worice,好的了解。个人而言,我宁愿学习语言本身而不是其所有工具的复杂性,后者只会分散注意力。但这只是我的观点,每个人都有自己的学习方式 ;)。很高兴能帮到你! - Abel
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接