首页
学习
活动
专区
工具
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

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

82330

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是静态类型,也就是编译器在编译过程中就能够明确每个值的类型,当发现类型匹配的时候,在编译过程中就会报错。比如输入这样一个函数: ?

79270

热爱函数式的你,句句纯正的 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>

92430

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

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

98220

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

69110

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

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

73830

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 实体类也可以实现

51550

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

,处处运行,就在于它基于一个需要首先先安装到他所谓的处处的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.8K30

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.3K10

模块_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

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

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

1.3K10

使用 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.4K80

Rust 不适合开发 Web API

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

2.2K10

c语言和python区别

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

78120

铁定不纯的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

每个程序员都该学习的5种开发语言

转载请注明出处:葡萄城官网 我曾在某处读到过(可能在代码大全》,但我不敢确定),程序员应该每年学习一门新的编程语言。...学习一种面向对象的语言的同时,也学习一种像Haskell或Scala这样的函数式编程语言,这能拓展你的思维和编程认知。你可以本文找到学习这5种语言的更多理由。...你可以用Java构建多种复杂度的工程。与之相伴的,有很棒的工具、技术和社区支持。 为什么你应该学Java呢?你会学到如果专注于应用层面和代码结构的设计,而不用关心特定系统的细节和内存管理。...Python 全球范围的学校和院系,Python是教授最多的语言之一。美国,许多学术课程,Python已经取代了Java成为接触编程的首选语言。你将从学习Python得到什么呢?...这能很快地完成一些有用的事情,比如,你可以用Python花5分钟写一个UDP消息的监听器,相比较,用Java可能就要花20分钟。忘掉“编译、打包,然后才能使用”这些步骤。

85640
领券