私は Elm について独立した研究を行っており、プログラミングをもう一度学習しているように感じます! 言語を学ぶプロジェクトとして、簡単なブラックジャックを立ち上げて実行しようとしていますが、始めてみると、まだ理解していないことがたくさんあることに気づきました。デッキからカードを引いてリストに追加する限り、私は持っています:
import Random
import Mouse
import Array
--Build the deck
faces = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
suits = ['H', 'D', 'C', 'S']
allCards faces suits =
case suits of
x :: xs -> family faces x ++ allCards faces xs
_ -> []
family faces suit =
case faces of
x :: xs -> (,) x suit :: family xs suit
_ -> []
deck = allCards faces suits
rand : Signal Int
rand = Random.range 0 (length deck-1) Mouse.clicks
pickCard n = head <| drop n deck
nextCard = lift pickCard rand
yourHand = foldp (::) [] nextCard
main = lift asText yourHand
私の質問は、主に継続する方法についてです。完成した Elm プロジェクトを見ると少しは役に立ちますが、それらの多くは初心者の私には解析が困難です。どんな方向性でも役に立ちます!
私が最初に抱えた問題の 1 つは、ドローしたカードをリストから除外するなどの方法を使用して、ドローしたカードをデッキから削除する方法を見つけようとすることでした
dropCard deck card = filter (\card /= nextCard) deck
。しかし、Elm についての私の理解では、シグナルが変化するたびにプログラムが再評価されます。つまり、カードが引かれるたびにデッキが完全に再作成されます。foldp
オリジナルのデッキも必要ですか?関数型プログラミングで、あるリストから要素を削除して別のリストに追加する適切な方法は何ですか? のような機能合成
toHand . dropCard card
?勝敗を決定するためにカードの顔を追加するために、リストから整数値を取得する方法がわかりません。をやってみ
fst (head deck)
ましたが、おそらくデッキ自体が何らかのシグナルであるため、型エラーが発生しました。私が見ていないものはありますか?
そうは言っても、これまでのところ、私は Elm を本当に楽しんでいます!