2017-06-05 11 views
0

LISPについて質問があります。ファイルを読み込んでデータを保存する方法LISPプログラミング言語で

ファイルを読み込んでデータをファイルに保存するだけです。

これを行うには、このような機能を見つけて実行しました。

(defun get-file (pathname) 
    (with-open-file (stream pathname) 
    (loop for line = (read-line stream nil) 
      while line 
      collect line))) 

get-file("sample.txt") 

これは、 "unbound variable"を出力しました。エラーが発生した理由は何ですか? (関数を定義してコンパイルしただけでエラーはありませんでした)

パス名を正しく書き込むにはどうすればよいですか? (私のデータファイル(sample.txt)はLISPコードファイルの同じディレクトリにあります)

どこのデータが保存されましたか?

そして、私はそれらを分割することができますどのように

ファイルデータはこの

name 23.0 22 123 33 //(one string and four numbers) 
name2 23.5 11 156 42 //(one string and four numbers) 
name3 21.7 15 167 55 //(one string and four numbers) 

のように保存されます(ファイルは行ずつ読み込まれるので、別々の属性を持つデータが同じ行に保存する必要があります)私は完全にC言語で:(

どうもありがとう!!

+0

あなたの関数定義が間違っています。あなたはパラメータリストに文字列を入れません、あなたは変数名を入れます。 – Barmar

+0

データはどこにも保存されず、関数は読み込んだすべての行のリストを返します。 – Barmar

+1

誤ったパラメータリストのために関数定義を入力するとすぐにエラーが発生するはずです。 – Barmar

答えて

1
get-file 
("sample.txt") 
0を適応していますので、LISP言語で私は I'amぎこちない助けます

2つの式です。変数get-fileは関数として使用されていないため、変数を評価する式です。次に、式("sample.txt")は、文字列 "sample.txt"をとり、それが引数なしの関数であるかのように呼び出します。です。

これは、algolの構文をCまたはJavaのように記述しているためです。あなたがLispの書いているときに、このように、Lispの構文を記述する必要があります。

(get-file "sample.txt") 

パス名がパスからの相対であるあなたは、同じディレクトリからプログラムを起動するので、もしあなたがそれを提出LISPとして、あなたがプログラムを開始しますそこにファイルを開きます。あなたのホームディレクトリにいた場合、パスは絶対パスを使用しない限り相対パスです。

データを保存するには、保存してそのファイルに出力するためにファイルを開く必要があります。今はどのように行のリストを作成し、それはREPLに画面が返されません。

文字列をスペースで分割することができます。 parse-numberを使用すると、数値を表す文字列を数値に変換できます。安全でない方法があります(read-from-string "3.0") ; ==> 3.0

新しい言語を学ぶためには、自分で準備する必要があります。 Algolに基づいたCとは異なる構文をしています。今日のプログラミング言語のほとんどは、いくつかの言語を知っていれば、おそらく同じ言語のいくつかの方言を知っているでしょう。あなたにはすぐに新しいお気に入りのプログラミング言語があります。

関連する問題