2011-02-05 43 views
5

Tôi khá mới đối với lập trình Haskell và tôi không hiểu tại sao tôi nhận được lỗi này trong mã của mình.Haskell: lỗi từ vựng trong chuỗi ký tự/ký tự ở ký tự 'i'

Sự cố của tôi như sau: Bất kỳ số nguyên dương nào i có thể được biểu thị bằng i = 2^n * k, trong đó k là số lẻ, tức là, với lũy thừa là 2 lần một số lẻ. Chúng tôi gọi n số mũ là 2 trong i. Ví dụ, số mũ của 2 trong 40 là 3 (vì 40 = 2^3 * 5) trong khi số mũ của 2 trong 42 là 1. Nếu tôi là số lẻ, thì n là số không. Nếu, mặt khác, tôi là ngay cả, có nghĩa là nó có thể được chia cho 2. Viết một hàm exponentOfTwo cho fi nding số mũ của 2 trong đối số của nó.

Tôi hiểu psuedocode và nó có vẻ khá đơn giản: đệ quy chia i 2 cho đến khi kết quả là số lẻ, số lần phân chia xảy ra là n

đây là mã của tôi (dòng 31-32):

exponentOfTwo :: Int -> Int 
exponentOfTwo i = if odd i then 0 else 1 + exponentOfTwo (i 'div' 2) 

tôi nhận được thông báo lỗi "lỗi từ vựng trong chuỗi/ký tự chữ ở nhân vật 'i'" trên dòng 32 cột 62.

tôi đã cố gắng tìm kiếm một giải pháp cho lỗi này ở khắp mọi nơi và cho đến nay Tôi không có may mắn.

Trả lời

6

Để sử dụng hàm trong mã nhúng, hãy bao quanh hàm đó bằng dấu gạch chéo (`), không phải với dấu nháy đơn ('). Sau này là cho các ký tự chữ, trong đó, cũng chỉ có một ký tự dài.

2

Các ký tự trong khoảng div backquotes thay vì dấu ngoặc kép bình thường? Họ cần phải cho phép một tên hàm được sử dụng như một toán tử infix. Tôi đã thay đổi điều đó trong định nghĩa của bạn và mã đã làm việc cho tôi.

+0

Oh wow đó là một sửa chữa dễ dàng, bây giờ tôi cảm thấy ngớ ngẩn. Tôi không bao giờ biết rằng phải như vậy. Cảm ơn nhiều! – Gus

Các vấn đề liên quan