首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么haskell gnuplot代码可以在ghci中运行,但在编译后不能在CLI中运行?

Haskell是一种函数式编程语言,而gnuplot是一个用于绘制图形的工具。在Haskell的交互式环境(ghci)中,可以直接运行gnuplot代码,因为ghci提供了对gnuplot的支持。但是,在编译后的Haskell代码中,无法直接在命令行界面(CLI)中运行gnuplot代码,这是因为编译后的代码需要通过外部命令或库来调用gnuplot。

编译后的Haskell代码需要使用外部命令或库来与gnuplot进行交互。这可以通过使用Haskell的外部调用功能来实现。具体而言,可以使用Haskell的System.Process模块来执行gnuplot命令,并将数据传递给gnuplot进行图形绘制。

以下是一个示例代码,展示了如何在编译后的Haskell代码中使用System.Process模块来调用gnuplot:

代码语言:txt
复制
import System.Process

main :: IO ()
main = do
  let gnuplotScript = "plot sin(x)"
  (_, Just hout, _, _) <- createProcess (shell "gnuplot") { std_in = CreatePipe }
  hPutStrLn hout gnuplotScript
  waitForProcess =<< getProcessExitCode =<< getProcessID

在上述代码中,我们首先定义了一个gnuplot脚本("plot sin(x)"),然后使用System.Process模块中的createProcess函数创建一个gnuplot进程,并将gnuplot脚本传递给它。最后,我们等待gnuplot进程执行完毕。

需要注意的是,上述代码仅为示例,实际使用时可能需要根据具体情况进行适当的修改和调整。

总结起来,尽管Haskell的gnuplot代码可以在ghci中直接运行,但在编译后的Haskell代码中,需要使用外部命令或库来调用gnuplot,并通过传递脚本或数据与gnuplot进行交互。这样可以在CLI中运行编译后的Haskell代码,并实现gnuplot的功能。

相关搜索:为什么我在Haskell中的代码可以在命令行上运行,而不能在文件中运行编译可以在Eclipse中运行,但不能在maven中运行代码可以在pyCharm中运行,但不能在Visual Studio代码中运行为什么这段代码无法在PHP中运行,但在Management Studio中却可以正常运行代码可以在Windows中运行,但不能在Mac上运行为什么我的代码可以在某些站点上运行,但在NetBeans中不能运行?代码可以在Codepen中运行,但不能在浏览器中运行代码可以在Excel模块中运行,但不能在ThisWorkbook模块中运行。代码可以在.Net 5中运行,但不能在.Net 6中运行C代码可以在Linux中运行,但不能在MacOS Mojave中运行。纯js代码可以在Firefox中运行,但不能在Chrome中运行为什么python模块可以在shell中运行,而不能在脚本中运行?Javascript代码可以在JSFiddle中运行,但不能在浏览器中运行代码可以在Dockerfile中运行,但不能在docker-compose.yml中运行C#代码可以在Visual Studio 2019中运行,但不能在在线编译器中运行JavaScript代码不能在机器上运行,但可以在JSFiddle中运行Java代码可以在Windows中运行,但不能在Linux (Fedora或Ubuntu)中运行为什么我的代码可以在Xcode Playground中运行,但不能在我的项目中运行?代码可以在java中运行,但不能在c#中运行,或者找不到等效的代码Javascript代码可以在Chrome中运行,但不能在其他浏览器中运行
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Haskell

Haskell是一种标准化的、通用纯函数式编程语言,有非限定性语义和强静态类型,在Haskell中,函数是一等公民。...本文不是入门教程,你可以阅读官网,本文主要写一写自己的学习的感受,并且告诉你一个初步的运行环境。...通过官网,你可以下载到它的运行环境,目前Haskell根据你不同的场景需求,提供了几种安装包,最小的尝试,我们可以从Minimal installers开始,你可以根据你的操作系统平台来选择下载Core...ghc包含了三个主最要的部分: ghc 编译器 ghci 交互式解析器和调试器 runghc 以脚本的方式运行Haskell 而我们即将学习的起点就是在ghci中来练习Haskell的基本语法。...回归语言Haskell,函数式的编程其实有一点上,大家都很清楚,用很少的代码来完成一件事情。Haskell还可以定义跟数学的过程一一对应,这就很有意思了。

88330

Heskell与函数式编程

就一行代码,涉及了三个函数 1)filter :从价格集合中筛选出大于20的价格,形成新的集合 2)map:对1中产生的新集合进行变换处理,这里的处理是每个元素*0.9,也就是打九折 3)sum:对2中产生集合进行求和处理...编写第一个Haskell 编写Haskell之前需要把Haskell Platform下载下来(https://www.haskell.org/platform/),安装后使用ghci就可以进行Haskell...我的电脑是Windows,在Windows下打开cmd,输入ghci,就能进入编程界面,在这个界面能够进行简单的编码,比如下面: ? 这里简单的进行了一次 3+5的求和操作。...这段代码定义了一个函数findMax,输入两个数字x和y,输出x和y的最大值,这里要注意下haskell内if else语句else是不可或缺的,不像JAVA可以只写if不写else。...类型和函数 Haskell是静态类型,也就是编译器在编译过程中就能够明确每个值的类型,当发现类型不匹配的时候,在编译过程中就会报错。比如输入这样一个函数: ?

85370
  • Haskell 自定义type与typeclass

    部分类似于OOP中的class,上文中的值构造器类似于class的构造方法,Book可以认为是构造方法的方法名,java等一些语言中构造方法是与class是同名的,但是Haskell中很明显没有这种约束...5 :-: Empty ghci> 100 :-: a (:-:) 100 ((:-:) 3 ((:-:) 4 ((:-:) 5 Empty))) haskell在deriving Show的时候仍然会视值构造器为前缀函数...我们可以在很多地方加上类型约束,这里就是在class Num where 中的a上加上它必须是Eq instance的约束。...可以在 ghci 中输入 :info YourTypeClass。所以输入 :info Num 会告诉你这个 typeclass 定义了哪些函数,还有哪些类型属于这个 typeclass。...我们可以在ghci中通过:k来获取一个类型的kind: Prelude> :k Int Int :: * *代表这个类型是具体类型。一个具体类型是没有任何类型参数的,值只能属于具体类型。

    7710

    热爱函数式的你,句句纯正的 Haskell【类型篇】

    我们从 wiki 上可以找到以下要点: Haskell 是一种标准化的,通用的纯函数式编程语言,有惰性求值和强静态类型; 在Haskell中,“函数是第一类对象”。...调试 目前 Haskell 的主要编译器是 GHC,下载地址,你可以创建 .hs 文件,用 Notepad++ 打开。 GHCi 是 GHC 的一部分,可以解析、调试 Haskell 程序。..." :r 用来重新导入当前的源代码文件; :cd 改变当前GHCi的路径; Prelude> :cd C:\Users\User\Desktop :edit 用默认的文本编辑器编辑当前导入的文件...也可以新建一个文件:Helloworld.hs 然后 :l 引入,输入 main 运行: Prelude> :l D://ghc-haskell//test.hs *Main> main Hello,...我们在下一小节做更为细致的说明“类型类”~ 类型别名 一个数据的类型可以由多个其他的类型组成,在 Haskell 中,可以用 type 关键字将这些复杂的类型替换成为其他简单的名字; Prelude>

    97130

    来看看几种 Monad来看看几种 Monad

    do 表示法 Monad 在 Haskell 中是十分重要的,所以我们还特别为了操作他设置了特别的语法:do 表示法。...在 do 表示法中,我们其实可以用模式匹配来绑定 monadic value,就好像我们在 let 表达式,跟函数参数中使用模式匹配一样。...我们来看看运行结果: ghci> wopwop Nothing 这样模式匹配的失败只会限制在我们 monad 的 context 中,而不是整个程序的失败。这种处理方式要好多了。...如果操作的函数只会回传普通值而不是具有 context 的值,那 >>= 在操作一次后就会失效,因为 context 不见了。...这些定律让我们可以对这个型态的行为做一些合理的假设。 Haskell 允许任何型态是任何 type class 的 instance。

    1.1K20

    ubuntu 14.04 install haskell

    D make install sudo aptitude purge ghc 编辑.bashrc文件 PATH="/usr/local/ghc/bin:$PATH" source ~/.bashrc ghci...cabal-install是另一个Haskell包安装库,提供了cabal命令行程序,该程序在安装新包时会自动解决包依赖关系。...安装了cabal-install就可以了,因为cabal-install依赖与cabal,安装程序会自动下载cabal并安装。...中包含这些包,但是由于使用apt-get安装时不能获得最新的版本或者会出现一些问题,比如network-2.6.0.2通过cabal总是安装不上,报编译错误 这种使用源码安装的方式很好的解决了这些问题。...在安装相关haskell包的时候可能会出现broken package错误,可以通过以下命令在haskell中移除broken package ghc-pkg check --simple-output

    72910

    查看博客园积分与排名趋势图的工具

    打开博客园积分与排名显示 这个就不消多说了,在博客园后台,选项->控件显示设置中,将积分与排名勾选并保存。 刷新页面后,可以在侧边栏看到自己博客的积分与排名: 2....输出比较多,只看我们关心的部分 可以看到积分是在名为 liScore 的 html 元素中,排名是在 liRank,没有找到解析 html 的趁手命令,直接使用 grep + sed 搞起 curl...如果是这样,在 windows 上的定时任务非‘任务计划’莫属了,下面就是我创建的任务截图 我设置在了每天中午 12:00 运行,下面这个文件是可以直接导入的那种 在 Windows 上也可以直接安装 gnuplot,将安装后 exe 所在路径(例如 E:\tools\gnuplot\bin)添加到环境变量并重启系统后,git bash 也可以在...最后附录 8 提供了 gnuplot 的官网,可以从这里下载各种系统的预编译版本,附录 9 提供了中文手册,看起来比官网轻松一些。

    77930

    2018-12-20 WARNING: Plotting with an unknown terminal. No output will be generated. Please sele...

    《程序员的数学 3:线性代数》配套代码使用的说明补充 在随书下载的说明网页中,简单交代了配套代码的使用方法。有读者反馈说,对“配 置好 Ruby 和 Gnuplot 环境”不太明白。...另注:运行结果中,只通过蓝色网格和紫色剪头的变化,就可以直观的“看”到线性 变换。对于绿色的线段可以无视,那是作者为了让大家看的更明显而卖的萌,画出了一个 日文片假名的ゲ(ge)的形状。...安装 Homebrew 之后,在终端中执行 brew update brew install ruby 即可更新到最新的 Ruby。...如果你喜欢自己下载源代码自己编译,我相信你应该不会有上述提到的问题。...在使用本书代码时,只需要按照书中附录提供的命令行,在终端中运行即可。特别要 注意,下载的 rb 文件需要在你的终端的当前目录之下。最后附上译者电脑上的运行效果。

    1.8K30

    从 Java 和 JavaScript 来学习 Haskell 和 Groovy(类型系统)

    静态类型的语言系统在编译期就明确知道每一个变量的类型,如果发现不合法的类型赋值就在编译期报错;动态类型则直到运行时才会报错。...在第一次赋值后,编译器认定类型是字符串,就容许了 toUpperCase 的发生;第二次赋值后,编译器认定类型是整型,于是 sqrt 方法的调用也合法了。...再看 Haskell,在 ghci 中使用 :t 可以输出类型: :t "" // :: [Char] :t 'a' // :: Char :t 3 // :: Num a => a...值得一提的还有: 方法重载从编译时到运行时:方法重载的选择在静态语言里面全部都是编译期确定的,编译期认为参数的类型是什么就是什么,这是在编译期间就已经明确的事情(参阅 《画圆画方的故事》,有一个很明确的例子...Groovy 中,继承和接口实现兼容 Java 的做法,而且由于和 Java 的同源性(全部编译成 class 文件在 JVM 上执行),Groovy 实体类可以实现 Java 接口,而 Java 实体类也可以实现

    55150

    函数式编程与面向对象编程: 静态类型语言的表达力 静态类型语言与动态类型语言函数式编程与面向对象编程: 静态类型语言的表达力 静态类型语言与动态类型语言

    ,处处运行,就在于它基于一个需要首先先安装到他所谓的处处的JDK,通过JVM解析编译完成后的字节码来运行,跟操作系统的接口也是在JVM托管的。...在当前差异化的芯片结构中,像C、GO、RUST这种能直接运行于操作系统之上不基于某些庞大繁重的VM之上还是很有必要的,比如物联网的控制芯片,通常内存也只有几百K,适用性更强一些,而且现在LLVM架构的编译器能够带来性能的大幅优化...5 Haskell, Go, Scala 5.1 Haskell 他虽然很老但是一直是作为学院派函数式语言的代表,其纯函数式的特性和简洁漂亮的语法(糖)让人看了非常舒服,在接触了面向过程和面向对象的开发后...作为纯函数式语言,Haskell将必然会产生Side-Effect的代码比如IO操作放到了一起,也即monad风格的部分,而其他的函数可以保证完全的函数式特征,对于同样的输入无论运行多少次结果都是一样的...,跟数学中函数的定义一样严格,函数式是一种CPU友好的语言,在当前多核计算机发展状况下,函数式可以让程序非常安全的在多个核心上并发而不用担心大量的数据交互和side-effect, 从而在语言编译过程中能够针对并发进行大幅的优化

    1.4K10

    基础语法_Haskell笔记1

    == True会报错),但认为整型与浮点型是可比的(1 == 1.0是True) 运算符优先级 在GHCi环境可以通过info:命令查看运算符优先级,例如: > :i * class Num a where...里也可以这样做: y x = x ^ 2 y' x = x ^ 2 + 1 另外,中缀形式转换在函数声明中也可以用: x `mod'` y = x - (x `div` y) * y 一些场景下能够提升函数声明的可读性...无参函数 常量可以理解成无参函数,例如: > :t 2 2 :: Num t => t 或者更生动的例子: -- 无参函数,就是const two = 1 + 1 匿名函数 匿名函数即函数表达式,在Haskell...(10, 50) sArea = show area -- 可以定义函数 addSpace s = ' ' : s -- where可以嵌套,在辅助函数中定义辅助函数.../List Comprehension,如果是在GHCi环境,在整个交互过程都可见 Case表达式 最常见的case表达式就是函数定义时参数的模式匹配(case表达式的语法糖): tail' [] =

    1.9K30

    模块_Haskell笔记2

    qualified保留命名空间来避免冲突 GHCi环境 通过:m命令引用模块: > :m Data.List > :m Data.List Data.Map Data.Set GHC 7.0之后,支持在...,具体见import qualified in GHCI 二.声明 模块用来组织代码,比如把功能相近的函数放到同一个模块中 例如二叉树的模块定义: module BTree -- 声明要暴露出去的函数及数据类型...intersperse :: a -> [a] -> [a] -- 与intersperse类似,在二维数组中插入一维数组作为分隔元素,再打平到一维 intercalate :: [a] -> [[a...Set里也有对应版本,例如null, size, member, empty, singleton, insert, delete, map, filter等 同样,集合可以用来实现一行代码去重: unique...Set.fromList 集合去重效率高于List.nub,但缺点是构造集合会对元素进行排序,所以得到的去重结果不保留原顺序(List.nub会保留) 参考资料 Haskell/Modules Haskell

    1.7K30

    Mac OS X下GnuPlot的安装

    这个版本也可以在OS X下运行。如果你只是希望能够看到一个gnuplot文件的输出结果,而不需要安装软件到系统上,那么使用这个版本会非常方便。...程序在Mac OS 9.0,Mac OS 9.1 和 Mac OS X下测试通过。      Carbon Gnuplot的下载地址为:download 这个地址中也包含了很多非常有用的工具。...传统方式自然就是源代码编译安装。如果想在Mac OS下严肃的使用GNUPlot,那么还是推荐使用传统的编译安装的方法。因为Mac OS是一个Unix的系统,所有已跨平台为目的编写的代码都可以编译安装。...我尽量避免了在自己的系统中安装包管理系统,如果你不喜欢从源码安装,可以考虑 DarwinPorts 或者 Fink。这里,列出安装过程中需要的依赖包以及版本。     .../gdtest test/gdtest.png 7、gnuplot,下载解压缩后进入目录执行      ./configure      执行后检查是否已经支持了图片类的输出。

    2.5K10

    使用 Octave 来学习 Machine Learning(一)

    我在使用 Octave 的过程中,最舒服的地方就是它对矩阵操作的支持非常全面,使用起来也很简单,一些看似很复杂的逻辑,用 Octave 可能一两行就可以轻松解决。我将带大家认识和入门 Octave。...那么我们为什么非要选择 Octave 而不选择更有名的 Matlab 呢。...95 % 的 Matlab 代码可以直接在 Octave 上使用,但因为 Octave 上使用了譬如字符串「""」和 Unix 风格的注释「#」,所以 Octave 的代码不一定能在 Matlab 上使用...安装好 Octave 后,我们可以看到有两种方式开启 Octave,一种叫 Octave-cli,这是命令行形式打开 Octave,另一种叫 Octave-gui,这是图形化的形式,当然,我还是建议大家用命令行来编写代码...「%」号后面是注释,在运行的时候不会被编译进去。Octave 中的 True 和 False 是用 1 和 0 来表示的。同时,1 不等于 2 是通过 1 ~= 2 来表示的,而不是用 1 !

    3.6K80

    为什么 Haskell 是我们构建生产软件系统的首选

    类型签名甚至可以用来在 Haskell 代码的整个语料库中搜索相关函数。...描述它的另一个术语是引用透明性(https://en.wikipedia.org/wiki/Referential_transparency),也就是可以在不更改代码功能的情况下用其返回值替换任何表达式...它是一个简单的命令行工具,依赖 Haskell REPL 来自动监视代码更改并进行增量重编译。将更改保存到文件后,我们可以立即查看代码中的任何编译器错误。...编译器抛出一个错误,并告诉我们 case 语句在其模式匹配中不处理 Refunded 值。 编译器会根据类型对域建模,从而帮助我们确保所有域逻辑都可以处理域中所有可能的值 *。...并发代码通常可以用与单线程代码相同的样式编写,而在新线程上运行底层负载的函数只需包装单线程实现即可。 并发是 Haskell 程序员工具箱中的一项有用工具。

    1.4K10

    Rust 不适合开发 Web API

    有人会说好吧,X 编程语言太好了,你可以在周末自己写一个 SDK!我必须回答,不。 Rust 的生态系统在其它领域非常丰富。...但在我的情况下,甚至基本 API 功能都不完整,一个不复杂的系统——居然花了 10 多分钟来编译。Google 代码构建的硬件配置很差,每次都会超时,我啥都编译不了。...C 语言中的代码可以引用任意内存,很容易溢出和出错。Rust 代码可以和 C 代码一样快,但是可以保护内存访问,而不需要垃圾收集器或某种运行时检查。...不能在 JavaScript 中引用未初始化的内存,因为 JavaScript 中不进行内存间的引用。 旁注:这是在描述 Node.js 和其它系统的设计目标——它们确实偶尔会有 bug。...要点是:你有一页照片(一次查询),你要显示每张照片的作者,会有多少次查询:1,合并照片和作者,或者在检索照片后对每张照片进行查询以获取作者?

    2.3K10

    c语言和python区别

    1.C语言是编译型语言,经过编译后,生成机器码,然后再运行,执行速度快,不能跨平台,一般用于操作系统,驱动等底层开发。...编译型和解释型,在编程时的最大区别是必不必要写一个入口函数,在C语言里是 main,而 Python 可以不写。...编译型的优点是“静态”,代码不能一行一行编译执行,必须作为整个工程来编译,这样便于类型检查,降低运行时错误率;运行时效率更高,因为编译器可以统筹各个方面,生成更优化的机器指令;一经编译便可直接以机器语言再次执行...比如 Python 的 CLI(命令行交互界面)就可以直接输入 Python 代码执行。这是 C 语言这样的编译语言难以做到的(调试模式下可以做到 C 表达式的实时计算,但达不到解释型语言的灵活度)。...另外,解释型语言难以实现静态类型检查,所以容易产生运行时错误,因此相对不适合用来做大项目。其实非要让编译型语言也能支持命令行交互也并非不可能——Haskell就是这样一个异类。

    85820

    铁定不纯的IO_Haskell笔记5

    放到do语句块里 在GHCi环境输入I/O Action再回车,如putStrLn "hoho" 执行 可以把main当做普通函数在GHCi环境下执行,例如: > :l echo [1 of 1] Compiling...输入空行会退出,输入其它内容会按行原样输出 也可以编译得到可执行文件: $ ghc --make ....但如果编译执行该函数,会发现是逐行处理的: $ ./toUpperCase abc ABC efd EFD 这与输入缓冲区有关,具体见Haskell: How getContents works?...惰性I/O 字符串本身是一个惰性List,getContents也是惰性I/O,不会一次性读入内容放到内存中 toUpperCase'的示例中会一行一行读入再输出大写版本,因为只在输出的时候才真正需要这些输入数据...模块中,用来删除指定文件 removeFile :: FilePath -> IO () -- 定义在System.Directory模块中,用来重命名指定文件 renameFile :: FilePath

    1.3K30
    领券