2014-02-13 89 views
-1

我是新手,請不要對我苛刻。Sublime嘗試將Python腳本編譯爲Haskell腳本

我想用Python設置崇高的文本(爲下個學期)。在此之前,我在SublimeText中使用了Haskell,我可以在Sublime中使用「ctrl + b」運行我的skript。

當我嘗試對名爲「test.py」的文件進行相同操作時。

def add(a,b): 

     return a+b 

    main = print(add(2,3)) 

我得到的錯誤消息:

/home/nayooti/Desktop/test.py:1:1: 
    **Parse error: naked expression at top level** 
[Finished in 0.2s with exit code 1] 
[shell_cmd: runhaskell "/home/nayooti/Desktop/test.py"] 
[dir: /home/nayooti/Desktop] 
[path: /usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games] 

的雙組分看起來很熟悉,因爲它是非常具體的Haskell「在頂級赤裸表達」。事實上,當我在網上搜索這封郵件時,它只會將我帶到Haskell相關的東西。所以顯然是Sublime或編譯器認爲,我試圖運行一個Haskell腳本,即使我將文件命名爲〜.py。

對於這些,誰不熟悉的Haskell和Python: 的Python: 你通常可以通過運行一個腳本主要=打印(方法(X,Y)) 哈斯克爾:主要=打印(功能XY)

我使用的是Ubuntu 12.04。我在這裏做錯了什麼?非常感謝幫助。 TX。

+0

Tx。我去過那裏,但事實並非如此。我知道Ctrl + B,當我使用它時,我收到了上面發佈的錯誤消息。 – user3305585

+0

您是否設置了構建系統? –

+0

如前所述,我是新手,我不確定'建立系統'是什麼意思。我猜Ubuntu配備了Python,我可以通過控制檯執行。我沒有在Sublime中設置任何路徑,以防你的問題。 – user3305585

回答

5

轉至Tools -> Build System並確保已選擇Python。此外,這是不是你寫主要在Python中,它應該更像

def add(a, b): 
    return a + b 

def main(): 
    print(add(2, 3)) 

if __name__ == '__main__': 
    main() 

當你寫

main = print(add(2, 3)) 

和負載腳本,該行被執行,因爲它是一個任務,多如果我沒有

a = 1 

或者

a = print(add(2, 3)) 
相同

Python中的名稱main沒有什麼特別之處。你仍然可以看到你的輸出,因爲print有副作用,而不是定義main你只是在執行一個腳本。所不同的進來,如果你嘗試

add.py

def add(a, b): 
    return a + b 

main = print(add(2, 3)) 

subtract.py

from add import add 

def subtract(a, b): 
    return add(a, -b) 

如果運行python subtract.py,你仍然會看到5打印到屏幕上,即使有沒有在subtract.py中定義的main。顯然,這不是期望的行爲,如果您沒有將其作爲主腳本運行,則add.py中的main函數不應執行。如果您直接以python scriptname.py的身份運行Python腳本,則會爲該文件命名爲__name__的全局變量集被分配字符串"__main__"。如果導入它,則__name__將設置爲其合格的模塊名稱,如"scriptname"。這使您可以在執行文件時定義不同的行爲,而不是通過另一個腳本導入文件。