Chinaunix

标题: [haskell]加载两个文件 [打印本页]

作者: retuor    时间: 2010-07-18 16:55
标题: [haskell]加载两个文件
本帖最后由 retuor 于 2010-07-18 16:57 编辑

Stdm 是个模块,实现了一些命题逻辑的运算符,比如 /\ 表示 and, ==> 表示蕴涵.....

现在想在我的代码里使用这个模块,应该如何做呢。我现阶段是在 ghci 交互环境中学习 haskell 的,一般把代码写在一个文件中,比如 3.hs,然后 :load 进来。 书上建议通过 :load Stdm 来使用这个模块,但我自己的代码在 3.hs 中,如果我再  :load 3 的话,Stdm 就消失了。

我看了点 ghci 的 help,好像 :add 可以添加文件,但试用了还是不行。
Prelude> :l Stdm
[1 of 1] Compiling Stdm             ( Stdm.lhs, interpreted )
Ok, modules loaded: Stdm.
*Stdm> True /\ False
False
*Stdm> :l "6.4/3"
[1 of 1] Compiling Main             ( 6.4/3.hs, interpreted )
Ok, modules loaded: Main.
*Main> True /\ False

<interactive>:1:5: Not in scope: `/\'
Prelude> :load Stdm
[1 of 1] Compiling Stdm             ( Stdm.lhs, interpreted )
Ok, modules loaded: Stdm.
*Stdm> True /\ False
False
*Stdm> :add "6.4/3"
[1 of 2] Compiling Main             ( 6.4/3.hs, interpreted )
Ok, modules loaded: Stdm, Main.
*Main> True /\ False

<interactive>:1:5: Not in scope: `/\'
3.hs 目前是空的,而 Stdm 在附件中。谢谢。


Stdm.lhs.gz (13.36 KB, 下载次数: 65)
作者: SNYH    时间: 2010-07-18 18:54
本帖最后由 SNYH 于 2010-07-18 19:07 编辑

:m +XXOO    (如果模块已经注册)

如果是文件形式
:add Stdm.hs
:add 3.hs

:load Stdm.hs
:add 3.hs

我自己测试的都是可行的

  另外 你的附件是一个patch 不是Stdm模块


你试试 Stdm./\
作者: retuor    时间: 2010-07-18 19:13
m + 试过不行啊。模块文件是 Stdm.lhs,应该放什么地方好。我把它放当前目录的,m + 的时候得到错误信息

Prelude> :m +Stdm
module `Stdm' is not loaded
Prelude> :m + Stdm
module `Stdm' is not loaded
Prelude> :m + "Stdm"
syntax:  :module [+/-]
  • M1 ...
  • Mn
    Prelude>                  
    Leaving GHCi.


  • 用  load 还能加载。

    另外这个模块有点特殊,是所谓 "literate" 风格的。

    The program is a "literate script".  Each line that begins with "> "
    is Haskell source code that can be executed; all other lines are
    documentation which will be ignored by the compiler.

    作者: retuor    时间: 2010-07-18 19:15
    我试下,什么是 patch,它里头有  module Stdm where 的。
    作者: retuor    时间: 2010-07-18 19:16
    Stdm./\  这个可以了。

    是否有办法去掉 Stdm 呢?这样写有点麻烦。
    作者: SNYH    时间: 2010-07-19 09:47
    不好意思。。 我下载一看很多 > > 和英文  就以为是一个patch文件 以为你弄错了 以前没见过 lhs 这种 l 代表latex?

    想去掉Stdm.  要么在Stdm.lhs 的module Stdm((/\)) where修改这句  导出/\
    或者在你的3.hs  里面  import Stdm ((/\))

    测试的 Stdm.lhs不动

    1. [snyh@snyh shm]$ cat 3.hs
    2. import Stdm ((/\))

    3. ttt = False /\ True
    4. [snyh@snyh shm]$ ghci 3.hs
    5. GHCi, version 6.12.1: http://www.haskell.org/ghc/  :? for help
    6. Loading package ghc-prim ... linking ... done.
    7. Loading package integer-gmp ... linking ... done.
    8. Loading package base ... linking ... done.
    9. Loading package ffi-1.0 ... linking ... done.
    10. [1 of 2] Compiling Stdm             ( Stdm.lhs, interpreted )
    11. [2 of 2] Compiling Main             ( 3.hs, interpreted )
    12. Ok, modules loaded: Stdm, Main.
    13. *Main> ttt
    14. False
    15. *Main>
    复制代码

    作者: retuor    时间: 2010-07-19 18:21
    果然行了,谢谢。




    欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2