mit-scheme cgi編程

來源:互聯網
上載者:User

一直對函數式編程高度興趣,但是一直沒有相關的實踐,終於到了五一,閑來無事,故研究下。mit-scheme 不像很多scheme的解譯器那樣,它只接受標準輸入的代碼並執行,所以就不能像很多CGI在指令碼的頭部加上#!/bin/python中中方式來執行cgi。必須做一個轉換。

方法1

轉換的指令碼如下

#!/bin/shfor program in $@do    tail -n+2 $program | mit-scheme --quietdone

將該代碼儲存為scm.sh 並給該指令碼增加可執行許可權,放在指定目錄下。如/usr/bin下。
在你寫的scheme代碼檔案的首部增加一句

#!/usr/bin/scm.sh

告訴linux你想要使用scm.sh來解析該指令碼,然後scm.sh 將當前的scheme指令碼去除第一行,通過管道傳輸給mit-scheme,然後mit-scheme執行完吐回結果。
我的test.scm指令碼如下

#!/srv/www/cgi-bin/scm.sh(display "content-type: text/plain") (newline) (newline)(display "hello lisp")(define getenv get-environment-variable)(map (lambda (env-var)   (display env-var)   (display " = ")   (display (or (getenv env-var) ""))   (newline)) '("AUTH_TYPE"   "CONTENT_LENGTH"   "CONTENT_TYPE"   "DOCUMENT_ROOT"   "GATEWAY_INTERFACE"   "HTTP_ACCEPT"   "HTTP_REFERER" ; [sic]   "HTTP_USER_AGENT"   "PATH_INFO"   "PATH_TRANSLATED"   "QUERY_STRING"   "REMOTE_ADDR"   "REMOTE_HOST"   "REMOTE_IDENT"   "REMOTE_USER"   "REQUEST_METHOD"   "SCRIPT_NAME"   "SERVER_NAME"   "SERVER_PORT"   "SERVER_PROTOCOL"   "SERVER_SOFTWARE"))

執行結果如下

方法2在scheme的指令碼前面加入一下兩行代碼
#!/bin/shexec tail -n+3 $0|mit-scheme --quiet;exit

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.