Haskell不能传递变量

Haskell不能传递变量,haskell,Haskell,我是Haskell的初学者,在路上遇到了一个相当恼人的颠簸。在我目前的阶段,我只是想把一个列表从我的主函数传递到另一个,然后打印出来,我不明白为什么它不起作用 在我的头脑中,我觉得我应该能够: main = do putStrLn "-----Text Editor-----" putStrLn "Please enter your text" leftString <- getLine putStr

我是Haskell的初学者,在路上遇到了一个相当恼人的颠簸。在我目前的阶段,我只是想把一个列表从我的主函数传递到另一个,然后打印出来,我不明白为什么它不起作用

在我的头脑中,我觉得我应该能够:

    main = do
          putStrLn "-----Text Editor-----" 
          putStrLn "Please enter your text"
          leftString <- getLine
          putStrLn $ "\n\n" ++ leftString ++ "|" 

    moveCursorLeft = do
          putStr $ leftString
main=do
putStrLn“----文本编辑器---”
putStrLn“请输入您的文本”

leftString函数调用是调用方和被调用方之间的握手:调用方必须传递一些参数,被调用方必须接受它们。正如您编写的那样,
moveCursorLeft
不接受任何参数。但别担心,修复起来很容易:

    moveCursorLeft leftString = do
        putStr $ leftString
您现在可以在
main
中使用此选项,例如:

    main = do
        leftString <- getLine
        putStr "\n\n"
        moveCursorLeft leftString
        putStrLn "|"
main=do

leftString函数调用是调用方和被调用方之间的握手:调用方必须传递一些参数,被调用方必须接受它们。正如您编写的那样,
moveCursorLeft
不接受任何参数。但别担心,修复起来很容易:

    moveCursorLeft leftString = do
        putStr $ leftString
您现在可以在
main
中使用此选项,例如:

    main = do
        leftString <- getLine
        putStr "\n\n"
        moveCursorLeft leftString
        putStrLn "|"
main=do

leftString很少有语言能够做到这一点。当你开始编写更复杂的程序时,你就会明白它为什么有用。能够做到这一点的语言(如Lisp和shell)使用动态范围,而不是更常见的静态或词法范围。很少有语言能够做到这一点。当你开始编写更复杂的程序时,你就会明白它为什么有用。能够做到这一点的语言(例如Lisp和shell)使用动态作用域,而不是更常见的静态或词汇作用域。moveCursorLeft是由用户调用的,用于在输入到左字符串中的文本中移动“光标”,例如“a、B、C、D”|“e、F、g”=>moveCursorLeft=>“A,B,C”|“D,E,F,G”这似乎是另一个问题。通过注释修改或扩展问题是不好的。@BasicBooties:您可能希望将数据模型与打印方式分开,并将程序逻辑(如移动光标)与打印逻辑分开,例如
moveCursorLeft(“ABCD”,“EF”)
~>
(“ABC”,“DEF”)
。然后再打印光标,
printCursor(“ABC”,“DEF”)
~>打印
A,B,C | D,E,F
。moveCursorLeft由用户调用,以在输入到左字符串的文本中移动“光标”,例如“A,B,C,D”|“E,F,g”=>moveCursorLeft=>“A,B,C”|“D,E,F,g”,这似乎是另一个问题。通过注释修改或扩展问题是不好的。@BasicBooties:您可能希望将数据模型与打印方式分开,并将程序逻辑(如移动光标)与打印逻辑分开,例如
moveCursorLeft(“ABCD”,“EF”)
~>
(“ABC”,“DEF”)
。然后再打印光标,
printCursor(“ABC”、“DEF”)
~>打印
A、B、C、D、E、F