2016-03-29 7 views
0

タイトルはすべて私の関数にリストを渡すので、 L = [{"Socrates"、 "fork1、fork2"}、{"Confucius" "プラント"、 "フォーク5、フォーク1"}リスト内のタプルから一致する要素を抽出する

私はパスします。一致する値と一致する値が見つかったらリストの2番目の要素だけを渡したいとします。たとえば、 "Socrates"を渡すと "fork1、fork2"に戻ります。

ここに私それに関わる2つの機能

whichFork({Name},[X|Xs]) -> 
Fork = element(2,X),%get forks 
Phil = element(1,X),%get phil name 
Check = are_the_same(Phil,Name),%find out if they match 
    case Check of 
    true-> Fork;%return forks in string 
    false->whichFork(Name,Xs)%false repeat iterating the list 
    end; 
whichFork(_,[]) -> %not found 
false. 

are_the_same(A,B) when A=:=B -> 
    true; 
are_the_same(_,_) -> 
    false. 

サイト上で検索したところ、そのような質問はありませんでしたので、どんな助けにもなりました。

答えて

1

ブラックマンバを使用することができ、すでにあなたに答えを与えたが、私はあなたのコードの2人の発言を持っています。

まず、エラー管理については、哲学者の問題では、存在しない名前を探している可能性はありません(コード内のバグを除く)ので、whichFork(_,[]) -> false.は役に立ちません。コードがクラッシュします。

第二には、パターンマッチングの使用である:それは同じ結果を与え、そしてあなたがwichFork関数にこれを拡張することができare_the_same(A,A) -> ...コードare_the_same(A,B) when A=:=B -> ...をこのように書くことができます。

whichFork(Name,[{Name,Forks}|Xs]) -> Forks; 
whichFork(Name,[_|Xs]) -> whichFork(Name,Xs). 
関連する問題